1. 程式人生 > >python3製作遊戲的一次嘗試。

python3製作遊戲的一次嘗試。

最近在學習python 與大家分享一點python製作小遊戲的經歷。

同時也希望大家能指出程式設計工程中的不足。

當然只是學習,原始碼是基於《python程式設計從入門到實踐》這本書上的。

由於時間有限,暫時與大家分享半成品。

遊戲的成品類似於坦克大戰,通過←→來控制飛船的移動,空格鍵控制射擊,上面是外星人,遊戲速度逐漸加快,

如果外星人到達低端game over。

成品如果做出來會在下一篇部落格發。

半成品是這樣。


本程式需要呼叫pygame這個封裝好的庫。

目前探索到的這個庫的功能有:

建立視窗,對圖片進行矩形化處理,獲取圖片畫素位置,背景上色,監控案按鍵輸入..........

具備了一個製作簡易遊戲功能。

程式結構:


下面分享原始碼(一個字母一個字母打的,如果有興趣可以安裝庫跑一下。python3)

主程式

import sys
import pygame                     #引入庫
from ship import ship             #引入ship類
from setting import setting       #引入設定
import game_function as gf        #引入遊戲的功能
def run_game():
    '''開始遊戲,遊戲的主函式'''
    pygame.init()#初始化背景
    game_setting=setting()  #類的使用
    screen=pygame.display.set_mode((
        game_setting.screen_width,
        game_setting.screen_height))#設定視窗格式
    new_ship=ship(game_setting,screen)
    pygame.display.set_caption('小遊戲')
    while True:                         #開啟重新整理迴圈,不斷重新整理介面元素
        gf.check_event(new_ship)
        new_ship.update()
        gf.update_screen(game_setting,screen,new_ship)
        pygame.display.flip()

run_game()

setting.py

class setting():
    '''儲存設定'''
    def __init__(self):
        self.screen_width=1200          #介面長度
        self.screen_height=800          #介面高度
        self.bg_color=(230,230,230)     #背景顏色RBG

        self.ship_speed_factor=1.5      #飛船速度

game_function.py

import sys
import pygame

def check_event(new_ship):
    '''響應按鍵'''
    for event in pygame.event.get():
        if event.type == pygame.QUIT:           #如果按鍵型別為退出則關閉
            sys.exit()
        elif event.type == pygame.KEYDOWN:      #設定狀態,防止長時間按壓無法達到效果
            if event.key == pygame.K_RIGHT:
                new_ship.moving_right = True
            elif event.key == pygame.K_LEFT:
                new_ship.moving_left = True
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                new_ship.moving_right = False
            elif event.key == pygame.K_LEFT:
                new_ship.moving_left = False

def update_screen(game_setting,screen,new_ship):
    '''更新影象'''
    screen.fill(game_setting.bg_color)
    new_ship.blitme()

ship.py

import pygame
class ship():
    def __init__(self,game_setting,screen):                 #類的繼承
        self.screen = screen
        self.image = pygame.image.load('photo\ship.bmp')   #飛船圖片
        self.rect = self.image.get_rect()                   #獲取圖片矩形的畫素資訊
        self.screen_rect = screen.get_rect()
        '''將飛船放在底部中央'''
        self.rect.centerx = self.screen_rect.centerx        #x座標資訊
        self.rect.bottom = self.screen_rect.bottom          #飛船對齊方式:下方底端
        self.game_setting = game_setting
        self.center = float(self.rect.centerx)
        self.moving_right = False                           #設定左右的狀態資訊(防止長時間按壓無顯示)
        self.moving_left = False
    def update(self):
        if self.moving_right and self.rect.right < self.screen_rect.right:
            '''如果矩形右面的座標小於顯示大小的座標,執行'''
            self.center += self.game_setting.ship_speed_factor
        elif self.moving_left and self.rect.left >= 0:
            self.center -= self.game_setting.ship_speed_factor
        self.rect.centerx = self.center
    def blitme(self):
        '''顯示飛船'''
        self.screen.blit(self.image,self.rect)

效果圖:



希望大家可以指點

時間有限,半成品。

做完成品後,希望大家可以測試。

再次感謝!