前言
作者 :“程序员梨子”正文 《坦克大战》是当年火遍大江南北的FC游戏,小霸王时代的装机必备。现在看来是觉得画面有点
**文章简介 **:本篇文章主要利用pygame模块写的一款坦克大战小游戏啦!
**文章源码获取 **: 为了感谢每一个关注我的小可爱每篇文章的项目源码都是无偿分
享滴
点这里蓝色这行字体自取,需要什么源码记得说标题名字哈!私信我也可!
欢迎小伙伴们 点赞、收藏?、留言
文章图片
简陋,但在以前绝对是属于玩不腻的游戏之一。今天小编有时间就带大家一起来康康吧~
开始准备的图片素材很多分类处理:以下是部分截图。
文章图片
?
文章图片
文章图片
??
(2)不同的音乐背景:当熟悉的背景音乐响起,扑面而来的是整个童年啊!
?
文章图片
文章图片
??
(3)游戏规则:
游戏有单人和双人两种模式,己方大本营被破或者己方坦克被歼灭则游戏失败,成功通过所有关卡
则游戏胜利。另外,玩家可以通过射击特定的坦克使地图上随机出现一个道具,若己方坦克捡到该
道具,则触发一个事件,例如坦克能力的增强。
?
文章图片
文章图片
??
玩家操作方式如下:
玩家一:
wsad键:上下左右;
空格键:射击。
玩家二:
↑↓←→键:上下左右;
小键盘0键:射击。
# 玩家一, WSAD移动, 空格键射击
if tank_player1.num_lifes >= 0:
if key_pressed[pygame.K_w]:
player_tanks_group.remove(tank_player1)
tank_player1.move('up', self.scene_elems, player_tanks_group, enemy_tanks_group, home)
player_tanks_group.add(tank_player1)
elif key_pressed[pygame.K_s]:
player_tanks_group.remove(tank_player1)
tank_player1.move('down', self.scene_elems, player_tanks_group, enemy_tanks_group, home)
player_tanks_group.add(tank_player1)
elif key_pressed[pygame.K_a]:
player_tanks_group.remove(tank_player1)
tank_player1.move('left', self.scene_elems, player_tanks_group, enemy_tanks_group, home)
player_tanks_group.add(tank_player1)
elif key_pressed[pygame.K_d]:
player_tanks_group.remove(tank_player1)
tank_player1.move('right', self.scene_elems, player_tanks_group, enemy_tanks_group, home)
player_tanks_group.add(tank_player1)
elif key_pressed[pygame.K_SPACE]:
bullet = tank_player1.shoot()
if bullet:
self.sounds['fire'].play() if tank_player1.tanklevel < 2 else self.sounds['Gunfire'].play()
player_bullets_group.add(bullet)
# 玩家二, ↑↓←→移动, 小键盘0键射击
if self.is_dual_mode and (tank_player2.num_lifes >= 0):
if key_pressed[pygame.K_UP]:
player_tanks_group.remove(tank_player2)
tank_player2.move('up', self.scene_elems, player_tanks_group, enemy_tanks_group, home)
player_tanks_group.add(tank_player2)
elif key_pressed[pygame.K_DOWN]:
player_tanks_group.remove(tank_player2)
tank_player2.move('down', self.scene_elems, player_tanks_group, enemy_tanks_group, home)
player_tanks_group.add(tank_player2)
elif key_pressed[pygame.K_LEFT]:
player_tanks_group.remove(tank_player2)
tank_player2.move('left', self.scene_elems, player_tanks_group, enemy_tanks_group, home)
player_tanks_group.add(tank_player2)
elif key_pressed[pygame.K_RIGHT]:
player_tanks_group.remove(tank_player2)
tank_player2.move('right', self.scene_elems, player_tanks_group, enemy_tanks_group, home)
player_tanks_group.add(tank_player2)
elif key_pressed[pygame.K_KP0]:
bullet = tank_player2.shoot()
if bullet:
player_bullets_group.add(bullet)
self.sounds['fire'].play() if tank_player2.tanklevel < 2 else self.sounds['Gunfire'].play()
加载游戏素材中:
????????
文章图片
文章图片
??
文章图片
附:
?
# 加载游戏素材
sounds = {}
for key, value in cfg.AUDIO_PATHS.items():
sounds[key] = pygame.mixer.Sound(value)
sounds[key].set_volume(1)?
(4)在坦克移动中、打到对方等肯定有碰撞:
# 碰撞检测
# --子弹和砖墙
pygame.sprite.groupcollide(player_bullets_group, self.scene_elems.get('brick_group'), True, True)
pygame.sprite.groupcollide(enemy_bullets_group, self.scene_elems.get('brick_group'), True, True)
# --子弹和铁墙
for bullet in player_bullets_group:
if pygame.sprite.spritecollide(bullet, self.scene_elems.get('iron_group'), bullet.is_stronger, None):
player_bullets_group.remove(bullet)
pygame.sprite.groupcollide(enemy_bullets_group, self.scene_elems.get('iron_group'), True, False)
# --子弹撞子弹
pygame.sprite.groupcollide(player_bullets_group, enemy_bullets_group, True, True)
# --我方子弹撞敌方坦克
for tank in enemy_tanks_group:
if pygame.sprite.spritecollide(tank, player_bullets_group, True, None):
if tank.food:
foods_group.add(tank.food)
tank.food = None
if tank.decreaseTankLevel():
self.sounds['bang'].play()
self.total_enemy_num -= 1
# --敌方子弹撞我方坦克
for tank in player_tanks_group:
if pygame.sprite.spritecollide(tank, enemy_bullets_group, True, None):
if tank.is_protected:
self.sounds['blast'].play()
else:
if tank.decreaseTankLevel():
self.sounds['bang'].play()
if tank.num_lifes < 0:
player_tanks_group.remove(tank)
# --我方子弹撞我方大本营
if pygame.sprite.spritecollide(home, player_bullets_group, True, None):
is_win = False
is_running = False
home.setDead()
# --敌方子弹撞我方大本营
if pygame.sprite.spritecollide(home, enemy_bullets_group, True, None):
is_win = False
is_running = False
home.setDead()
文章图片
(5)坦克游戏中会随机生成食物:
# --坦克吃到食物
for player_tank in player_tanks_group:
for food in foods_group:
if pygame.sprite.collide_rect(player_tank, food):
if food.name == 'boom':
self.sounds['add'].play()
for _ in enemy_tanks_group:
self.sounds['bang'].play()
self.total_enemy_num -= len(enemy_tanks_group)
enemy_tanks_group = pygame.sprite.Group()
elif food.name == 'clock':
self.sounds['add'].play()
for enemy_tank in enemy_tanks_group:
enemy_tank.setStill()
elif food.name == 'gun':
self.sounds['add'].play()
player_tank.improveTankLevel()
elif food.name == 'iron':
self.sounds['add'].play()
self.__pretectHome()
elif food.name == 'protect':
self.sounds['add'].play()
player_tank.setProtected()
elif food.name == 'star':
self.sounds['add'].play()
player_tank.improveTankLevel()
player_tank.improveTankLevel()
elif food.name == 'tank':
self.sounds['add'].play()
player_tank.addLife()
foods_group.remove(food)
文章图片
游戏效果:
????????
文章图片
文章图片
??总结 这游戏的话经典哈,还是你门记忆中的坦克吗?
说实话代码真挺多的,你感觉这款坦克大战有还原多少呀??
注小编获取更多精彩内容!记得点击传送门哈
记得三连哦! 如需打包好的源码+素材免费分享滴!!传送门
文章图片
【Python|【Pygame小游戏】《坦克大战》,那些童年的游戏你还记得几个呢()】
推荐阅读
- Python|【AI出牌器】第一次见这么“刺激”的斗地主,胜率高的关键因素竟是......
- python|机器视觉中彩色成像必须考虑的十个问题
- python|Python dataframe 多条件筛选/过滤数据的方法及函数isin,query,contains,loc的使用介绍
- python|【python】笔势识别 - (含缩小规格,坐标点转换为矩阵,点图连成线图,图片输出处理)
- Datawhale吃瓜教程|第27期 Datawhale 组队学习 吃瓜教程——西瓜书+南瓜书第三章 / 周志华《机器学习》
- 笔记|RL强化学习笔记(OpenAI gym建立自己的探索环境)
- Python|python opencv透视变换矫正文档
- #|图像去噪论文综述(更新中...)
- 算法|PyTorch 之 Checkpoint 机制解析