pygame筆記2

鍵盤事件控制小球速度

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("D:/PYG02-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[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)
    screen.blit(ball, ballrect) # 讓小球附着在矩陣上,隨着矩陣移動
    pygame.display.update()
    fclock.tick(fps)

全屏版帶esc退出,使用pygame.display.Info 感知屏幕信息

import pygame, sys

pygame.init()
VInfo = pygame.display.Info() # 感知屏幕信息
size = width, height = VInfo.current_w, VInfo.current_h
#size = width, height = 600, 400
speed = [1, 1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size, pygame.FULLSCREEN) #每種機制應當設置相對處理方法
pygame.display.set_caption("Pygame壁球")
ball = pygame.image.load("D:/PYG02-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()
    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)
    screen.blit(ball, ballrect) # 讓小球附着在矩陣上,隨着矩陣移動
    pygame.display.update()
    fclock.tick(fps)

自由伸縮窗體,藉助event事件

# import pygame, sys
# 
# pygame.init()
# VInfo = pygame.display.Info() # 感知屏幕信息
# #size = width, height = VInfo.current_w, VInfo.current_h
# size = width, height = 600, 400
# speed = [1, 1]
# BLACK = 0, 0, 0
# screen = pygame.display.set_mode(size, pygame.FULLSCREEN) #每種機制應當設置相對處理方法
# pygame.display.set_caption("Pygame壁球")
# ball = pygame.image.load("D:/PYG02-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[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)
#     screen.blit(ball, ballrect) # 讓小球附着在矩陣上,隨着矩陣移動
#     pygame.display.update()
#     fclock.tick(fps)

設置標題中的圖標

 

窗口最小化時暫停遊戲

兩種刷新方式,flip全刷,update只刷新更新的部分

 

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