Python+Pygame實(shí)現(xiàn)經(jīng)典魂斗羅游戲
今天分享一個(gè)經(jīng)典小游戲魂斗羅的 Python 版實(shí)現(xiàn)。
一、效果展示
二、操作說(shuō)明
A:向左
D:向右
W:跳起
S:趴下
J:射擊
P:退出程序
目前游戲還是比較初級(jí)的版本,有興趣的小伙伴可以自行修改完善。
三、核心代碼
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#開(kāi)始人物的高度 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#射擊時(shí)跑步速率 if self.pos_n > 3.0:#射擊時(shí)跑步有3個(gè)動(dòng)作 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個(gè)動(dòng)作 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個(gè)動(dòng)作 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):#檢測(cè)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#恢復(fù)跳躍開(kāi)始的速度 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)來(lá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實(shí)現(xiàn)經(jīng)典魂斗羅游戲的文章就介紹到這了,更多相關(guān)Python Pygame魂斗羅內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python?pygame實(shí)現(xiàn)五子棋雙人聯(lián)機(jī)
- python?pygame實(shí)現(xiàn)打磚塊游戲
- Python+Pygame實(shí)現(xiàn)趣味足球游戲
- Python+Pygame實(shí)現(xiàn)神廟逃亡游戲
- Python?pygame新手入門基礎(chǔ)教程
- Python+Pygame實(shí)現(xiàn)之走四棋兒游戲的實(shí)現(xiàn)
- Python?pygame項(xiàng)目實(shí)戰(zhàn)監(jiān)聽(tīng)退出事件
- Python pygame 項(xiàng)目實(shí)戰(zhàn)事件監(jiān)聽(tīng)
相關(guān)文章
YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(五)字符分割與識(shí)別
這篇文章主要介紹了YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(五)字符分割與識(shí)別,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識(shí)別,幫助你快速掌握YOLOv5車牌識(shí)別技能,需要的朋友可以參考下2023-04-04Python 實(shí)現(xiàn)遙感影像波段組合的示例代碼
這篇文章主要介紹了Python 實(shí)現(xiàn)遙感影像波段組合的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Python中的None與 NULL(即空字符)的區(qū)別詳解
這篇文章主要介紹了Python中的None與 NULL(即空字符)的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09django創(chuàng)建超級(jí)用戶過(guò)程解析
這篇文章主要介紹了django創(chuàng)建超級(jí)用戶過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Python 基礎(chǔ)之字符串string詳解及實(shí)例
這篇文章主要介紹了Python 字符串(string) 的相關(guān)資料,需要的朋友可以參考下2017-04-04