用Python寫個(gè)魂斗羅,另附30個(gè)Python小游戲源碼

今天分享一個(gè)經(jīng)典小游戲魂斗羅的 Python 版實(shí)現(xiàn)刽严。部分代碼實(shí)現(xiàn)如下:

 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#射擊時(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):#檢測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ù)跳躍開始的速度
   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
1651909889(1).jpg

image.png

操作說明:

A:向左

D:向右

W:跳起

S:趴下

J:射擊

P:退出程序

目前游戲還是比較初級的版本,有興趣的小伙伴可以自行修改完善蹂析。

image.png

小游戲源碼在下方留言后臺(tái)私信我回復(fù)py小游戲獲取~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舔示,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子电抚,更是在濱河造成了極大的恐慌惕稻,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝙叛,死亡現(xiàn)場離奇詭異俺祠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)借帘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進(jìn)店門蜘渣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肺然,你說我怎么就攤上這事宋梧。” “怎么了狰挡?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵捂龄,是天一觀的道長。 經(jīng)常有香客問我加叁,道長倦沧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任它匕,我火速辦了婚禮展融,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘豫柬。我一直安慰自己告希,他們只是感情好扑浸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著燕偶,像睡著了一般喝噪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上指么,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天酝惧,我揣著相機(jī)與錄音,去河邊找鬼伯诬。 笑死晚唇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盗似。 我是一名探鬼主播哩陕,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赫舒!你這毒婦竟也來了悍及?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤号阿,失蹤者是張志新(化名)和其女友劉穎并鸵,沒想到半個(gè)月后鸳粉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扔涧,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年届谈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枯夜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,629評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艰山,死狀恐怖湖雹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情曙搬,我是刑警寧澤摔吏,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站纵装,受9級特大地震影響征讲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜橡娄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一诗箍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挽唉,春花似錦滤祖、人聲如沸筷狼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埂材。三九已至,卻和暖如春俏让,著一層夾襖步出監(jiān)牢的瞬間楞遏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工首昔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寡喝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓勒奇,卻偏偏與公主長得像预鬓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子赊颠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內(nèi)容