Python+Pygame實現(xiàn)經(jīng)典魂斗羅游戲
今天分享一個經(jīng)典小游戲魂斗羅的 Python 版實現(xiàn)。
一、效果展示

二、操作說明
A:向左
D:向右
W:跳起
S:趴下
J:射擊
P:退出程序
目前游戲還是比較初級的版本,有興趣的小伙伴可以自行修改完善。
三、核心代碼
class Game_Player():
def __init__(self,game_settings,screen):
self.screen = screen
self.game_settings = game_settings
self.image = pygame.image.load('images/PR/player.png')
self.rect = self.image.get_rect()
self.screen_rect = self.screen.get_rect()
self.screen_center_pos = self.screen_rect.centerx
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = 380
self.center = float(self.rect.centerx)
self.moving_right = False
self.moving_left = False
self.player_moving = False
self.pos_i = 0.0#跑步畫面改變速度
self.pos_j = 0.0#跳躍的改變初始速度
self.pos_n = 0.0#射擊
self.pos_d = 0.0
self.player_direction = 1#1為右,-1為左
self.player_down = False
self.player_up = False
self.player_jump = False
self.player_start_Y = 380#開始人物的高度
self.player_Y = self.player_start_Y
self.player_shooting = False
def update(self):
if self.game_settings.player_is_alive:
if self.moving_right and self.rect.right < self.screen_rect.right:
if self.game_settings.boss_appear:
self.center += self.game_settings.player_speed
elif self.center > self.screen_center_pos:
self.center += 0
else:
self.center += self.game_settings.player_speed
if self.moving_left and self.rect.left > 0:
self.center -= self.game_settings.player_speed
self.rect.centerx = self.center
self.update_image_moving()
else:
self.update_die()
def update_die(self):
self.names = locals()
self.players = []
for self.i in range(1,3):
self.names['player_image%s' %self.i] = pygame.image.load('images/PR/death%s.png' %self.i)
self.players.append(self.names['player_image%s' %self.i])
self.image = self.players[int(self.pos_d)]
self.pos_d += 0.1
if self.pos_d > 2.0:
self.pos_d = 0.0
self.game_settings.player_die_end = True
def update_image_moving_direction(self,direction):#循環(huán)圖片
if self.player_shooting == True:
self.names = locals()
self.players = []
for self.i in range(1,4):
self.names['player_image%s' %self.i] = pygame.image.load('images/'+direction+'/shooting%s.png' %self.i)
self.players.append(self.names['player_image%s' %self.i])
self.image = self.players[int(self.pos_n)]
self.pos_n += 0.1#射擊時跑步速率
if self.pos_n > 3.0:#射擊時跑步有3個動作
self.pos_n = 0.0
else:
self.names = locals()
self.players = []
for self.i in range(1,6):
self.names['player_image%s' %self.i] = pygame.image.load('images/'+direction+'/player%s.png' %self.i)
self.players.append(self.names['player_image%s' %self.i])
self.image = self.players[int(self.pos_i)]
self.pos_i += 0.1#跑步速率
if self.pos_i > 5.0:#跑步有5個動作
self.pos_i = 0.0
def update_image_jump(self,direction):#循環(huán)圖片
if self.game_settings.player_is_alive:
if self.player_jump == True:
self.names1 = locals()
self.players1 = []
for self.j in range(1,5):
self.names1['player_image%s' %self.j] = pygame.image.load('images/'+direction+'/jump%s.png' %self.j)
self.players1.append(self.names1['player_image%s' %self.j])
self.image = self.players1[int(self.pos_j)]
self.pos_j += 0.3#跳躍旋轉(zhuǎn)速率
if self.pos_j > 4.0:#跳躍有4個動作
self.pos_j = 0.0
else:
self.update_die()
def update_image_moving(self):
if self.player_moving:
if self.moving_right:
self.update_image_moving_direction('PR')#PR是向右的圖片
elif self.moving_left:
self.update_image_moving_direction('PL')
def get_player_state(self,player_state):#檢測player的狀態(tài)是否為趴下,向上,跳躍等
if self.player_direction == 1:
self.image = pygame.image.load('images/PR/'+player_state+'.png')
if self.player_direction == -1:
self.image = pygame.image.load('images/PL/'+player_state+'.png')
self.rect = self.image.get_rect()
self.rect.centerx = self.center
def get_player_down(self):
self.get_player_state('down')
self.rect.bottom = self.player_start_Y
self.screen.blit(self.image,self.rect)
def get_player_up(self):
self.get_player_state('up')
self.rect.bottom = self.player_start_Y
self.screen.blit(self.image,self.rect)
def get_player_jump(self):
self.get_player_state('jump1')
self.rect.bottom = self.player_Y
if self.game_settings.jump_vel < 0:
self.game_settings.jump_vel += 0.6#跳躍上升的增加的速率
elif self.game_settings.jump_vel > 0:
self.game_settings.jump_vel += 0.8#跳躍下降增加的速率
self.player_Y += self.game_settings.jump_vel
if self.player_Y > self.player_start_Y:
self.player_jump = False
self.player_Y = self.player_start_Y
self.game_settings.jump_vel = -14.0#恢復跳躍開始的速度
if self.player_direction == 1:
self.image = pygame.image.load('images/PR/player.png')
self.reset_player()
if self.player_direction == -1:
self.image = pygame.image.load('images/PL/player.png')
self.reset_player()
if self.player_jump == True:#判斷是否處于跳躍狀態(tài)來決定是否旋轉(zhuǎn)跳躍的圖像
if self.player_direction == 1:
self.update_image_jump('PR')
if self.player_direction == -1:
self.update_image_jump('PL')
self.screen.blit(self.image,self.rect)
def reset_player(self):
self.rect = self.image.get_rect()
self.rect.centerx = self.center
self.rect.bottom = self.player_start_Y
self.screen.blit(self.image,self.rect)
def blitme(self):
if self.player_jump:
self.get_player_jump()
elif self.player_down:
self.get_player_down()
elif self.player_up:
self.get_player_up()
else:
self.reset_player()
def revive_player(self):
self.center = self.screen_rect.centerx
self.game_settings.player_is_alive = True
到此這篇關(guān)于Python+Pygame實現(xiàn)經(jīng)典魂斗羅游戲的文章就介紹到這了,更多相關(guān)Python Pygame魂斗羅內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python調(diào)取任意數(shù)字資產(chǎn)錢包余額功能
那資產(chǎn)放在錢包的時候,如何來監(jiān)控余額呢?任何數(shù)字資產(chǎn)都可以使用區(qū)塊瀏覽器來查詢余額,那我們只要從此著手,用Python調(diào)取區(qū)塊瀏覽器,來查詢余額就能實現(xiàn)所有資產(chǎn)的余額監(jiān)控,感興趣的朋友跟隨小編一起看看吧2019-08-08
關(guān)于sklearn中模塊包導入報錯的通用解決方法
這篇文章主要介紹了關(guān)于sklearn中模塊包導入報錯的通用解決方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
PyInstaller打包selenium-wire過程中常見問題和解決指南
常用的打包工具 PyInstaller 能將 Python 項目打包成單個可執(zhí)行文件,但也會因為兼容性問題和路徑管理而出現(xiàn)各種運行錯誤,本指南總結(jié)了打包過程中常見問題和解決方案,大家可以根據(jù)需要進行選擇2025-04-04
Python實現(xiàn)模擬分割大文件及多線程處理的方法
這篇文章主要介紹了Python實現(xiàn)模擬分割大文件及多線程處理的方法,涉及Python文件讀取、分割及多線程相關(guān)操作技巧,需要的朋友可以參考下2017-10-10

