PYTHON筆記第十二章之pygame

cj1064789374發表於2018-12-07
#入門顯示個視窗
import pygame#匯入PYGAME庫
pygame.init()#假惺惺初始化
screen=pygame.display.set_mode((640,320))#開闢視窗
pygame.display.set_caption("basic frame")#定義標題
bakcground=pygame.Surface(screen.get_size())#得到尺寸
bakcground=bakcground.convert()#螢幕轉換為畫素
bakcground.fill((255,255,255))#填充白色
'''
pygame.time.get_ticks—得到以毫秒為間隔的時間
pygame.time.wait—暫停程式一段時間
pygame.time.delay—暫停程式一段時間
pygame.time.set_timer—在事件佇列上重複建立事件
pygame.time.Clock—建立一個物件來幫助跟蹤時間
'''
clock=pygame.time.Clock()#定義時間鎖
running=True#定義變數
while running:#一直跑
    clock.tick(30)#計時30MS,時間到了就進下面的迴圈
    for event in pygame.event.get():#掃一次得到的每個結果
        if event.type==pygame.QUIT:#如果當前專案有退出標誌
            running=False#標誌位清0
    screen.blit(bakcground,(0,0))#螢幕傳送到左上角
    pygame.display.update()#更新顯示
pygame.quit()#退出
#兩球自由移動
import pygame,random,math #匯入PYTHON遊戲模組,隨機模組,數學模組
#終於可以物件導向啦!
class Ball(pygame.sprite.Sprite):#定義球類
    dx=0
    dy=0
    x=0
    y=0
    def __init__(self,speed,srx,sry,radium,color):#構造器
        pygame.sprite.Sprite.__init__(self)
        self.x=srx
        self.y=sry
        self.image=pygame.Surface([radium*2,radium*2])
        self.image.fill((255,255,255))
        pygame.draw.circle(self.image,color,(radium,radium),radium,0)
        self.rect=self.image.get_rect()
        self.rect.center=(srx,sry)
        direction=random.randint(20,70)
        radian=math.radians(direction)
        self.dx=speed*math.cos(radian)
        self.dy=-speed*math.sin(radian)
    def update(self):#更新
        print("{} {}".format(self.x,self.y))
        self.x+=self.dx
        self.y+=self.dy
        self.rect.x=self.x
        self.rect.y=self.y
        if(self.rect.left<=0 or self.rect.right >=screen.get_width()):
            self.dx*=-1
        elif(self.rect.top<=5 or self.rect.bottom>=screen.get_height()-5):
            self.dy*=-1

allsprite=pygame.sprite.Group()#建立一個精靈組用來管理同類物件(就不能開個陣列?)
ball1=Ball(8,100,100,20,(0,0,255))#定義紅球
allsprite.add(ball1)#壓入精靈組
ball2=Ball(6,200,250,20,(255,0,0))#定義藍球
allsprite.add(ball2)##壓入精靈組

pygame.init()#初始化
screen=pygame.display.set_mode((640,320))#開視窗
pygame.display.set_caption("basic frame")#定標題
background=pygame.Surface(screen.get_size())#獲大小
background=background.convert()#螢幕翻轉,好像是標準動作,不翻就不能正常顯示
background.fill((255,255,255))#白色填充

clock=pygame.time.Clock()#開時鐘(用於重新整理)
running=True#開標誌
while running:#真
    clock.tick(30)#間隔30MS
    for event in pygame.event.get():#看有沒有退出的資訊
        if event.type==pygame.QUIT:#有的話
            running=False#更改標誌位
    screen.blit(background,(0,0))#位塊傳送把背景回到左上角
    ball1.update()#球一更新
    ball2.update()#球二更新
    allsprite.draw(screen)#繪製
    pygame.display.update()#更新顯示
    result=pygame.sprite.collide_rect(ball1,ball2)#檢測兩個矩形是否有重合部分
    if result==True:#有
        print("撞上了")#輸出
pygame.quit()#退出
#單球自由移動
import pygame,random,math#匯入三庫
pygame.init()#初始化
screen=pygame.display.set_mode((640,320))#開窗
pygame.display.set_caption("basic frame")#定標
background=pygame.Surface(screen.get_size())#獲尺
background=background.convert()#轉像
background.fill((255,255,255))#填白

ball=pygame.Surface((30,30))#畫塊
ball=ball.convert()#轉換
ball.fill((255,255,255))#填白
pygame.draw.circle(ball,(0,0,255),(15,15),15,0)#畫圓
rect1=ball.get_rect()#得矩
rect1.center=(320,45)#得中心
x,y=rect1.topleft#得左上角座標
direction=random.randint(20,70)#隨機得到一個值,20~70間
radian=math.radians(direction)#轉換為弧度
dx=5*math.cos(radian)#由弧得到到速度橫偏移
dy=-5*math.sin(radian)#由弧得到速度豎偏移

clock=pygame.time.Clock()#開鍾
running=True#標誌
while running:#等死
    clock.tick(30)#間隔30MS
    for event in pygame.event.get():#掃一次獲得的資訊
        if event.type==pygame.QUIT:#有結束資訊
            running=False#打標誌
    screen.blit(background,(0,0))#背景移到左上角
    x+=dx#橫偏移
    y+=dy#豎偏移
    rect1.center=(x,y)#得到中心
    if(rect1.left<=0 or rect1.right>=screen.get_width()):#碰左右牆
        dx*=-1#變方向
    if(rect1.top<=5 or rect1.bottom>=screen.get_height()-5):#碰上下牆
        dy*=-1#變方向
    screen.blit(ball,rect1.topleft)#把球移到矩形左上角
    pygame.display.update()#更新顯示
    print(rect1.topleft)#輸出座標

pygame.quit()#結束
#顯示文字
import pygame
pygame.init()
screen=pygame.display.set_mode((640,320))
pygame.display.set_caption("basic frame")
bakcground=pygame.Surface(screen.get_size())
bakcground=bakcground.convert()
bakcground.fill((0,255,0))

font1=pygame.font.SysFont("新細明體",24)#定義字型
text1=font1.render("Chinese",True,(255,0,0),(255,255,255))#定義文字
bakcground.blit(text1,(20,10))#把文字移到(20,10)的位置
text2=font1.render("English",True,(0,0,255),(0,255,0))#同理
bakcground.blit(text2,(20,50))

screen.blit(bakcground,(0,0))#移屏
pygame.display.update()#更新

running=True#等死
while running:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
pygame.quit()
#滑鼠事件
import pygame#匯入庫
pygame.init()#初始化
screen=pygame.display.set_mode((640,320))#設定SIZE
pygame.display.set_caption("basic frame")#設定標題
background=pygame.Surface(screen.get_size())#獲取SIZE
background=background.convert()#翻轉
background.fill((255,255,255))#填白色

ball=pygame.Surface((30,30))#定義一個
ball=ball.convert()#修改影像(Surface 物件)的畫素格式
ball.fill((255,255,255))#塗白色
pygame.draw.circle(ball,(0,0,255),(15,15),15,0)#畫圓
rect1=ball.get_rect()#得到球的矩形
rect1.center=(320,45)#定義矩形的中心
x,y=rect1.topleft#得到左上角左坐
dx=3#定義變數

clock=pygame.time.Clock()#開計時器及標置位
playing=False
running=True
while running:
    clock.tick(30)
    for event in pygame.event.get():#這四行是標配
        if event.type==pygame.QUIT:
            running=False
    screen.blit(background,(0,0))#把背景傳回左上角

    buttons=pygame.mouse.get_pressed()#獲取當前滑鼠的按下狀態
    if buttons[0]:#第0位標誌為1表示有左鍵按下
        playing=True#遊戲標誌位為真
    elif buttons[2]:#第2位標誌為1表示右鍵按下
        playing=False#遊戲標誌位為假
    if playing==True:#如果為真
        mouses=pygame.mouse.get_pos()#就獲得滑鼠座標
        rect1.centerx=mouses[0]#矩形中心X就是滑鼠的X
        rect1.centery=mouses[1]#矩形中心y就是滑鼠的y

    screen.blit(ball,rect1.topleft)#把球傳送到矩形的左上角
    pygame.display.update()#更新

pygame.quit()#退出
#畫圖
import pygame
pygame.init()
screen=pygame.display.set_mode((640,320))#開窗
pygame.display.set_caption("basic frame")#定標
bakcground=pygame.Surface(screen.get_size())#獲尺
bakcground=bakcground.convert()#轉像
bakcground.fill((255,255,255))#填白

pygame.draw.circle(bakcground,(0,0,0),(150,150),130,4)#畫圓
pygame.draw.circle(bakcground,(0,0,255),(100,120),25,0)#畫圓
pygame.draw.circle(bakcground,(0,0,255),(200,120),25,0)#畫圓
pygame.draw.ellipse(bakcground,(255,0,255),[135,130,30,80],0)#畫橢圓
pygame.draw.arc(bakcground,(255,0,0),[80,130,150,120],3.4,6.1,9)#畫弧

screen.blit(bakcground,(0,0))#螢幕移回左上角
pygame.display.update()#更新

running=True
while running:#等待退出
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
pygame.quit()
#匯入圖片
import pygame
pygame.init()
screen=pygame.display.set_mode((800,600))
pygame.display.set_caption("basic frame")
bakcground=pygame.Surface(screen.get_size())
bakcground=bakcground.convert()
bakcground.fill((0,255,0))#綠背景

image=pygame.image.load("img01.jpg")#載入圖1
image.convert()#轉為畫素
bakcground.blit(image,(20,10))#把圖片位塊傳送到點(20,10)位置
compass=pygame.image.load("img02.jpg")#下面三行同上
compass.convert()
bakcground.blit(compass,(400,50))

screen.blit(bakcground,(0,0))#下面同上一例
pygame.display.update()

running=True
while running:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
pygame.quit()
#水平移動&鍵盤響應
import pygame#匯入庫
pygame.init()#初始化
screen=pygame.display.set_mode((640,320))#開窗
pygame.display.set_caption("basic frame")#定標
background=pygame.Surface(screen.get_size())#獲尺
background=background.convert()#轉像
background.fill((255,255,255))#填白

ball=pygame.Surface((30,30))#定義一個影像塊,寬高都是30
ball=ball.convert()#轉變為畫素
ball.fill((255,255,255))#填白
pygame.draw.circle(ball,(0,0,255),(15,15),15,0)#在塊裡畫圓,注意圓心一定是15,15,然然半徑取15
rect1=ball.get_rect()#畫矩
rect1.center=(320,45)#定義矩形中心為320,45
x,y=rect1.topleft#得到矩形的左上角座標
dx=3#初始化

clock=pygame.time.Clock()#開鍾
running=True#標誌
while running:#等待
    clock.tick(30)#重新整理間隔
    for event in pygame.event.get():#等死三連
        if event.type==pygame.QUIT:
            running=False
            
    keys=pygame.key.get_pressed()#鍵盤點選狀態獲取
    if keys[pygame.K_RIGHT] and dx<0:#按了右鍵且當前在左移
        dx*=-1#往左移
    elif keys[pygame.K_LEFT] and dx>0:#按了左鍵且當前在右移
        dx*=-1#往右移
    
    screen.blit(background,(0,0))#把螢幕移到左上角
    x+=dx#偏移
    rect1.center=(x,y)#矩形中心獲取
    if(rect1.left<=0 or rect1.right>=screen.get_width()):#如果矩形超邊界
        dx*=-1#速度取反
    #print("bbb")    
    screen.blit(ball,rect1.topleft)#把球塊移回矩形的左上角
    #print("ccc")
    pygame.display.update()
    #print(rect1.topleft)

pygame.quit()

相關文章