天天看點

【pygame系列 第三課 彈球遊戲-上 】

python我們可以做文字版的遊戲,比如猜數字遊戲,21點遊戲。那python可以做圖形界面的遊戲嗎?偷偷告訴你,用pygame庫就可以實作了。pygame是python中專門用來編寫遊戲的一個引擎庫,通過使用它,就可以很快的實作編寫圖形化的遊戲。

【pygame系列 第三課 彈球遊戲-上 】

實作思路:

第一步:建立遊戲視窗

第二步:繪制一個彈球

第三步:讓球動起來

球動起來的原理實際上就是球的位置發生了改變,位置是由球的x,y坐标決定的,是以隻要不斷改變球的坐标就可以實作動起來的效果了。

第四步:邊界檢測

怎樣知道球出了邊界呢?通過比較球的x,y坐标值與邊界的坐标值,進而判斷是否出了邊界。

1.建立遊戲視窗

這個已經非常熟練了,直接看代碼。

代碼:

import pygame
import sys


pygame.init()
size =width,height=400,300
screen = pygame.display.set_mode(size)
pygame.display.set_caption("彈球遊戲")

# 背景白色
bg = (255,255,255)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    
    screen.fill(bg)
    pygame.display.flip() # 更新           

複制

效果:

【pygame系列 第三課 彈球遊戲-上 】

2.繪制一個彈球

繪制一個小球,其實就是繪制一個圓。

代碼:

import pygame
import sys

pygame.init()
size =width,height=400,300
screen = pygame.display.set_mode(size)
pygame.display.set_caption("彈球遊戲")

# 背景白色
bg = (255,255,255)  
# 球的顔色 紅色
ball_color = (255,0,0)
# 球的大小 半徑
ball_size = 20
# 球的初始位置 設定在視窗中心位置
pos_x,pos_y = width//2-ball_size,height//2-ball_size

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    
    screen.fill(bg)
    # 在視窗上繪制一個圓形 球
    pygame.draw.circle(screen,ball_color,[pos_x,pos_y],ball_size)
    pygame.display.flip()           

複制

【pygame系列 第三課 彈球遊戲-上 】

3.讓球動起來

小球是繪制出來了,那該怎樣讓它動起來了呢?物體動其實它的位置發生了改變,在計算機中就是它的坐标,我們隻要讓球的坐标變化,利用人眼暫留的效應,使得小球看上去在運動一樣。

代碼:

import pygame
import sys
import random

pygame.init()
size =width,height=400,300
screen = pygame.display.set_mode(size)
pygame.display.set_caption("彈球遊戲")

# 背景白色
bg = (255,255,255)  
# 球的顔色 紅色
ball_color = (255,0,0)
# 球的大小 半徑
ball_size = 20
# 球的初始位置 設定在視窗中心位置
pos_x,pos_y = width//2-ball_size,height//2-ball_size
# 設定球的 初始速度
speed_x=random.randint(1,5)
speed_y=random.randint(1,5)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    
    screen.fill(bg)
    # 在視窗上繪制一個圓形 球
    pygame.draw.circle(screen,ball_color,[pos_x,pos_y],ball_size)
    pygame.display.flip()
    # 等待 100ms 避免重新整理太快
    pygame.time.wait(100)
    # 更改位置
    pos_x += speed_x
    pos_y += speed_y           

複制

效果:

【pygame系列 第三課 彈球遊戲-上 】

4.邊界檢測

雖然小球可以移動了,但是發現沒過一會,小球就跑出視窗了,這個時候,我們需要檢測小球是否到達邊界,到了就改變運動方向。

代碼:

import pygame
import sys
import random
pygame.init()

size =width,height=400,300
screen = pygame.display.set_mode(size)
pygame.display.set_caption("彈球遊戲")

# 背景白色
bg = (255,255,255)  
# 球的顔色 紅色
ball_color = (255,0,0)
# 球的大小 半徑
ball_size = 20
# 球的初始位置 設定在視窗中心位置
pos_x,pos_y = width//2-ball_size,height//2-ball_size
# 設定球的 初始速度
speed_x=random.randint(1,5)
speed_y=random.randint(1,5)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    
    screen.fill(bg)
    # 在視窗上繪制一個圓形 球
    pygame.draw.circle(screen,ball_color,[pos_x,pos_y],ball_size)
    pygame.display.flip()
    # 等待 100ms 避免重新整理太快
    pygame.time.wait(100)
    # 如果小球碰到左右邊界,改變速度反彈
    if pos_x <ball_size or pos_x > width-ball_size:
        speed_x = -speed_x
    # 如果小球碰到上下邊界,改變速度反彈
    if pos_y <ball_size or pos_y > height-ball_size:
        speed_y = -speed_y
    # 更改位置
    pos_x += speed_x
    pos_y += speed_y           

複制

效果:

【pygame系列 第三課 彈球遊戲-上 】

總結:

本文主要講了如何繪制一個圓形球,如何讓球移動起來,以及限制小球移除邊界。

pygame.draw.circle(screen,ball_color,[pos_x,pos_y],ball_size) 在視窗上的中心位置繪制一個什麼顔色,多大的圓形。

speed_x = -speed_x,speed_y = -speed_y - 号表示取反的意思

pos_x <ball_size or pos_x > width-ball_size 判斷是否出了 上邊界 或者 下邊界

pos_x += speed_x ,pos_y += speed_y 累加 等效于 pos_x = pos_x+ speed_x