day15-面向?qū)ο蠛蚿ygame

1.多繼承

多繼承:就是讓一個(gè)類同時(shí)繼承多個(gè)類
兩個(gè)類的字段都能繼承
兩個(gè)類的方法都能繼承
對(duì)象屬性只能繼承第一個(gè)類的對(duì)象屬性

注意:實(shí)際開(kāi)發(fā)一般不使用多繼承

多態(tài):
類的特點(diǎn):封裝像吻、繼承麸锉、多態(tài)

封裝:可以對(duì)多條數(shù)據(jù)和多個(gè)功能進(jìn)行封裝
繼承:可以讓一個(gè)類擁有另外一個(gè)類的屬性和方法
多態(tài):有繼承就有多態(tài)(一個(gè)事物的多種形態(tài))

2.運(yùn)算符重載

1.別的語(yǔ)言的函數(shù)和函數(shù)的重載
C++/java聲明函數(shù)的語(yǔ)法:
返回值類型 函數(shù)名(參數(shù)類型1 參數(shù)名1弹渔, 參數(shù)類型2 參數(shù)名2){
函數(shù)體
}

int func1(){

}
void func1(int a){

}
void func1(int a, int b){

}
int func1(int a, int b){

}
這四個(gè)函數(shù)時(shí)不同的函數(shù)(可以同時(shí)存在)
python中的函數(shù)不支持重載
def func1():
pass

def func1(a):
pass

def func1(a, b):
pass
最終只有最后這一個(gè)func1,前面的會(huì)被覆蓋

2.運(yùn)算符重載
python中使用運(yùn)算符的時(shí)候奇适,實(shí)質(zhì)是在調(diào)用相應(yīng)的魔法方法。
(python中每個(gè)運(yùn)算符都對(duì)應(yīng)一個(gè)魔法方法)
運(yùn)算符重載:在不同的類中實(shí)現(xiàn)同一個(gè)運(yùn)算符對(duì)應(yīng)的魔法方法芦鳍,來(lái)讓類的對(duì)象支持相應(yīng)的運(yùn)算

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __add__(self, other):
        return self.age + other.age

    def __sub__(self, other):
        return self.age - other.age

    # >,<只需要重載一個(gè)嚷往,另外一個(gè)自動(dòng)支持
    def __lt__(self, other):
        return self.age < self.age

    def __repr__(self):
        return str(self.__dict__)[1:-1]


stu1 = Student('小明', 18)
stu2 = Student('小紅', 20)
print(stu1 + stu2)
print(stu1 - 5)
list_stu = [stu1, stu2]
list_stu.sort()
print(list_stu)

3.內(nèi)存管理機(jī)制

1.堆和棧
內(nèi)存區(qū)域分堆區(qū)間和棧區(qū)間;棧區(qū)間的內(nèi)存的開(kāi)辟和釋放是自動(dòng)的柠衅,堆區(qū)間的內(nèi)存是手動(dòng)開(kāi)辟和釋放
內(nèi)存管理管理的是堆區(qū)間的內(nèi)存

2.數(shù)據(jù)的存儲(chǔ)
a.python中所有的數(shù)據(jù)都是對(duì)象皮仁,都是保存在堆中的
b.python中所有的變量存儲(chǔ)的都是存在堆中的數(shù)據(jù)的地址。存了對(duì)象地址的變量又叫對(duì)象的引用
c.默認(rèn)情況下創(chuàng)建對(duì)象就會(huì)在堆中去開(kāi)辟空間存儲(chǔ)數(shù)據(jù),并且將地址返回贷祈;
如果對(duì)象是數(shù)字和字符串趋急,不會(huì)直接開(kāi)辟空間,會(huì)做緩存付燥,而且使用的時(shí)候會(huì)先去緩存中看之前有沒(méi)有存過(guò)宣谈,
有就直接返回之前的數(shù)據(jù)的地址,沒(méi)有才開(kāi)辟新的空間存儲(chǔ)數(shù)據(jù)

3.數(shù)據(jù)的銷毀
python中通過(guò)垃圾回收機(jī)制來(lái)管理內(nèi)存的釋放
原理:看一個(gè)對(duì)象釋放銷毀就看這個(gè)對(duì)象的引用計(jì)數(shù)釋放為0键科,為0就銷毀
引用計(jì)數(shù):對(duì)象的引用個(gè)數(shù)
getrefcount(對(duì)象) - 獲取對(duì)象的引用計(jì)數(shù)
注意:垃圾回收機(jī)制其實(shí)就是回收引用計(jì)數(shù)是0的對(duì)象闻丑,但是系統(tǒng)不會(huì)時(shí)時(shí)刻刻的檢測(cè)對(duì)象的引用計(jì)數(shù)釋放為0,
而是隔一段時(shí)間檢測(cè)一次勋颖,如果檢測(cè)到垃圾就回收

循環(huán)引用:Python中會(huì)自動(dòng)銷毀嗦嗡,

from sys import getrefcount
# 1.增加引用計(jì)數(shù):使用變量存對(duì)象的地址
list1 = [1]  # 對(duì)象[1]的引用計(jì)數(shù)是1
print(getrefcount(list1))
list2 = list1  # 對(duì)象[1]的引用計(jì)數(shù)是2
print(getrefcount(list1))
list3 = [list1, 10]  # 對(duì)象[1]的引用計(jì)數(shù)是3
print(getrefcount(list1))  # 這個(gè)函數(shù)引用時(shí)自動(dòng)加1,結(jié)束后自動(dòng)減1

2.減少引用計(jì)數(shù)

a.刪除引用
b.讓當(dāng)前對(duì)象的引用成為別的對(duì)象的引用

print('-----------')
del list3[0]
print(getrefcount(list1))

list2 = 100
print(getrefcount(list1))

print(getrefcount(100))

4.游戲的最小系統(tǒng)

import pygame

1.游戲初始化

pygame.init()

2.創(chuàng)建游戲窗口

set_mode(寬度,高度) - 窗口大小是一個(gè)元組,有兩個(gè)元素:width,height
單位是像素

window = pygame.display.set_mode((400, 600))

將窗口填充成指定的顏色

fill(顏色) - fill((r, g, b)) - python中的顏色是一個(gè)元組
計(jì)算機(jī)顏色:計(jì)算機(jī)三原色 - 紅饭玲、綠侥祭、藍(lán)(rgb)
顏色值就是由三個(gè)數(shù)字組成,分別代表紅茄厘、綠矮冬、藍(lán)(rgb),數(shù)字范圍是:0 - 255
(255, 255, 255) - 白色
(0, 0, 0) - 黑色
(255, 0, 0) - 紅色
(0, 255, 0) - 綠色
(0, 0, 255) - 藍(lán)色

window.fill((150, 50, 50))

將窗口展示到屏幕上

pygame.display.flip()

3.創(chuàng)建游戲循環(huán)(死循環(huán))

while True:
    # 4.檢測(cè)事件
    for event in pygame.event.get():
        # 1.區(qū)分不同的事件次哈,做出不一樣的反應(yīng)
        # 判斷關(guān)閉按鈕點(diǎn)擊事件是否發(fā)生
        if event.type == pygame.QUIT:
            exit()

5.在窗口上顯示圖片

import pygame
pygame.init()

顯示圖片

1.加載圖片

pygame.image.load(圖片地址) - 加載指定路徑下的圖片返回一個(gè)圖片對(duì)象

image_obj = pygame.image.load('基洛夫.jpg')
image_w, image_h = image_obj.get_size()
window = pygame.display.set_mode((800, 600))
window.fill((255, 255, 255))

2.渲染圖片

blit(渲染對(duì)象, 渲染位置)
渲染對(duì)象 - 圖片對(duì)象(顯示什么)
渲染位置 - 元組胎署,(x, y)

window.blit(image_obj, (200, 200))

3.獲取圖片的大小

圖片對(duì)象.get_size() - 獲取圖片大小,返回值是一個(gè)元組窑滞,(width,height)

4.圖片縮放和旋轉(zhuǎn)

a.縮放
pygame.transform.scale(圖片對(duì)象. 大小) - 將指定的圖片縮放到指定的大小

new_image = pygame.transform.scale(image_obj, (100, 250))
# window.blit(new_image, (10, 300))

b.旋轉(zhuǎn)縮放
pygame.transform.rotozoom(圖片對(duì)象, 旋轉(zhuǎn)角度, 縮放比例)

new_image1 = pygame.transform.rotozoom(image_obj, 0, 0.5)
window.blit(new_image1, (0, 0))

pygame.display.flip()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

6.在窗口上顯示文字

import pygame
pygame.init()

window = pygame.display.set_mode((800, 600))
window.fill((255, 255, 255))

顯示文字

1.創(chuàng)建字體對(duì)象

a.系統(tǒng)字體
pygame.font.SysFont(字體名, 字體大小, bold(是否加粗)=False, italic(是否傾斜)=False) - 返回字體對(duì)象
bold=False, italic=False
b.自定義字體
pygame.font.Font(字體文件路徑, 字體大小)

font1 = pygame.font.SysFont('Times', 50, bold=True, italic=True)
# font1 = pygame.font.Font('aa.ttf', 50)

2.根據(jù)字體創(chuàng)建文字對(duì)象

render(文字內(nèi)容, 是否平滑, 文字顏色)

text = font1.render('hello pygame, 你好琼牧!', True, (255, 0, 0))

3.將文字渲染到窗口上

window.blit(text, (150, 100))

pygame.display.flip()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

7.顯示圖形

import pygame
from color import Color
import math

pygame.init()
window = pygame.display.set_mode((800, 600))
window.fill((255, 255, 255))

顯示圖形

1.畫直線
line(畫在哪里, 線的顏色, 起點(diǎn), 終點(diǎn), 線寬=1)

pygame.draw.line(window, Color.green, (0, 0), (100, 100), 10)

lines(畫在哪里, 線的顏色, 是否閉合, 點(diǎn)列表, 線寬)
依次連接點(diǎn)列表中所有的點(diǎn),是否閉合決定是否連接起點(diǎn)和終點(diǎn)

points = [(110, 160), (150, 110), (200, 200), (500, 400), (300, 300)]
pygame.draw.lines(window, Color.green, False, points)

2.畫圓

circle(畫在哪里, 線的顏色, 圓心坐標(biāo), 半徑, 線寬=0)

pygame.draw.circle(window, Color.red, (600, 200), 100, 1)

3.畫弧線

arc(畫在哪里, 線的顏色, 矩形, 起始弧度, 終止弧度, 線寬=1)
矩形 - (x, y, width, height) x,y決定矩形左上角的坐標(biāo),后面決定矩形的寬和高

pygame.draw.arc(window, Color.red, (10, 300, 200, 200), math.pi/4*5, math.pi/4*7)

4.畫橢圓

ellipse(畫在哪里, 線的顏色, 矩形, 線寬=0)

pygame.draw.ellipse(window, Color.red, (280, 400, 200, 100), 1)

5.畫多邊形

polygon(畫在哪里, 線的顏色, 點(diǎn)列表, 線寬=0)

points1 = [(50, 100), (50, 200), (80, 300), (200, 200), (150, 50)]
pygame.draw.polygon(window, Color.black, points1, 1)

6.畫矩形

rect(畫在哪里, 線的顏色, 矩形, 線寬=0)

pygame.draw.rect(window, Color.black, (250, 250, 100, 100), 1)

pygame.display.flip()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哀卫,一起剝皮案震驚了整個(gè)濱河市巨坊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌此改,老刑警劉巖趾撵,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異共啃,居然都是意外死亡鼓寺,警方通過(guò)查閱死者的電腦和手機(jī)勋磕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挂滓,“玉大人苦银,你說(shuō)我怎么就攤上這事》哪睿” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵想括,是天一觀的道長(zhǎng)陷谱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瑟蜈,這世上最難降的妖魔是什么烟逊? 我笑而不...
    開(kāi)封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮铺根,結(jié)果婚禮上宪躯,老公的妹妹穿的比我還像新娘。我一直安慰自己位迂,他們只是感情好访雪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著掂林,像睡著了一般臣缀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泻帮,一...
    開(kāi)封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天肝陪,我揣著相機(jī)與錄音,去河邊找鬼刑顺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛饲常,可吹牛的內(nèi)容都是我干的蹲堂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼贝淤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼柒竞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起播聪,我...
    開(kāi)封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤朽基,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后离陶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稼虎,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年招刨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霎俩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖打却,靈堂內(nèi)的尸體忽然破棺而出杉适,到底是詐尸還是另有隱情,我是刑警寧澤柳击,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布猿推,位于F島的核電站,受9級(jí)特大地震影響捌肴,放射性物質(zhì)發(fā)生泄漏蹬叭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一哭靖、第九天 我趴在偏房一處隱蔽的房頂上張望具垫。 院中可真熱鬧筝蚕,春花似錦、人聲如沸起宽。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)腐晾。三九已至,卻和暖如春藻糖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巨柒。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工洋满, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牺勾。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓阵漏,卻偏偏與公主長(zhǎng)得像腺怯,于是被迫代替她去往敵國(guó)和親川无。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接:http://blog.zhaiyifan.cn/2016/08/04/android-new-proj...
    MarkZhai閱讀 1,833評(píng)論 5 32
  • 每當(dāng)聽(tīng)到歌曲“老榆樹”就想起小時(shí)候家鄉(xiāng)門前的那棵老榆樹。 不知道從什么時(shí)候起仅叫,家門前面左邊,離墻不遠(yuǎn)處出了一顆小榆...
    高崖小秦閱讀 663評(píng)論 0 5
  • 跟同學(xué)丁露瓊步廖廓山淺淡人生有感 文/張瑕 一點(diǎn)憚機(jī)悟緣由笙隙,世俗常態(tài)皆因果。 生前困擾是空靈竟痰,心若止水無(wú)憂愁...
    清傾紅塵閱讀 676評(píng)論 1 3