日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python坦克大战_Life is short,you need Python——Python实现坦克大战(一)

發布時間:2024/7/5 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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/

www.pygame.org?www.pygame.orgimport pygame_display = pygame.display COLOR_BLACK = pygame.Color(0,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.03") # 設置游戲的標題while True:#讓窗口持續刷新MainGame.window.fill(COLOR_BLACK)#給窗口完成一個填充顏色_display.update()#窗口的刷新def 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()

運行結果:

2.事件處理

  • 點擊關閉按鈕,退出程序
  • 方向控制,子彈發射
  • import pygame_display = pygame.display COLOR_BLACK = pygame.Color(0, 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.04") # 設置游戲的標題# 讓窗口持續刷新while True:MainGame.window.fill(COLOR_BLACK) # 給窗口完成一個填充顏色self.getEvent() # 在循環中持續完成事件的獲取_display.update() # 窗口的刷新def getEvent(self):"""獲取程序運行期間所有的鼠標和鍵盤事件"""eventList = pygame.event.get() # 獲取所有的事件for event in eventList: # 對事件進行判斷處理(1.點擊鼠標關閉按鈕 2.按下鍵盤上的某個按鍵)if event.type == pygame.QUIT: # 判斷event.type是否為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 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()

    運行結果:

    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.事件處理:

  • 改變坦克方向
  • 修改坦克的位置(left,top):取決于坦克的速度
  • 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.07") # 設置游戲的標題# 讓窗口持續刷新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("坦克向左調頭,移動")# 修改坦克方向MainGame.TANK_P1.direction = 'L'# 完成移動操作(調用坦克的移動方法)MainGame.TANK_P1.move()elif event.key == pygame.K_RIGHT:print("坦克向右調頭,移動")# 修改坦克方向MainGame.TANK_P1.direction = 'R'# 完成移動操作(調用坦克的移動方法)MainGame.TANK_P1.move()elif event.key == pygame.K_UP:print("坦克向上調頭,移動")# 修改坦克方向MainGame.TANK_P1.direction = 'U'# 完成移動操作(調用坦克的移動方法)MainGame.TANK_P1.move()elif event.key == pygame.K_DOWN:print("坦克向下調頭,移動")# 修改坦克方向MainGame.TANK_P1.direction = 'D'# 完成移動操作(調用坦克的移動方法)MainGame.TANK_P1.move()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 = topself.speed = 5def move(self):"""坦克的移動"""if self.direction == 'L':self.rect.left -= self.speedelif self.direction == 'R':self.rect.left += self.speedelif self.direction == 'U':self.rect.top -= self.speedelif self.direction == 'D':self.rect.top += self.speeddef 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()

    運行結果:

    可以朝各個方向移動了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实现坦克大战(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。