python3製作遊戲的一次嘗試。
阿新 • • 發佈:2019-01-05
最近在學習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)
效果圖:
希望大家可以指點
時間有限,半成品。
做完成品後,希望大家可以測試。
再次感謝!