用Python开发一个迷你打飞机的游戏

这篇具有很好参考价值的文章主要介绍了用Python开发一个迷你打飞机的游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python是一门非常简单的语言,快速入门之后可以做很多事情!比如爬虫啊,数据分析啊,自动化运维啊,机器学习,量化分析等等!但是入门到进阶的过程有时会非常痛苦,如果有一些好玩有趣的例子就好了。

比如通过游戏来学编程是一个非常好的途径,今天在Github上发现一个非常好玩的打飞机游戏,大概就200多行,非常不错!

用Python开发一个迷你打飞机的游戏,Python,python,游戏,pygame

关注公众号Python专栏回复“飞机大战”获取源代码

1、打飞机的游戏

打飞机的游戏估计很多人都玩过,雷霆战机相信很多80后的小伙伴都玩过!

Python是一门非常简单的语言,快速入门之后可以做很多事情!比如爬虫啊,数据分析啊,自动化运维啊,机器学习,量化分析等等!

但是入门到进阶的过程有时会非常痛苦,如果有一些好玩有趣的例子就好了。比如通过游戏来学编程是一个非常好的途径,今天在Github上发现一个非常好玩的打飞机游戏,大概就200多行,非常不错!

2、代码量200多行

看起来打飞机的游戏应该蛮复杂的吧,结果我看了作者的源代码之后,发现才200多行!

而且结构非常清晰完整,最重要的人家不仅代码写的漂亮,注释非常完整,让别人看的一目了然,好的代码习惯真的很重要,德艺双馨啊!

1.代码的结构

用Python开发一个迷你打飞机的游戏,Python,python,游戏,pygame

2.游戏的角色文件

gameRole 整个游戏分三个角色,下面我一一来解释一下,思路其实非常清晰的。

1)一个是子弹

用Python开发一个迷你打飞机的游戏,Python,python,游戏,pygame

初始化子弹的图片,然后得到它在画布上的坐标,并控制它的移动速度

2)敌机

会随机出一堆敌人的飞机,直管往前冲,从屏幕的上方往下方蜂拥而至,不需要考虑其他的行为!

用Python开发一个迷你打飞机的游戏,Python,python,游戏,pygame

敌机有几个重要的属性,比如它的飞行图片和击落的图片,然后获取的屏幕上的坐标。敌机的行为就一个飞,而且是只会往前飞。

3)我方战机

 

# 玩家类
class Player(pygame.sprite.Sprite):
   def __init__(self, plane_img, player_rect, init_pos):
       pygame.sprite.Sprite.__init__(self)
       self.image = []                                 # 用来存储玩家对象精灵图片的列表
       for i in range(len(player_rect)):
           self.image.append(plane_img.subsurface(player_rect[i]).convert_alpha())
       self.rect = player_rect[0]                      # 初始化图片所在的矩形
       self.rect.topleft = init_pos                    # 初始化矩形的左上角坐标
       self.speed = 8                                  # 初始化玩家速度,这里是一个确定的值
       self.bullets = pygame.sprite.Group()            # 玩家飞机所发射的子弹的集合
       self.img_index = 0                              # 玩家精灵图片索引
       self.is_hit = False                             # 玩家是否被击中

   def shoot(self, bullet_img):
       bullet = Bullet(bullet_img, self.rect.midtop)
       self.bullets.add(bullet)

   def moveUp(self):
       if self.rect.top <= 0:
           self.rect.top = 0
       else:
           self.rect.top -= self.speed

   def moveDown(self):
       if self.rect.top >= SCREEN_HEIGHT - self.rect.height:
           self.rect.top = SCREEN_HEIGHT - self.rect.height
       else:
           self.rect.top += self.speed

   def moveLeft(self):
       if self.rect.left <= 0:
           self.rect.left = 0
       else:
           self.rect.left -= self.speed

   def moveRight(self):
       if self.rect.left >= SCREEN_WIDTH - self.rect.width:
           self.rect.left = SCREEN_WIDTH - self.rect.width
       else:
           self.rect.left += self.speed

我方的战机稍微复杂一点,因为是男主角嘛!它有这么几个主要的属性,飞行的图片,被击落的图片,屏幕坐标,它的子弹等等!然后我们需要控制它的飞机方向,向上,向下,左边和右边,发射子弹。

3.主游戏部分文件mainGame 

1)先是初始化游戏的界面大小,字体等等,读取声音和图片和基本配置:

# 初始化游戏
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('飞机大战')

# 载入游戏音乐
bullet_sound = pygame.mixer.Sound('resources/sound/bullet.wav')
enemy1_down_sound = pygame.mixer.Sound('resources/sound/enemy1_down.wav')
game_over_sound = pygame.mixer.Sound('resources/sound/game_over.wav')
bullet_sound.set_volume(0.3)
enemy1_down_sound.set_volume(0.3)
game_over_sound.set_volume(0.3)
pygame.mixer.music.load('resources/sound/game_music.wav')
pygame.mixer.music.play(-1, 0.0)
pygame.mixer.music.set_volume(0.25)

# 载入背景图
background = pygame.image.load('resources/image/background.png').convert()
game_over = pygame.image.load('resources/image/gameover.png')

filename = 'resources/image/shoot.png'
plane_img = pygame.image.load(filename)
       

2)游戏的逻辑部分

其实用一个大的while 循环来写整个游戏的逻辑部分

 

while running:
   # 控制游戏最大帧率为60
   clock.tick(60)

   # 控制发射子弹频率,并发射子弹
   if not player.is_hit:
       if shoot_frequency % 15 == 0:
           bullet_sound.play()
           player.shoot(bullet_img)
       shoot_frequency += 1
       if shoot_frequency >= 15:
           shoot_frequency = 0

   # 生成敌机
   if enemy_frequency % 50 == 0:
       enemy1_pos = [random.randint(0, SCREEN_WIDTH - enemy1_rect.width), 0]
       enemy1 = Enemy(enemy1_img, enemy1_down_imgs, enemy1_pos)
       enemies1.add(enemy1)
   enemy_frequency += 1
   if enemy_frequency >= 100:
       enemy_frequency = 0

   # 移动子弹,若超出窗口范围则删除
   for bullet in player.bullets:
       bullet.move()
       if bullet.rect.bottom < 0:
           player.bullets.remove(bullet)

   # 移动敌机,若超出窗口范围则删除
   for enemy in enemies1:
       enemy.move()
       # 判断玩家是否被击中
       if pygame.sprite.collide_circle(enemy, player):
           enemies_down.add(enemy)
           enemies1.remove(enemy)
           player.is_hit = True
           game_over_sound.play()
           break
       if enemy.rect.top > SCREEN_HEIGHT:
           enemies1.remove(enemy)

   # 将被击中的敌机对象添加到击毁敌机Group中,用来渲染击毁动画
   enemies1_down = pygame.sprite.groupcollide(enemies1, player.bullets, 1, 1)
   for enemy_down in enemies1_down:
       enemies_down.add(enemy_down)

   # 绘制背景
   screen.fill(0)
   screen.blit(background, (0, 0))

   # 绘制玩家飞机
   if not player.is_hit:
       screen.blit(player.image[player.img_index], player.rect)
       # 更换图片索引使飞机有动画效果
       player.img_index = shoot_frequency // 8
   else:
       player.img_index = player_down_index // 8
       screen.blit(player.image[player.img_index], player.rect)
       player_down_index += 1
       if player_down_index > 47:
           running = False

   # 绘制击毁动画
   for enemy_down in enemies_down:
       if enemy_down.down_index == 0:
           enemy1_down_sound.play()
       if enemy_down.down_index > 7:
           enemies_down.remove(enemy_down)
           score += 1000
           continue
       screen.blit(enemy_down.down_imgs[enemy_down.down_index // 2], enemy_down.rect)
       enemy_down.down_index += 1

   # 绘制子弹和敌机
   player.bullets.draw(screen)
   enemies1.draw(screen)

上面这一堆代码其实就是干下面几个事情:

  • 先绘制出背景幕布

  • 再绘制出玩家的战机,敌机

  • 绑定战机和敌机的鼠标和键盘响应事件

  • 发射子弹,通过坐标来判断子弹和敌机的碰撞,以及敌机和玩家战机的碰撞

  • 最后还要计算得分

整个源码量很小,非常简洁!大家可以试着读一读源码,然后运行一下,可以做一些修改,这样的有趣的小游戏代码,难度适中!对菜鸟快速了解Python的类,模块的使用非常有帮助然后自己可以增加一些功能!

更多精彩教程欢迎B站搜索“千锋教育”

千锋教育Python全套视频教程,轻松掌握Excel、Word、PPT、邮件、爬虫、office办公自动化(宋如宁主讲)文章来源地址https://www.toymoban.com/news/detail-752335.html

到了这里,关于用Python开发一个迷你打飞机的游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实验,用pygame做飞机大战游戏设计

    摘 要:根据课程要求,以及面向对象程序设计的编程思想,在Windows操作系统环境下,运用PyCharm编译程序,以Python语言为开发语言,最终实现飞机大战游戏相应的游戏操作功能。Python是一种跨平台的、开源的、免费的、解释型的高级编程语言。它具有丰富的、强大的库, 能够

    2024年02月07日
    浏览(41)
  • pygame飞机大战小游戏(python大作业)

      python大作业,在查看了老师给的链接发现教学视频不完整,所以借用了同学的《Python编程 从入门到实践》中的一个项目,学习模仿。 二、游戏具体介绍 这是一款由辉辉亲自打造的太空对战小游戏。 游戏背景:在广袤无垠的太空里有一群蓝精灵(不是)有一群邪恶的坏人,

    2024年02月11日
    浏览(56)
  • 【python】 pygame学习示例 --飞机大战小游戏制作

    python版本:3.8.5 所需模块:pygame random os pygame版本:20.1 开发环境:pycharm专业版 硬件环境:win11 8G内存以上 使用python的第三方库–pygame 制作飞机大战小游戏 小游戏的内容包括: 玩家player的移动 子弹的发射 陨石的随机掉落(包括旋转 大小 下落角度) 玩家 子弹 陨石的碰撞交互

    2024年02月04日
    浏览(51)
  • Python开发小游戏:写一个飞机大战只需要500行代码!

    ‘’’ :param background_image_path: 背景图片的路径地址 :param size: 游戏窗口的大小 :param title: 游戏窗口的标题 :param font_name: 指定字体 :param font_size: 指定字体大小 :param speed: 背景图滚动整个窗口一次所用时间,单位为ms ‘’’ self.size = size self.screen = pygame.display.set_mode(size) self.tit

    2024年04月11日
    浏览(46)
  • Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)

    版权声明:原创不易,本文禁止抄袭、转载,侵权必究! 开发环境 :Windows10 Python3.6.4 第三方库 :Pygame1.9.6 IDE :PyCharm/Sublime Text 素材模块 游戏图片素材: BGM及音效素材: 字体素材: 源码模块 子弹模块 普通子弹部分源码: 超级子弹部分源码: 敌机子弹部分源码: 敌机模

    2024年02月11日
    浏览(59)
  • 很合适新手入门使用的Python游戏开发包pygame实例教程-01[开发环境配置与第一个界面]

    我们假定你已经安装好了我们开发python程序的sublime text,如果不知道怎么安装的可以参照我前面的博文。这里只需要解决的是配置好Pygame的问题。本篇博文主要解决开发环境配置以及第一个游戏界面的显示问题。 文章原出处: https://blog.csdn.net/haigear/article/details/130173836 没有

    2024年01月25日
    浏览(94)
  • python小游戏开发(飞机大战)

    目录 一:背景       1. pygame 模块初识 二.项目设计内容 开发一款飞机大战游戏,要求: (1)实现飞机的移动、子弹发射,对本次游戏有一个初步的编写及认识。 (2)飞机的持续按键移动和飞机自爆优化。 (3)进行基类的抽取,使代码更具有层次性和简化重复代码。 (

    2024年02月16日
    浏览(46)
  • Pygame —— 一个好玩的游戏 Python 库

    在电子游戏的世界里,每一个精彩跳跃、每一个刺激冲刺、每一次动听的背景音乐,都是通过精心设计的代码和资源组合出来的奇幻体验。 想象一下,如果你能够制作自己的电子游戏,将内心的奇思妙想实现在屏幕上,那会是多么令人兴奋和自豪的事情。这个梦想,并不遥远

    2024年02月20日
    浏览(57)
  • python游戏开发项目之飞机大战(2)

    1.先获取所有事件 注:用来获取当前发生的所有事件,并将其存储在event_list列表中。 2.实现正常退出游戏 注:if event.type == pygame.QUIT这行代码是一个条件判断语句,用来检查当前遍历到的事件类型是否是pygame.QUIT,表示尝试关闭游戏窗口,加上这个模块后我们运行出的界面就

    2024年04月26日
    浏览(33)
  • Python 游戏开发与 Pygame

    第一章. Python 简介 Python 简介和历史 Python 特点和优势 安装 Python 第二章. 变量和数据类型 变量和标识符 基本数据类型:数字、字符串、布尔值等 字符串操作 列表、元组和字典 第三章. 控制语句和函数 分支结构:if/else 语句 循环结构:for 和 while 循环 函数 参数传递与返回值

    2024年04月17日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包