pygame 壁球遊戲操作

  

1.窗口設置

# hello world game
import pygame,sys

pygame.init()  #初始化,其實就是檢查,電腦上一些需要的硬件調用接口、
                #基礎功能是否有問題。如果有問題,會在程序運行之前就反饋錯誤無,
                # 方便進行排查和規避
                #pygame.display.init()
screen=pygame.display.set_mode((600,400))# display-控制顯示窗口和屏幕的Pygame模塊
                                        # 初始化窗口或屏幕以進行顯示分辨率(寬高)
                                        #注意此時size位置帶括號
pygame.display.set_caption('pygame遊戲吧聊') #設置當前窗口標題

while  True:#無限循環,直到Python運行時退出結束。注意,T大寫
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()#導入的模板退出

pygame.display.update()#對顯示窗口進行更新,默認窗口全部重繪

2.展示壁球

import pygame,sys

pygame.init()
size=width,height=600,400
speed=[1,1]
BLACK=0,0,0 #定義RGB
BLUE=0,0,255


screen=pygame.display.set_mode(size ) #注意定義後size不可加括號


pygame.display.set_caption("pygame 展示壁球遊戲罷聊")
ball=pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect=ball.get_rect()#矩形移動一個偏移量(x,y)  Rect對象有一些重要屬性,
        # 例如: top,bottom,left,right表示上下左右 width,height表示寬度、高度
        #get_rect()方法返回一個 覆蓋圖像的矩形Rect對象。
while  True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()
    ballrect=ballrect.move(speed[0],speed[1])#矩形移動一個偏移量(x,y),即在橫軸方向移
                                            #動x像素,縱軸方向移動y像素,x,y爲整數
    if ballrect.left<0 or ballrect.right>width:
        speed[0]=-speed[0]#壁球的反彈運動 遇到左右兩側,橫向速度取反;
    if ballrect.top<0 or ballrect.bottom>height:
        speed[1]=-speed[1] # 遇到上下兩側,縱向速度取反。

    screen.fill(BLACK)#顯示窗口背景填充爲color顏色#小球不斷運動,運動後原有位置
                                # 將默認填充白色,因此需要不斷刷新背景色顏色要定義
    screen.blit(ball,ballrect)#將一個圖像繪製在另一個圖像上,
                        # 即將src繪 制到dest位置上。通過Rect對象引導對球的繪製
    pygame.display.update()

3.添加刷新率

import pygame,sys

pygame.init()
size=width,height=600,400
speed=[1,1]
BLACK=0,0,0
screen=pygame.display.set_mode(size)
pygame.display.set_caption("pygame 節奏型壁球遊戲罷聊")
ball=pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect=ball.get_rect()
fps=900 #每秒幀率參數,視頻中每次展示的靜態圖像稱爲幀
fclock=pygame.time.Clock()#創建一個Clock對象,用於操作時間


while  True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()
    ballrect=ballrect.move(speed[0],speed[1])
    if ballrect.left<0 or ballrect.right>width:
        speed[0]=-speed[0]
    if ballrect.top<0 or ballrect.bottom>height:
        speed[1]=-speed[1]

    screen.fill(BLACK)#直接RGB以元組形式 screen.fill((0,255,255,128)) 也可四個添加透明度
    screen.blit(ball,ballrect)
    pygame.display.update()
    fclock.tick(fps)#clock.tick(framerate) 控制幀速度,即窗口刷新速度,
                # 例如: clock.tick(100)表示每秒鐘100次幀刷新

4.窗口設置全屏型

# Unit PYG03: Pygame Wall Ball Game version 4  全屏型
import pygame,sys

pygame.init()

vInfo = pygame.display.Info()   #窗口全屏顯示
size = width, height = vInfo.current_w, vInfo.current_h
speed = [1,1]
BLACK = 0, 0, 0

#print(pygame.display.Info())
screen = pygame.display.set_mode(size, pygame.RESIZABLE)  #窗口大小可調
#screen = pygame.display.set_mode(size, pygame.NOFRAME)  #窗口無邊框
#screen = pygame.display.set_mode(size, pygame.FULLSCREEN)  #窗口全屏顯示
print(pygame.display.Info())
#但是要讓遊戲感知到我們窗口的變化,需要使用屏幕信息函數
#pygame.display.Info()#  產生一個顯示信息對象VideoInfo,表達當前屏幕的參數信息
#current_w#:當前顯示模式或窗口的像素寬度    放在窗口定義前面
#current_h#:當前顯示模式或窗口的像素高度
pygame.display.set_caption("Pygame壁球")
ball=pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
            elif event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
            elif event.key == pygame.K_DOWN:
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
                #pygame。quit 退出模塊
    ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

5.窗口調節

# Unit PYG03: Pygame Wall Ball Game version 5  伸縮型
import pygame,sys

pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size, pygame.RESIZABLE)  #窗口大小可調
#screen = pygame.display.set_mode(size, pygame.NOFRAME)  #窗口無邊框
#screen = pygame.display.set_mode(size, pygame.FULLSCREEN)  #窗口全屏顯示

pygame.display.set_caption("Pygame壁球")
ball=pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
            elif event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
            elif event.key == pygame.K_DOWN:
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
    #   elif event.type == pygame.VIDEORESIZE:
    #      size = width, height = event.size[0], event.size[1]
    #      screen = pygame.display.set_mode(size, pygame.RESIZABLE)
    # 響應窗口大小更改 不註釋爲正確伸縮性
    # Pygame.VIDEORESIZE這是一種窗口大小更改的事件 可以感知小球 換個背景顏色和沒註釋對比一下
    # 事件發生後,返回event.size元組,包含新窗口的寬度和高度
    # size[0] 寬度,也可以用event.w
    # size[1] 高度,也可以用event.h
    # 返回參數僅在事件發生時有用
    ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]

    screen.fill((0,255,255,128))
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

6.更換圖標


# Unit PYG03: Pygame Wall Ball Game version 6  圖標型
import pygame,sys

pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size, pygame.RESIZABLE)  #窗口大小可調

icon = pygame.image.load("/Users/zs_pn/PycharmProjects/image/PYG03-flower.png")
pygame.display.set_icon(icon)
#pygame.display.set_caption(title, icontitle=None)
#title設置窗口的標題內容
#icontitle設置圖表化後的小標題 †小標題可選,部分系統沒有。
# 該函數與遊戲交互邏輯配合,可以根據遊戲情節修改標題內容
#pygame.display.set_icon(surface)
#設置窗口的圖標效果、圖標是一個Surface對象,與圖像對應。
pygame.display.set_caption("Pygame壁球" )
ball = pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
            elif event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
            elif event.key == pygame.K_DOWN:
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
        elif event.type == pygame.VIDEORESIZE:
            size = width, height = event.size[0], event.size[1]
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)
    ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

4.1添加鼠標控制

import pygame,sys

pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame壁球控制罷聊")
ball=pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:#窗口叉號退出
            sys.exit()
        elif event.type == pygame.KEYDOWN:#鍵盤每個鍵對應一個具體定義
            if event.key == pygame.K_LEFT:#左
                speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
            elif event.key == pygame.K_RIGHT:#右
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
            elif event.key == pygame.K_UP:#上
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
            elif event.key == pygame.K_DOWN:#下
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
    ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

7.壁球感知

# Unit PYG03: Pygame Wall Ball Game version 7  感知型
import pygame,sys

pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size, pygame.RESIZABLE)  #窗口大小可調

icon = pygame.image.load("/Users/zs_pn/PycharmProjects/image/PYG03-flower.png")
pygame.display.set_icon(icon)
pygame.display.set_caption("Pygame壁球")
ball = pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
            elif event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
            elif event.key == pygame.K_DOWN:
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
        elif event.type == pygame.VIDEORESIZE:
            size = width, height = event.size[0], event.size[1]
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)
    if pygame.display.get_active():
        ballrect = ballrect.move(speed)
        #pygame.display.get_active():判斷窗口是否最小化
        #當窗口在系統中顯示(屏幕繪製 / 非圖標化)
        #時返回True,否則返回False

        #pygame.display.flip() - ---重新繪製整個窗口
        #pygame.display.update() - --僅重新繪製窗口中有變化的區域,相比.flip()
        #執行更快
        #拉動窗口小球會跑出去
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章