python坦克大战_Life is short,you need Python——Python实现坦克大战(一)
生活随笔
收集整理的這篇文章主要介紹了
python坦克大战_Life is short,you need Python——Python实现坦克大战(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先展示一下效果
搓搓小手手,坦克大戰即將開始……https://www.zhihu.com/video/1140743290784817152一、游戲引擎的安裝
安裝方式有兩種:1.pip安裝
windows + R --> cmd --> pip install pygame
2.pycharm安裝
File -->setting -->project -->prioect Interpreter -->右側 + install --> 搜索輸入pygame -->左下方installpackage
驗證pygame安裝是否成功
import pygame運行結果: pygame 1.9.6 Hello from the pygame community. https://www.pygame.org/contribute.html二.項目的需求(基于面向對象的分析):
有哪些類,不同的類具有的功能
1.主邏輯類
開始游戲
結束游戲
2.坦克類(1.我方坦克 2.敵方坦克)
移動
射擊
展示
3.子彈類
移動
展示
4.爆炸效果類
展示爆炸效果
5.墻壁類
屬性:坦克和子彈是否可以通過
6.音效類
播放背景音樂,射擊音效,爆炸音效
三.坦克大戰項目框架的搭建
涉及到的類,用代碼簡單的實現
import pygameclass MainGame:"""主游戲類"""def __init__(self):passdef startGame(self):"""開始游戲"""passdef endGame(self):"""結束游戲"""passclass Tank:"""坦克類"""def __init__(self):passdef move(self):"""坦克的移動"""passdef shot(self):"""坦克的射擊"""passdef displayTank(self):"""展示坦克"""passclass MyTank(Tank):"""我方坦克類"""def __init__(self):passclass EnemyTank(Tank):"""敵方坦克類"""def __init__(self):passclass Bullet:"""子彈類"""def __init__(self):passdef move(self):"""子彈的移動"""passdef displayBullet(self):"""展示子彈"""passclass Explode:"""爆炸效果類"""def __init__(self):passdef displayExplode(self):"""展示爆炸效果"""passclass Wall:"""墻壁類"""def __init__(self):passdef dispalyWall(self):"""展示墻壁"""passclass Music:"""音效類"""def __init__(self):passdef play(self):"""開始播放音樂"""pass四.項目開始:
1.創建游戲窗口
用到游戲引擎中的功能模塊:
查看官方開發文檔 http://www.pygame.org/docs/
運行結果:
2.事件處理
運行結果:
3.實現左上角文字提示內容
模塊:font
import pygame_display = pygame.display COLOR_BLACK = pygame.Color(0, 0, 0) # 窗口顏色 COLOR_RED = pygame.Color(255, 0, 0) # 窗口左上角文字顏色class MainGame:"""主游戲類"""window = None # 游戲主窗口SCREEN_HEIGHT = 500 # 窗口的高度SCREEN_WIDTH = 800 # 窗口的寬度def __init__(self):passdef startGame(self):"""開始游戲"""_display.init() # 初始化窗口# 創建窗口并加載窗口(借鑒官方文檔)MainGame.window = _display.set_mode([MainGame.SCREEN_WIDTH, MainGame.SCREEN_HEIGHT])_display.set_caption("坦克大戰v1.05") # 設置游戲的標題# 讓窗口持續刷新while True:MainGame.window.fill(COLOR_BLACK) # 給窗口完成一個填充顏色# 將繪制文字的小畫布粘貼到窗口中MainGame.window.blit(self.getTextSurface("剩余敵方坦克{}輛".format(5)), (5, 5))self.getEvent() # 在循環中持續完成事件的獲取_display.update() # 窗口的刷新def getEvent(self):"""獲取程序運行期間所有的鼠標和鍵盤事件"""eventList = pygame.event.get() # 獲取所有的事件# 對事件進行判斷處理(1.點擊鼠標關閉按鈕 2.按下鍵盤上的某個按鍵)for event in eventList:# 判斷event.type是否為QUIT,如果是,直接調用程序結束方法if event.type == pygame.QUIT:self.endGame()# 判斷事件是否為鍵盤按鍵操作,如果是,繼續判斷按鍵是哪一個按鍵,并進行對應的處理if event.type == pygame.KEYDOWN:# 具體是哪個按鍵的處理if event.key == pygame.K_LEFT:print("坦克向左調頭,移動")elif event.key == pygame.K_RIGHT:print("坦克向右調頭,移動")elif event.key == pygame.K_UP:print("坦克向上調頭,移動")elif event.key == pygame.K_DOWN:print("坦克向下調頭,移動")elif event.key == pygame.K_SPACE:print("發射子彈")def getTextSurface(self, text):pygame.font.init() # 初始化字體模塊# fontList = pygame.font.get_fonts() # 查看系統支持的所有字體# print(fontList)font = pygame.font.SysFont('kaiti', 20) # 選一個合適的字體textSurface = font.render(text, True, COLOR_RED) # 使用對應的字符完成相關內容的繪制return textSurfacedef endGame(self):"""結束游戲"""print("謝謝使用")exit() # 結束python解釋器class Tank:"""坦克類"""def __init__(self):passdef move(self):"""坦克的移動"""passdef shot(self):"""坦克的射擊"""passdef displayTank(self):"""展示坦克"""passclass MyTank(Tank):"""我方坦克類"""def __init__(self):passclass EnemyTank(Tank):"""敵方坦克類"""def __init__(self):passclass Bullet:"""子彈類"""def __init__(self):passdef move(self):"""子彈的移動"""passdef displayBullet(self):"""展示子彈"""passclass Explode:"""爆炸效果類"""def __init__(self):passdef displayExplode(self):"""展示爆炸效果"""passclass Wall:"""墻壁類"""def __init__(self):passdef dispalyWall(self):"""展示墻壁"""passclass Music:"""音效類"""def __init__(self):passdef play(self):"""開始播放音樂"""passMainGame().startGame()運行結果:
4.加載我方坦克
素材:
import pygame_display = pygame.display COLOR_BLACK = pygame.Color(0, 0, 0) # 窗口顏色 COLOR_RED = pygame.Color(255, 0, 0) # 窗口左上角文字顏色class MainGame:"""主游戲類"""window = None # 游戲主窗口SCREEN_WIDTH = 800 # 窗口的寬度SCREEN_HEIGHT = 500 # 窗口的高度TANK_P1 = None # 我方坦克def __init__(self):passdef startGame(self):"""開始游戲"""_display.init() # 初始化窗口# 創建窗口并加載窗口(借鑒官方文檔)MainGame.window = _display.set_mode([MainGame.SCREEN_WIDTH, MainGame.SCREEN_HEIGHT])MainGame.TANK_P1 = Tank(MainGame.SCREEN_WIDTH // 2, MainGame.SCREEN_HEIGHT - 70) # 創建我方坦克_display.set_caption("坦克大戰v1.06") # 設置游戲的標題# 讓窗口持續刷新while True:MainGame.window.fill(COLOR_BLACK) # 給窗口完成一個填充顏色# 將繪制文字的小畫布粘貼到窗口中MainGame.window.blit(self.getTextSurface("剩余敵方坦克{}輛".format(5)), (5, 5))# 將我方坦克加入到窗口中MainGame.TANK_P1.displayTank()self.getEvent() # 在循環中持續完成事件的獲取_display.update() # 窗口的刷新def getEvent(self):"""獲取程序運行期間所有的鼠標和鍵盤事件"""eventList = pygame.event.get() # 獲取所有的事件# 對事件進行判斷處理(1.點擊鼠標關閉按鈕 2.按下鍵盤上的某個按鍵)for event in eventList:# 判斷event.type是否為QUIT,如果是,直接調用程序結束方法if event.type == pygame.QUIT:self.endGame()# 判斷事件是否為鍵盤按鍵操作,如果是,繼續判斷按鍵是哪一個按鍵,并進行對應的處理if event.type == pygame.KEYDOWN:# 具體是哪個按鍵的處理if event.key == pygame.K_LEFT:print("坦克向左調頭,移動")elif event.key == pygame.K_RIGHT:print("坦克向右調頭,移動")elif event.key == pygame.K_UP:print("坦克向上調頭,移動")elif event.key == pygame.K_DOWN:print("坦克向下調頭,移動")elif event.key == pygame.K_SPACE:print("發射子彈")def getTextSurface(self, text):pygame.font.init() # 初始化字體模塊# fontList = pygame.font.get_fonts() # 查看系統支持的所有字體# print(fontList)font = pygame.font.SysFont('kaiti', 20) # 選一個合適的字體textSurface = font.render(text, True, COLOR_RED) # 使用對應的字符完成相關內容的繪制return textSurfacedef endGame(self):"""結束游戲"""print("謝謝使用")exit() # 結束python解釋器class Tank:"""坦克類"""def __init__(self, left, top):self.images = {'D': pygame.image.load('img/tank_1_D.jpg'),'U': pygame.image.load('img/tank_1_U.jpg'),'L': pygame.image.load('img/tank_1_L.jpg'),'R': pygame.image.load('img/tank_1_R.jpg'),} # 四個方向,四個圖片self.direction = 'U' # 初始方向為上self.image = self.images[self.direction] # 根據方向選擇對應的圖片# 坦克所在的區域 Rect-->self.rect = self.image.get_rect()# 指定坦克初始化位置分別距x,y軸的位置self.rect.left = leftself.rect.top = topdef move(self):"""坦克的移動"""passdef shot(self):"""坦克的射擊"""passdef displayTank(self):"""展示坦克(將坦克繪制到窗口中,使用blit())"""# 重新設置坦克的圖片self.image = self.images[self.direction]# 將坦克加載到窗口中MainGame.window.blit(self.image, self.rect)class MyTank(Tank):"""我方坦克類"""def __init__(self):passclass EnemyTank(Tank):"""敵方坦克類"""def __init__(self):passclass Bullet:"""子彈類"""def __init__(self):passdef move(self):"""子彈的移動"""passdef displayBullet(self):"""展示子彈"""passclass Explode:"""爆炸效果類"""def __init__(self):passdef displayExplode(self):"""展示爆炸效果"""passclass Wall:"""墻壁類"""def __init__(self):passdef dispalyWall(self):"""展示墻壁"""passclass Music:"""音效類"""def __init__(self):passdef play(self):"""開始播放音樂"""passMainGame().startGame()運行結果:
5.坦克類新增speed屬性,用來控制坦克移動快慢
6.事件處理:
運行結果:
可以朝各個方向移動了https://www.zhihu.com/video/1141070523843960832字數上限,新開一篇……
Life is short,you need Python——Python實現坦克大戰(二)
皮卡丘比特:Life is short,you need Python——Python實現坦克大戰(二)?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的python坦克大战_Life is short,you need Python——Python实现坦克大战(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Struts2_2_解决配置文件冗余_动
- 下一篇: python子进程修改父进程内变量_如何