作者 | Python小二

来源 | Python小二

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

class Game_Player():def __init__(self,game_settings,screen):self.screen = screenself.game_settings = game_settingsself.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.centerxself.rect.centerx = self.screen_rect.centerxself.rect.bottom = 380self.center = float(self.rect.centerx)self.moving_right = Falseself.moving_left = Falseself.player_moving = Falseself.pos_i = 0.0#跑步画面改变速度self.pos_j = 0.0#跳跃的改变初始速度self.pos_n = 0.0#射击self.pos_d = 0.0self.player_direction = 1#1为右,-1为左self.player_down = Falseself.player_up = Falseself.player_jump = Falseself.player_start_Y = 380#开始人物的高度self.player_Y = self.player_start_Yself.player_shooting = Falsedef 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_speedelif self.center > self.screen_center_pos:self.center += 0else:self.center += self.game_settings.player_speedif self.moving_left and self.rect.left > 0:self.center -= self.game_settings.player_speedself.rect.centerx = self.centerself.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.1if self.pos_d > 2.0:self.pos_d = 0.0self.game_settings.player_die_end = Truedef 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.0else: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.0def 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.0else: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.centerdef get_player_down(self):self.get_player_state('down')self.rect.bottom = self.player_start_Yself.screen.blit(self.image,self.rect)def get_player_up(self):self.get_player_state('up')self.rect.bottom = self.player_start_Yself.screen.blit(self.image,self.rect)def get_player_jump(self):self.get_player_state('jump1')self.rect.bottom = self.player_Yif 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_velif self.player_Y > self.player_start_Y:self.player_jump = Falseself.player_Y = self.player_start_Yself.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.centerself.rect.bottom = self.player_start_Yself.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.centerxself.game_settings.player_is_alive = True

实现效果点击下方视频查看:

操作说明:

  • A:向左

  • D:向右

  • W:跳起

  • S:趴下

  • J:射击

  • P:退出程序

目前游戏还是比较初级的版本,有兴趣的小伙伴可以自行修改完善。

往期回顾

上云避坑指南100篇|云淘金时代,安全为王!

用Python+Excel制作一个视频下载器~

Pandas实用技能,将列排序的几种方法

如何用一行Python代码制作一个GUI?

分享
点收藏
点点赞
点在看

用 Python 写个魂斗罗相关推荐

  1. 用python写一个魂斗罗

    嗨!多一嘴: 童年玩过的经典游戏中,魂斗罗当属经典啊,最近用python写出来,赶一波回忆杀哈哈哈哈哈哈哈~ tips: 600多行代码,耐心耐心耐心!( 偷看*-||| 1.代码实现 (1)子弹类( ...

  2. js实现魂斗罗版的棍子英雄小游戏ContraHero

    一直想用canvas写一个魂斗罗游戏,但是发现自己水平和学习能力差太多,收集好素材之后发现一个棍子英雄的小游戏挺火,就产生了写本文这个游戏的想法.直接上demo,建议在chrome下:点我. 简单说下 ...

  3. 学习 Python 之 Pygame 开发魂斗罗(二)

    学习 Python 之 Pygame 开发魂斗罗(二) 魂斗罗的需求 开始编写魂斗罗 1. 搭建主类框架 2. 设置游戏运行遍历和创建窗口 3. 获取窗口中的事件 4. 创建角色 5. 完成角色更新函 ...

  4. 学习 Python 之 Pygame 开发魂斗罗(九)

    学习 Python 之 Pygame 开发魂斗罗(九) 继续编写魂斗罗 1. 在子弹类中修改敌人发射子弹的位置 2. 创建显示敌人子弹的函数 3. 解决敌人不会向下掉落的问题 4. 给敌人碰撞体组增加 ...

  5. 学习 Python 之 Pygame 开发魂斗罗(四)

    学习 Python 之 Pygame 开发魂斗罗(四) 继续编写魂斗罗 1. 创建子弹类 2. 根据玩家方向和状态设置子弹发射的位置 (1). 站立向右发射子弹 (2). 站立向左发射子弹 (3). ...

  6. 学习 Python 之 Pygame 开发魂斗罗(八)

    学习 Python 之 Pygame 开发魂斗罗(八) 继续编写魂斗罗 1. 创建敌人类 2. 增加敌人移动和显示函数 3. 敌人开火 4. 修改主函数 5. 产生敌人 6. 使敌人移动 继续编写魂斗 ...

  7. 学习 Python 之 Pygame 开发魂斗罗(十四)

    学习 Python 之 Pygame 开发魂斗罗(十四) 继续编写魂斗罗 1. 创建桥类 2. 在主类中加入一些类变量 3. 显示桥 4. 解决玩家与桥的碰撞体问题 5. 解决敌人与桥的碰撞体问题 继 ...

  8. 学习 Python 之 Pygame 开发魂斗罗(十一)

    学习 Python 之 Pygame 开发魂斗罗(十一) 继续编写魂斗罗 1. 改写主类函数中的代码顺序 2. 修改玩家初始化 3. 显示玩家生命值 4. 设置玩家碰到敌人死亡 5. 设置敌人子弹击中 ...

  9. 学习 Python 之 Pygame 开发魂斗罗(一)

    学习 Python 之 Pygame 开发魂斗罗(一) Pygame 回忆Pygame 1. 使用pygame创建窗口 2. 设置窗口背景颜色 3. 获取窗口中的事件 4. 在窗口中展示图片 (1). ...

  10. 使用python开发“魂斗罗”游戏

    使用python开发"魂斗罗"游戏 开发完整的魂斗罗(Contra)游戏是一个庞大的任务,它涉及到图形渲染.物理碰撞.敌人AI.游戏关卡等多个方面.在这个简短的交互中,我将向你展示 ...

最新文章

  1. 2019.08.17【NOIP?提高组】模拟 A 组 总结
  2. Go 语言web 框架 Gin 练习 7
  3. RFC and session issue - why we should use DESTINATION NONE?
  4. ARC107——C - Shuffle Permutation
  5. EF框架step by step(4)—DBcontext应用于已存在数据库
  6. java web学什么软件_java web开发是什么?该怎么学习?
  7. EF with (LocalDb)V11.0
  8. IOS开发中遇到的问题
  9. CentOS安装vim
  10. c语言测试及答案,C语言测试题及答案解析
  11. html5 ogv格式转换,Free OGV Video Converter(OGV视频转换器)
  12. 算法实现- 数字转金额大写
  13. 日语学习的实用网址大全!
  14. 单片空间后方交会程序c语言,摄影测量实习报告-单片空间后方交会
  15. 拓扑家族的“新贵”——管理型网络拓扑
  16. 大众点评美食商家电话爬虫
  17. EDA之立创EDA专业版使用(原理图绘制)
  18. 关于8051汇编语言的keil中出现的A45: UNDEFINED SYMBOL (PASS-2)错误
  19. ListView案例集锦
  20. Domo商业云平台快速入门指南

热门文章

  1. 数据库系统的主要组成部分
  2. 前后分离必备神器,YApi小白部署攻略
  3. JavaScript 30 Day -- 07 彩虹画笔
  4. 云计算第四次作业—web网站的搭建
  5. 冬季下肢静脉曲张如何治疗
  6. 苹果手机电池保养再用两年!
  7. [转载]NFC问题分析
  8. AM中使用PML语言标注船体结构
  9. 免费PhotoShop—在线版 PhotoPea
  10. U8文件服务器备份,u8备份缓存文件在哪