欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+Pygame實(shí)現(xiàn)經(jīng)典魂斗羅游戲

 更新時(shí)間:2022年05月05日 15:01:10   作者:Python小二  
《魂斗羅》(Contra)是由Konami于1987年推出的一系列卷軸射擊類單機(jī)游戲。本文將利用Python中的Pygame庫(kù)實(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一篇文章讀懂Python賦值與拷貝

    一篇文章讀懂Python賦值與拷貝

    本文給大家分享一篇文章帶領(lǐng)大家讀懂python賦值與拷貝的知識(shí),感興趣的朋友一起看看吧
    2018-04-04
  • YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(五)字符分割與識(shí)別

    YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(五)字符分割與識(shí)別

    這篇文章主要介紹了YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(五)字符分割與識(shí)別,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識(shí)別,幫助你快速掌握YOLOv5車牌識(shí)別技能,需要的朋友可以參考下
    2023-04-04
  • Python中的__slots__示例詳解

    Python中的__slots__示例詳解

    在python新式類中,可以定義一個(gè)變量__slots__,它的作用是阻止在實(shí)例化類時(shí)為實(shí)例分配dict,下面這篇文章主要給大家介紹了關(guān)于Python中__slots__的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-07-07
  • python連接mysql并提交mysql事務(wù)示例

    python連接mysql并提交mysql事務(wù)示例

    這篇文章主要介紹了python連接mysql并提交mysql事務(wù)的示例,需要的朋友可以參考下
    2014-03-03
  • Python 實(shí)現(xiàn)遙感影像波段組合的示例代碼

    Python 實(shí)現(xiàn)遙感影像波段組合的示例代碼

    這篇文章主要介紹了Python 實(shí)現(xiàn)遙感影像波段組合的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python切片作為占位符使用實(shí)例講解

    python切片作為占位符使用實(shí)例講解

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python切片作為占位符使用實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • Python中類型檢查的詳細(xì)介紹

    Python中類型檢查的詳細(xì)介紹

    Python是一種非常動(dòng)態(tài)的語(yǔ)言,函數(shù)定義中完全沒(méi)有類型約束。下面這篇文章主要給大家詳細(xì)介紹了Python中類型檢查的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • Python中的None與 NULL(即空字符)的區(qū)別詳解

    Python中的None與 NULL(即空字符)的區(qū)別詳解

    這篇文章主要介紹了Python中的None與 NULL(即空字符)的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • django創(chuàng)建超級(jí)用戶過(guò)程解析

    django創(chuàng)建超級(jí)用戶過(guò)程解析

    這篇文章主要介紹了django創(chuàng)建超級(jí)用戶過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python 基礎(chǔ)之字符串string詳解及實(shí)例

    Python 基礎(chǔ)之字符串string詳解及實(shí)例

    這篇文章主要介紹了Python 字符串(string) 的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論