1. 程式人生 > >python彈球遊戲 第一章、建立介面、板子、球

python彈球遊戲 第一章、建立介面、板子、球

軟體系統

python3,我安裝的是python3.6版本。需要模組pygame,sys。缺少的童鞋自行百度安裝

面向物件的程式設計思路

遊戲的效果是利用左右的兩塊板子使得小球在矩形內部區域彈來彈去,可單人玩,也可以兩人一起玩。設計好情景過後我們來分析需要的各個物件(類)

1、板子。板子物件具有的基本屬性有:長寬、位置、左右(分左板子和右板子)、靈敏度(持續移動的速度)等。應該包含的函式有:顯示、移動、修改速度引數(隨著遊戲進行,速度加快)

2、球。球物件具有的基本屬性有:圓心位置、半徑、速度(兩個方向)。應該包含的函式有:顯示、移動、修改速度引數

上述兩個類需要兩個模組來儲存。

我們還需要一個模組用於儲存不變的引數和初始化引數設定,這樣的做法是為了讓我們修改遊戲引數時避免在一大堆程式碼和函式中迷失自我。

我們還需要一個模組來儲存遊戲執行所需的函式。加上主函式所在模組,我們初步設定至少需要五個模組。

先構建起基本框架

新建資料夾‘彈球遊戲’,我們的所有.py檔案都需要儲存在這個資料夾下,第一個模組:

game_settings.py

class Settings():
    def __init__(self):
        self.setting_screen()
        self.setting_board()
        self.setting_ball()
        
    
    def setting_screen(self):#設定介面
        self.screen_color=[0,250,250]
        self.screen_width=420
        self.screen_height=600
        self.screen_text='彈球遊戲'
    
    def setting_board(self):#設定板子
        self.board_height=100
        self.board_width=5
        self.board_color=[250,0,250]
        self.board_location=int(self.screen_height/2-self.board_height/2)
    
    def setting_ball(self):#設定彈球引數
        self.ball_color=[253,122,70]
        self.ball_rad=10
        self.ball_width=3

設定物件用於一些全域性變數定義和某些引數初始化。上述程式碼應該還是易於理解了

board.py

import pygame
class Board():
    def __init__(self,screen,settings,option):
        self.screen=screen
        self.settings=settings
        if option=='left':#如果建立左板,那麼左邊距為0
            self.left=0
        if option=='right':#如果建立右板,左邊距為如下
            self.left=screen.get_rect().right-self.settings.board_width
        self.color=settings.board_color#board具有四個引數,遊戲程序中可能會改變的量
        self.y=settings.board_location
        self.width=settings.board_width
        self.height=settings.board_height
    
    def draw_board(self):
        pygame.draw.rect(self.screen,self.color,[self.left,self.y,self.width,self.height])#畫板子

Board物件的建立需要

        1)指定主介面screen,該變數在主函式初始化

        2)引數設定settings,該變數是一個Settings型別的變數,在主函式初始化

        3)形參option表示建立的是左板子還是右板子

screen.get_rect():獲取screen物件的外接矩形

pygame.draw.rect()畫矩形,該函式可以通過help(pygame.draw.rect)來檢視呼叫和返回

ball.py

import pygame
class Ball():
    def __init__(self,screen,settings):
        self.screen=screen
        self.rad=settings.ball_rad#球相關的引數,遊戲程序中可能會有所改變
        self.color=settings.ball_color
        self.width=settings.ball_width
        self.centerx=int(screen.get_rect().width/2)
        self.centery=int(screen.get_rect().height/2)
    
    def draw_ball(self):
        pygame.draw.circle(self.screen,self.color,[self.centerx,self.centery],self.rad,self.width)

球(實際圓形)的建立和矩形的建立很類似,只是多一個函式pygame.draw.circle()該函式用於畫一個圓形物件

game_function.py

import sys
import pygame
def update_screen(settings,screen,ball,boardl,boardr):#遊戲第一個函式,更新介面
    for event in pygame.event.get():#獲取外設輸入
        if event.type==pygame.QUIT:#外設輸入為點選右上角'x'
            sys.exit()#退出遊戲
    screen.fill(settings.screen_color)#在screen中填充一定顏色
    boardl.draw_board()#畫左板
    boardr.draw_board()#畫右板
    ball.draw_ball()#畫圓形
    pygame.display.flip()#更新所有display物件

game_function中第一個定義的函式,用於不斷重新整理介面,並不斷在介面上畫圖

game_main.py

import pygame
from game_settings import Settings
from board import Board
from ball import Ball
import game_function as gf
pygame.init()#初始化
settings=Settings()#獲取設定引數
screen=pygame.display.set_mode((settings.screen_width,settings.screen_height))#建立一個介面,限制長寬
screen.fill(settings.screen_color)#介面上色
pygame.display.set_caption(settings.screen_text)#介面上文字
bd1=Board(screen,settings,'left')#定義左板,定義只需要一次
bd2=Board(screen,settings,'right')#定義右板
ball=Ball(screen,settings)#定義球
while True:
    gf.update_screen(settings,screen,ball,bd1,bd2)

將上述四個.py檔案放在一個資料夾‘彈球遊戲’下,然後執行game_main.py可以得到以下結果:


這便是彈球遊戲的基本構成,當然,這個介面是沒有和使用者互動的,只是靜靜地顯示而已,接下來我們需要讓它們慢慢'動起來'