2018-09-04pygame

01-recode

  • 1.json數(shù)據(jù)
    標(biāo)準(zhǔn)格式:a.只能是一個(gè)數(shù)據(jù) b.數(shù)據(jù)必須是json支持的類型
    數(shù)據(jù)類型:對(duì)象(字典),數(shù)組(列表),字符串(雙引號(hào))形葬,數(shù)字合呐,布爾(true,false),null
    json數(shù)據(jù)和python之間的轉(zhuǎn)換關(guān)系
    python模塊中的方法:load,loads,dump,dumps
  • 2.異常捕獲
    try - except - finally
  • 3.第三方庫(kù)導(dǎo)入
    import 模塊
    from 模塊 import 內(nèi)容

02-pygame操作

import pygame

if __name__ == '__main__':
    # 1.初始化游戲模塊
    pygame.init()
    # 2.創(chuàng)建游戲窗口
    '''
    display.set_mode(窗口大畜弦浴):創(chuàng)建一個(gè)窗口并且返回
    窗口大刑适怠:是一個(gè)元組,并且表示寬度和高度(單位是像素)
    '''
    window = pygame.display.set_mode((500,600))

    # 3.讓游戲一直運(yùn)行源织,直到點(diǎn)關(guān)閉按鈕結(jié)束
    flag = True
    while flag:
        window.fill((255,255,255))
        # 獲取游戲過(guò)程中產(chǎn)生的所有事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                # exit()   # 退出程序
                flag = False

03-顯示圖片

  • 給窗口填充顏色
    顏色:計(jì)算機(jī)的三原色(紅翩伪,綠微猖,藍(lán))谈息,顏色對(duì)應(yīng)的范圍分別是0-255,可以通過(guò)改變?nèi)闹盗莅{(diào)配出不同的顏色
    顏色值:是一個(gè)元組侠仇,元組中有三個(gè)元素,分別是紅綠藍(lán)(rgb)
    紅色(255犁珠,0逻炊,0),綠色(0犁享,255余素,0),藍(lán)色(0炊昆,0桨吊,255)
    黑色(0,0凤巨,0)视乐,白色(255,255敢茁,255)
    window.fill((255,255,255))
  • 顯示圖片
    image.load(圖片路徑):獲取本地的一張圖片佑淀,返回圖片對(duì)象
  • a.獲取圖片,創(chuàng)建圖片對(duì)象
    image = pygame.image.load('./files/gjl.jpg')
    get_size():獲取大小彰檬,返回值是一個(gè)元組伸刃,分別是寬和高
    image_width,image_height =image.get_size()
  • b.渲染圖片(將圖片畫(huà)在紙上)
    blit(渲染對(duì)象,位置)
    位置:坐標(biāo)(x,y)逢倍,值的類型是元組奕枝,元組有兩個(gè)對(duì)應(yīng)的元素,分別是x,y的坐標(biāo)
# window.blit(image,(600-int(image_width),400-int(image_height)))將圖片放到右下角
    window.blit(image,(0,0))
    # c.展示內(nèi)容(將紙貼在畫(huà)框上)
    pygame.display.flip()

04-形變

a.縮放
transform.scale(縮放對(duì)象瓶堕,目標(biāo)大邪馈):將指定的對(duì)象縮放到指定的大小,會(huì)返回縮放后的對(duì)象
new_image = pygame.transform.scale(image())
b.旋轉(zhuǎn)縮放(指定縮放比例)
rotozoom(Surface,angle,scale)
Surface:旋轉(zhuǎn)對(duì)象
angle:旋轉(zhuǎn)角度
scale:縮放比例
new_image = pygame.transform.rotozoom(image,90,0.8)
c.旋轉(zhuǎn)
rotate(Surface,angle)
Surface:旋轉(zhuǎn)對(duì)象
angle:旋轉(zhuǎn)角度
new_image = pygame.transform.rotate(image, 270)

05-顯示文字

  • 1.創(chuàng)建字體對(duì)象
    a.創(chuàng)建系統(tǒng)的字體對(duì)象
    SysFont(name,size,bold = False,italic = False)
    name:字體名(系統(tǒng)支持的字體名)
    size:字體大小
    bold:是否加粗
    italic:是否傾斜
    b.創(chuàng)建自定義的字體對(duì)象
    Font(字體文件路徑,字體大刑饭!)
    字體文件路徑:ttf文件
 # a.創(chuàng)建系統(tǒng)字體
    # font = pygame.font.SysFont('Times',30)

    # b.創(chuàng)建自定義字體
    font = pygame.font.Font('./files/aa.ttf',50)
  • 2.根據(jù)字體去創(chuàng)建文字對(duì)象
    render(text,antialias,color,background = None)
    text:需要顯示的文字(字符串)
    antialias:是否平滑(布爾)
    color:顏色
    background:背景顏色
text = font.render('Hello,高漸離 忘晤!',True,(255,80,200))
    print(text.get_size())

06-顯示圖形

1.畫(huà)直線
def line(Surface,color,star_pos,end_pos,width=1)
Surface:畫(huà)在哪
color:顏色
star_pos:起點(diǎn)
end_pos:終點(diǎn)
width:線寬

# 畫(huà)一條水平線
    # pygame.draw.line(window,(255,0,0),(50,100),(200,100))
    # pygame.draw.line(window, (255, 100, 200), (0, 0), (100, 100),10)

2.畫(huà)線段(折線)
def lines(Surface,color,close,pointlist,width=1)
Surface:畫(huà)在那
color:顏色
close:是否閉合(是否連接起點(diǎn)和終點(diǎn))
pointlist:點(diǎn)對(duì)應(yīng)的列表
width:線的寬度
pygame.draw.lines(window,(255,100,200),True,[(0,0),(100,0),(100,100),(200,100),(200,200)],10)
3.畫(huà)圓
def circle(Surface,color,pos,radius,width=1)
Surface:畫(huà)在那
color:顏色
pos:圓心坐標(biāo)
radius:半徑
width:0-->填充
pygame.draw.circle(window,(255,255,0),(200,300),100,0)
4.畫(huà)矩形
def rect(Surface,color,Rect,width=0)
Surface:畫(huà)在那
color:顏色
Rect:范圍(元組,元組中有4個(gè)元素激捏,分別是x,y,width,height)
pygame.draw.rect(window,(200, 150, 200), (200, 200, 250, 300),20)
5.畫(huà)多邊形
polygon(Surface,color,pointlist,width=0)
pointlist:多邊形各點(diǎn)坐標(biāo)设塔,組成一個(gè)元組
6.畫(huà)橢圓
def ellipse(Surface,color,Rect,width=0)
pygame.draw.ellipse(window, (200, 150, 200), (200, 200, 250, 300), 20)
7.畫(huà)弧線
def arc(Surface,color,Rect,start_angle,stop_angle,width=1)
import math pygame.draw.arc(window,(255,0,0),(100, 100, 100, 100),math.pi,math.pi/2,10)

07-事件

所有的事件處理的入口就是這個(gè)for循環(huán)

  • for循環(huán)中的代碼只有游戲事件發(fā)生后才會(huì)執(zhí)行
    a.事件的type:
    QUIT:關(guān)閉按鈕被點(diǎn)擊事件
    鼠標(biāo)事件:
    MOUSEBUTTONDOWN:鼠標(biāo)按下事件
    MOUSEBUTTONUP:鼠標(biāo)彈起
    MOUSEMOTION:鼠標(biāo)移動(dòng)
    鍵盤(pán)事件:
    KEYDOWN:鍵盤(pán)按下
    KEYUP:鍵盤(pán)彈起

    b.事件的pos--鼠標(biāo)事件發(fā)生的位置(坐標(biāo))

    c.事件的key--鍵盤(pán)事件被按的鍵對(duì)應(yīng)的編碼值

        for event in pygame.event.get():
            # 不同的事件發(fā)生后,對(duì)應(yīng)的type值不一樣
            if event.type == pygame.QUIT:
                print('點(diǎn)擊關(guān)閉')
                exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                # 鼠標(biāo)按下要做的事情
                print(event.pos)
                print('鼠標(biāo)按下')
                # 鼠標(biāo)按下一次畫(huà)一個(gè)球
                pygame.draw.circle(window,(random.randint(0,255),random.randint(0,255),random.randint(0,255)),event.pos,20)
                pygame.display.flip()
            elif event.type == pygame.MOUSEBUTTONUP:
                print('鼠標(biāo)彈起')
            elif event.type == pygame.MOUSEMOTION:
                print('鼠標(biāo)正在移動(dòng)',event.pos)
            elif event.type == pygame.KEYDOWN:
                print('鍵盤(pán)按下',event.key,chr(event.key))
            elif event.type == pygame.KEYUP:
                print('鍵盤(pán)彈起')

08-動(dòng)畫(huà)效果

 # c.展示內(nèi)容(將紙貼在畫(huà)框上)
    pygame.display.flip()

    # 圓心坐標(biāo)
    x = 100
    y = 100
    r = 50
    add = 4
    m = 2
    n = 1
    # 游戲循環(huán)
    while True:

        pygame.time.delay(5)
        # 將之前window上的內(nèi)容覆蓋了
        window.fill((255,255,255))

        # 不斷的畫(huà)圓
        pygame.draw.circle(window,(randint(0,255),randint(0,255),randint(0,255)),(x,y),r)
        pygame.display.update()

        # 改變y值讓圓在垂直方向移動(dòng)
        y += m
        x += n
        # r += add
        # if r >=600 or r <= 20 :
        #     add *= -1
        if y >= 600 - r or y <= 50:
            m *= -1
        elif x >= 400-r or x <= 50:
            n *= -1
        # 事件檢測(cè)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

09-按住不放原理

import pygame
if __name__ == '__main__':
    # 初始化远舅,創(chuàng)建窗口
    pygame.init()
    window = pygame.display.set_mode((400,600))
    window.fill((255,255,255))

    image = pygame.image.load('./files/gjl.jpg')
    # 縮放
    image = pygame.transform.rotozoom(image,0,0.5)
    window.blit(image,(100,100))
    # 獲取圖片的寬度闰蛔、高度
    image_w,image_h = image.get_size()

    # c.展示內(nèi)容(將紙貼在畫(huà)框上)
    pygame.display.flip()

    # 用來(lái)存儲(chǔ)圖片是否移動(dòng)
    flag = False

    # 保存圖片的坐標(biāo)
    image_x,image_y = 100,100
    # 游戲循環(huán)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

            # 鼠標(biāo)按下
            if event.type == pygame.MOUSEBUTTONDOWN:
                # 判斷鼠標(biāo)的范圍是否在圖片上
                m_x,m_y = event.pos
                if image_x<=m_x<=image_x+image_w and image_y<=m_y<=image_y+image_h:
                    flag = True
            elif event.type == pygame.MOUSEBUTTONUP:
                flag = False
            # 鼠標(biāo)移動(dòng)事件
            # 鼠標(biāo)在移動(dòng),并且flag為T(mén)rue
            if event.type == pygame.MOUSEMOTION and flag:
                # 填充背景色
                window.fill((255,255,255))

                # 在鼠標(biāo)移動(dòng)的位置渲染圖片
                # window.blit(image,event.pos
                center_x,center_y = event.pos
                image_x, image_y = center_x - image_w/2,center_y - image_h/2
                window.blit(image,(image_x, image_y))
                # 更新屏幕顯示
                pygame.display.update()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末图柏,一起剝皮案震驚了整個(gè)濱河市序六,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚤吹,老刑警劉巖例诀,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異裁着,居然都是意外死亡繁涂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)二驰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扔罪,“玉大人,你說(shuō)我怎么就攤上這事桶雀】蠼停” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵背犯,是天一觀的道長(zhǎng)坏瘩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)漠魏,這世上最難降的妖魔是什么倔矾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮柱锹,結(jié)果婚禮上哪自,老公的妹妹穿的比我還像新娘。我一直安慰自己禁熏,他們只是感情好壤巷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瞧毙,像睡著了一般胧华。 火紅的嫁衣襯著肌膚如雪寄症。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天矩动,我揣著相機(jī)與錄音有巧,去河邊找鬼。 笑死悲没,一個(gè)胖子當(dāng)著我的面吹牛篮迎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播示姿,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼甜橱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了栈戳?” 一聲冷哼從身側(cè)響起岂傲,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荧琼,沒(méi)想到半個(gè)月后譬胎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體差牛,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡命锄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了偏化。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脐恩。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖侦讨,靈堂內(nèi)的尸體忽然破棺而出驶冒,到底是詐尸還是另有隱情,我是刑警寧澤韵卤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布骗污,位于F島的核電站,受9級(jí)特大地震影響沈条,放射性物質(zhì)發(fā)生泄漏需忿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一蜡歹、第九天 我趴在偏房一處隱蔽的房頂上張望屋厘。 院中可真熱鬧,春花似錦月而、人聲如沸汗洒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溢谤。三九已至瞻凤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間世杀,已是汗流浹背鲫构。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玫坛,地道東北人结笨。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像湿镀,于是被迫代替她去往敵國(guó)和親炕吸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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