用Python写个魂斗罗,另附30个Python小游戏源码

今天分享一个经典小游戏魂斗罗的 Python 版实现。部分代码实现如下:

 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):#循环图片
  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):#循环图片
  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#跳跃旋转速率
    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的状态是否为趴下,向上,跳跃等
  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:#判断是否处于跳跃状态来决定是否旋转跳跃的图像
   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

小游戏源码在下方留言后台私信我回复py小游戏获取~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容