拾起童年的回忆

最记得小学时,每逢放学便会打开电视机,接上红白机/小霸王,插上一张游戏卡带,魂斗罗、超级玛丽、冒险岛、足球小将,拳王、飞机大战、雪人兄弟……,这些游戏到现在还是如数家珍,一张游戏卡可以在朋友间互相传着玩在游戏里所向披靡的小陈(好啦我承认这句话有点水分),不管多依依不舍,到“那一刻”总会迅速地把游戏机收拾好,关上电视并用湿毛巾擦擦降温,然后营造出认真学习的情景

今日主题


为什么给大家介绍这个故事呢,因为今天给大家介绍的内容就与飞机有关。今天带大家一起DIY一个简易小游戏-飞机大战。先给大家看一波最终效果图

怎么样?是不是感觉还不错,别着急,接下来带你一起DIY这个小游戏,让你也能开发属于自己的小游戏啦。

详情介绍

别看我们自己开发的这个游戏虽然简单,但是麻雀虽小,五脏俱全哦。飞机大战游戏一共用到了六个类。飞机大战主游戏类、游戏精灵类、背景类、敌机类、英雄类、子弹类,这几个类的设计也比较简单,接下来给大家详细介绍一下这几个类

飞机大战主游戏类

负责游戏的初始化游戏循环

class PlaneGame(object):"""飞机大战主游戏"""def __init__(self):# 创建游戏的窗口self.screen = pygame.display.set_mode(SCREEN_RECT.size)pygame.display.set_caption('飞机大战 By Python欢乐时光')icon = pygame.image.load("./images/icon.jpg")pygame.display.set_icon(icon)# 创建游戏的时钟self.clock = pygame.time.Clock()# 精灵和精灵组的创建self.__create_sprites()# 设置定时器事件pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)pygame.time.set_timer(HERO_FIRE_EVENT, 500)def __create_sprites(self):bg1 = Background()bg2 = Background(True)self.back_group = pygame.sprite.Group(bg1,bg2)self.enemy_group = pygame.sprite.Group()self.hero = Hero()self.hero_group = pygame.sprite.Group(self.hero)def start_game(self):while True:# 设置刷新帧率self.clock.tick(FRAME_PER_SEC)# 事件监听self.__event_handler()# 碰撞检测self.__check_collide()# 更新/绘制精灵组self.__update_sprites()# 更新显示pygame.display.update()def __event_handler(self):# 事件监听for event in pygame.event.get():# 判断用户是否点击了关闭按钮if event.type == pygame.QUIT:PlaneGame.__game_over()elif event.type == CREATE_ENEMY_EVENT:enemy = Enemy()self.enemy_group.add(enemy)elif event.type == HERO_FIRE_EVENT:self.hero.fire()key_pressed = pygame.key.get_pressed()if key_pressed[pygame.K_RIGHT]:self.hero.speed = 3elif key_pressed[pygame.K_LEFT]:self.hero.speed = -3else:self.hero.speed = 0def __check_collide(self):# 子弹摧毁敌机pygame.sprite.groupcollide(self.hero.bullets,self.enemy_group, True, True)# 敌机摧毁英雄enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)if len(enemies) > 0:self.hero.kill()PlaneGame.__game_over()def __update_sprites(self):self.back_group.update()self.back_group.draw(self.screen)self.enemy_group.update()self.enemy_group.draw(self.screen)self.hero_group.update()self.hero_group.draw(self.screen)self.hero.bullets.update()self.hero.bullets.draw(self.screen)@staticmethoddef __game_over():pygame.quit()exit()

游戏精灵类

class GameSprite(pygame.sprite.Sprite):"""飞机大战游戏精灵"""def __init__(self,image_name,speed=1):# 调用父类的初始化方法super().__init__()# 定义对象的属性self.image = pygame.image.load(image_name)self.rect = self.image.get_rect()self.speed = speeddef update(self):# 在屏幕的垂直方向上移动self.rect.y += self.speed

背景类

class Background(GameSprite):"""游戏背景精灵"""def __init__(self,is_alt=False):# 调用父类方法实现精灵的创建(image/rect/speed)super().__init__(bg_path)# 判断是否是交替图像,如果是,需要设置初始位置if is_alt:self.rect.y = -self.rect.heightdef update(self):# 调用父类的方法实现super().update()# 判断是否移出屏幕,如果移出屏幕,将图像设置到屏幕的上方if self.rect.y >= SCREEN_RECT.height:self.rect.y = -self.rect.height

敌机类

class Enemy(GameSprite):"""敌机精灵"""def __init__(self):# 调用父类方法,创建敌机精灵,同时指定敌机图片super().__init__(enemy_path)# 指定敌机的初始随机速度 3 - 5self.speed = random.randint(3, 5)# 指定敌机的初始随机位置self.rect.bottom = 0max_x = SCREEN_RECT.width - self.rect.widthself.rect.x = random.randint(0, max_x)def update(self):# 调用父类方法,保持垂直方向的飞行super().update()# 判断是否飞出屏幕,如果是,需要从精灵组删除敌机if self.rect.y >= SCREEN_RECT.height:self.kill()

英雄和子弹类

class Hero(GameSprite):"""英雄精灵"""def __init__(self):# 调用父类方法, 设置 image 和 speedsuper().__init__(hero_path, 0)# 设置英雄的初始位置self.rect.center = SCREEN_RECT.centerself.rect.bottom = SCREEN_RECT.bottom - 120# 创建子弹的精灵组self.bullets = pygame.sprite.Group()def update(self):# 英雄在水平方向移动self.rect.x += self.speed# 控制英雄不能离开屏幕if self.rect.x < 0:self.rect.x = 0if self.rect.right > SCREEN_RECT.right:self.rect.right = SCREEN_RECT.rightdef fire(self):for i in range(3):# 创建子弹精灵bullet = Bullet()# 设置精灵的位置bullet.rect.bottom = self.rect.y - i * 20bullet.rect.centerx = self.rect.centerx# 将精灵添加到精灵组self.bullets.add(bullet)class Bullet(GameSprite):"""子弹精灵"""def __init__(self):super().__init__(bullet_path, -2)def update(self):super().update()# 判断子弹是否飞出屏幕if self.rect.bottom < 0:self.kill()

效果图 & TIPS

本篇所有代码已上传百度网盘,感兴趣的可以下载下来直接双击运行玩一下,当然也可以下载下来代码后,在代码中尝试简单修改相关参数或者images文件下的图片,组成一个自己新的界面下的飞机大战游戏,还是蛮不错的哦

结尾

如果觉得这篇文章还不错的话,欢迎点击文章右下角的“在看”, 期待您关注我的公众号 Python欢乐时光 ,转发给你身边有需要的朋友们。另外,本篇文章中涉及的代码及可执行exe程序我都打包上传至百度网盘,公众号下方回复 飞机大战 获取下载地址。谢谢大家!

拾起童年的回忆 - 手把手教你制作飞机大战小游戏相关推荐

  1. pixi 小游戏_手把手教你制作一款小游戏【超好玩!】

    想必大家小时候都听说过或玩过4399小游戏(这句话好像暴露了年龄),在当时电脑不算很普及,且没有那么多网游.大型单机游戏的时代,数量众多且种类丰富的网页小游戏使我们的童年增添了非常多的乐趣.诸如黄金矿 ...

  2. 手把手教你使用Pygame制作飞机大战小游戏,4万字超详细讲解!

    点击上方"早起Python",关注并"星标" 每日接收原创Python干货! 大家好,偷学Python系列是由小甜同学从初学者的角度学习Python的笔记,其特 ...

  3. python入门小游戏之跳一跳_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...

    这对于很多人来说,可能是已经过时的游戏,但是对于python入门来说,却是一个非常值得学习的项目. TONOW收集了很多有关python入门的项目案例,包含了相应的教程和源码,哪怕你从未接触编程,也通 ...

  4. python 玩公众号游戏_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...

    这对于很多人来说,可能是已经过时的游戏,但是对于python入门来说,却是一个非常值得学习的项目. 我们收集了很多有关python入门的项目案例,包含了相应的教程和源码,哪怕你从未接触编程,也通过这些 ...

  5. 手把手教你制作自己的小程序

    (小程序开发全套视频教程源码打包放到最后) 做一个自己的小程序共有四个步骤: 1.注册微信小程序. 2.制作小程序. 3.上传并提交审核. 4.审核通过,小程序上线. 简单来讲即四步操作法: 注册-- ...

  6. 零基础手把手教你制作一个微信小程序云开发-实验室仪器管理系统(二)

    书接上文,我们了解到了怎么在微信开发者工具上新建一个空的云开发项目. 别急,你以为你能大展身手开始写代码了? 答案是否定的,首先你要先开始对小程序进行模块拆分 郦波老师有一句话说得很好:解决问题的最好 ...

  7. C++ · 手把手教你写一个扫雷小游戏

    Hello,大家好,我是余同学.这两个月真是太忙了,无暇给大家更新文章- 暑假不是写了个扫雷小游戏吗(Link)?考虑到很多同学对代码没有透彻的理解,那么,这篇文章,我们来详细分析一下代码. 我们分为 ...

  8. 手把手教你编写C++控制台小游戏 : 2048

    原创不易,请勿抄袭 作者联系方式 : QQ:993678929 文章目录 0.游戏界面展示 1. 编写思路 2. 界面绘制 3.数字的生成与合并 4.键盘控制 / 游戏主循环 5.游戏结束判定 #.完 ...

  9. 哥们哥们,人机大战晓得吧玩家对战晓得吧,简易三子棋,呕心沥血500行代码手把手带你制作第一个小游戏,可以保存收藏以后接着看哟,最后有源码哦

    目录 前言 一.游戏想要有意思,函数不可少,整活的函数 二.三子棋的游戏界面 三.三子棋的功能步骤分析      1.菜单     2.三子棋实现的总体框架     3.棋盘创建     4.棋盘初始 ...

最新文章

  1. 中国肠道大会 | 3天日程,220+报告,肠道新知一次听够!
  2. linux进程假死的原因_一次Spring Boot假死诊断
  3. R语言第九讲 验证集法
  4. 全国计算机二级ms office知识点,2017全国计算机二级MSOffice复习知识点
  5. 程序员是如何处理密码的?
  6. Codeforces Beta Round #1:B. Spreadsheets
  7. jumpserver的安装
  8. 第一财经周刊:MySpace入乡 终于随俗
  9. python自动下载小说
  10. Python Computer Vision Programming学习笔记(二)——基本的图像操作与处理
  11. 初学JAVA项目(11、Ada银行-3)
  12. Java虚拟机--判断可触及性(七)
  13. android 拨打电话 实例,Android实战教程第三篇之简单实现拨打电话功能
  14. 阿里巴巴大数据平台“达芬奇密码”进化论
  15. QML遮罩效果Demo
  16. 重载是什么?只有返回值类型不同算不算重载?为什么?
  17. go_viper解析
  18. 微信小程序使用MQTT远程控制单片机——阿里云物联网平台
  19. 红米4高配版_标注:2016060_官方线刷包_救砖包_解账户锁
  20. signature=501807407682dd47ffe7345fc7b18d2e,Signature-Free Intrusion Detection

热门文章

  1. 聚焦2018爱思唯尔-环球科学卓越科研论坛
  2. 偏导数,方向导数,梯度,多元复合函数求导
  3. iloc和loc的区别
  4. 24部电影的人生哲理
  5. 基于区块链技术的供应链金融平台
  6. 团队第一次作业(软工C#造梦厂)
  7. 程序员2019可以看的书单
  8. 模拟单片计算机软件,用单片机来模拟ps2电脑键盘的程序
  9. axios 超级小白使用模板
  10. C语言:关键字---struct(声明结构体类型)