小学生python游戏编程2----飞机大战1

    • 前言
  • 主要设计
    • 1、界面设计
    • 2、动态背景
    • 3、记分的实现
    • 4、射击游戏功能的实现
    • 5、声音的实现
  • 应用知识点
    • 1、python知识点
      • 1.1 角色创建,也即对象的创建
      • 1.2、函数的定义与引用
    • 2、pygamezero知识点
      • 2.1 Actor标红提示,库的导入问题
      • 2.2 游戏标题,大小写不一样
      • 2.3 背景角色的关健点
      • 2.4 声音控制使用注意点
    • 3、英语单词掌握
  • 代码实现
    • a、主游戏界面,玩家显示
    • b、 通过背景图的移动,形成飞机一直在飞的效果
    • C、 子弹生成
    • D、敌机实现
    • E、 得分
    • F、玩家与敌机碰撞,结束画面
    • 完整代码
  • 总结
    • *通过此次的《飞机大战》游戏的初步实现,可以对pgzrun的相关知识有了进一步的了解,对pyzero这门语言也有了比以前更深刻的认识。 pyzero的一些基本语法,比如角色、声音、背景,界面控制等,理解更加透彻。如果大家喜欢,关注点先赞较多,后期还会针对此体材进一步增加敌机带着英语单词,或数学口算题,制一个英语单词飞机大战。有兴趣的可关注讨论哟。感䜒您为了孩子看到现在,谢谢。*
  • 源码获取

前言

 飞机大战想必是很多人童年时期的经典游戏,我们依旧能记得抱个老人机娱乐的场景,这篇文章主要给大家介绍了关于如何利用python,pgzrun写一个简单的飞机大战小游戏的相关一步步实现的资料,以后想把英语 单词的学习能加进来,先实现不带单词的功能,需要的朋友可以参考下

主要设计

1、界面设计

游戏主界面以窗口形式给出,设置窗口大小为400x600, 利背景更换(两张背景替换显示),添加玩家飞机及敌机。通过检测子弹或玩家与敌机相碰进行得减分。

2、动态背景

利用背景图片的上下滚动,制造飞机在天空中飞行的效果

3、记分的实现

游戏过程中,每打掉一个敌机,增加一分,玩家碰到敌机后游戏结束,以后可以改成返回,或分数达到多少后至一下关。

4、射击游戏功能的实现

按下左健,发射子弹,子弹发射后通过修改子弹图片的位置,实现子弹飞行的效果,位置改变大小可以调整子弹飞行的速度

5、声音的实现

发射时的声音,玩家碰到敌机的销毁图与声音,子弹打到敌机的爆炸声

应用知识点

1、python知识点

1.1 角色创建,也即对象的创建

背景,敌机,子弹,玩家等角色的创建,引入图片,定位位置
background1 = Actor(‘bg1’) # 导入背景图片
background1.x = 480/2 # 背景1的x坐标
background1.y = 800/2 # 背景1的y坐标

1.2、函数的定义与引用

def on_mouse_move(pos, rel, buttons): # 当鼠标移动时执行
hero.x = pos[0] # 玩家飞机的x坐标设为鼠标的x坐标
hero.y = pos[1] # 玩家飞机的y坐标设为鼠标的y坐标

def on_mouse_down(): # 当鼠标键按下时
bullet.x = hero.x # 把子弹位置设为玩家飞机的正上方
bullet.y = hero.y - 20
sounds.射击07.play()

2、pygamezero知识点

2.1 Actor标红提示,库的导入问题

通过加入以下语句可解决 from pgzero.actor import Actor
声音加载标红可加:from pgzero.loaders import sounds

2.2 游戏标题,大小写不一样

TITLE=“飞机大战”,title要大写,类似点:WIDTH = 480 # 设置窗口的宽度,HEIGHT = 600 # 设置窗口的高度

2.3 背景角色的关健点

取同张背景图片,设置两个角色,初始定位设置不同

background1 = Actor('bg1')  # 导入背景图片
background1.x = 480/2  # 背景1的x坐标
background1.y = 800/2  # 背景1的y坐标
background2 = Actor('bg1')  # 导入背景图片
background2.x = 480/2   # 背景2的x坐标
background2.y = -800/2

在更新中,动态调整背景照片的Y值,实现背景动态显示的效果、此方法也用于子弹的显示问题。

def update():  # 更新模块,每帧重复操作global isLooseif not isLoose:# 以下代码用于实现背景图片的循环滚动效果if background1.y > 800/2 + 800:background1.y = -800/2  # 背景1移动到背景2的正上方if background2.y > 800/2 + 800:background2.y = -800/2  # 背景2移动到背景1的正上方background1.y += 1  # 背景1向下滚动background2.y += 1  # 背景2向下滚动

2.4 声音控制使用注意点

sounds.射击07.play()

3、英语单词掌握

TITLE 标题 title
WIDTH 宽度 width
HEIGHT 高度 height
screen 屏幕
sounds 声音
actor 角色
background 背景
hero 英雄,在此指玩家飞机
bullet 子弹
enemy 敌人

代码实现

a、主游戏界面,玩家显示

import pgzrun  # 导入游戏库
from pgzero.actor import ActorTITLE="飞机大战"
WIDTH = 480    # 设置窗口的宽度
HEIGHT = 600   # 设置窗口的高度background = Actor('bg1')  # 导入背景图片
hero = Actor('hero')  # 导入玩家飞机图片
hero.x = WIDTH/2      # 设置玩家飞机的x坐标
hero.y = HEIGHT*2/3   # 设置玩家飞机的y坐标def draw():background.draw()  # 绘制游戏背景hero.draw()  # 绘制玩家飞机def on_mouse_move(pos, rel, buttons):  # 当鼠标移动时执行hero.x = pos[0]  # 玩家飞机的x坐标设为鼠标的x坐标hero.y = pos[1]  # 玩家飞机的y坐标设为鼠标的y坐标pgzrun.go()  # 开始执行游戏

b、 通过背景图的移动,形成飞机一直在飞的效果

import pgzrun  # 导入游戏库
from pgzero.actor import ActorWIDTH = 480    # 设置窗口的宽度
HEIGHT = 600   # 设置窗口的高度
TITLE="飞机大战"background1 = Actor('bg1')  # 导入背景图片
background1.x = 480/2  # 背景1的x坐标
background1.y = 800/2  # 背景1的y坐标
background2 = Actor('bg1')  # 导入背景图片
background2.x = 480/2   # 背景2的x坐标
background2.y = -800/2
hero = Actor('hero')  # 导入玩家飞机图片
hero.x = WIDTH/2      # 设置玩家飞机的x坐标
hero.y = HEIGHT*2/3   # 设置玩家飞机的y坐标def draw():  # 绘制模块,每帧重复执行background1.draw()  # 绘制游戏背景background2.draw()  # 绘制游戏背景hero.draw()  # 绘制玩家飞机def update():  # 更新模块,每帧重复操作# 以下代码用于实现背景图片的循环滚动效果if background1.y > 800/2 + 800:background1.y = -800/2  # 背景1移动到背景2的正上方if background2.y > 800/2 + 800:background2.y = -800/2  # 背景2移动到背景1的正上方background1.y += 1  # 背景1向下滚动background2.y += 1  # 背景2向下滚动def on_mouse_move(pos, rel, buttons):  # 当鼠标移动时执行hero.x = pos[0]  # 玩家飞机的x坐标设为鼠标的x坐标hero.y = pos[1]  # 玩家飞机的y坐标设为鼠标的y坐标pgzrun.go()  # 开始执行游戏

C、 子弹生成

bullet = Actor(‘bomb0’) # 导入子弹图片
bullet.x = WIDTH/2 # 子弹的x坐标
bullet.y = -HEIGHT # 子弹的y坐标,开始不可见
当鼠标键按下时,把子弹位置设为玩家飞机的正上方
def on_mouse_down(): # 当鼠标键按下时
bullet.x = hero.x # 把子弹位置设为玩家飞机的正上方
bullet.y = hero.y - 30
更新中增加
if bullet.y > -HEIGHT:
bullet.y = bullet.y - 8 # 子弹自动向上移动

D、敌机实现

敌机
enemy = Actor(‘enemy’) # 导入敌机图片
enemy.x = WIDTH/2 # 设置敌机的x坐标
enemy.y = 0 # 设置敌机的y坐标
敌机自动下落
enemy.y += 3
if enemy.y > HEIGHT: # 敌机落到画面底部
enemy.y = 0 # 敌机从上面重新出现
enemy.x = random.randint(30, WIDTH-30) # 敌机水平位置随机

E、 得分

global score
if bullet.colliderect(enemy): # 子弹与敌机发生碰撞后enemy.y = 0 # 敌机从上面重新出现enemy.x = random.randint(0, WIDTH)  # 敌机水平位置随机score = score + 1 # 得分加1bullet.y = -HEIGHT  # 隐藏子弹

F、玩家与敌机碰撞,结束画面

  global isLoose
if hero.colliderect(enemy): # 玩家飞机和敌机发生碰撞isLoose = True  # 游戏失败hero.image = 'blowup' # 更换游戏玩家的图片为爆炸图片     # 不加此句,只显爆炸图
if isLoose: # 游戏失败后输出信息screen.draw.text("游戏失败!", (50, HEIGHT/2), fontsize=90,fontname='simhei', color='red')

完整代码

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
import random
from pgzero.screen import Screen
screen: Screen  # 类型标注
from pgzero.loaders import sounds, imagesTITLE="飞机大战"
WIDTH = 480    # 设置窗口的宽度
HEIGHT = 600   # 设置窗口的高度background1 = Actor('bg1')  # 导入背景图片
background1.x = 480/2  # 背景1的x坐标
background1.y = 800/2  # 背景1的y坐标
background2 = Actor('bg1')  # 导入背景图片
background2.x = 480/2   # 背景2的x坐标
background2.y = -800/2
hero = Actor('hero')  # 导入玩家飞机图片
hero.x = WIDTH/2      # 设置玩家飞机的x坐标
hero.y = HEIGHT*2/3   # 设置玩家飞机的y坐标bullet = Actor('bomb0')  # 导入子弹图片
bullet.x = WIDTH/2        # 子弹的x坐标
bullet.y = -HEIGHT       # 子弹的y坐标,开始不可见enemy = Actor('enemy')  # 导入敌机图片
enemy.x = WIDTH/2       # 设置敌机的x坐标
enemy.y = 0             # 设置敌机的y坐标score = 0     # 游戏得分
isLoose = False # 游戏是否失败,初始不失败def draw():  # 绘制模块,每帧重复执行background1.draw()  # 绘制游戏背景background2.draw()  # 绘制游戏背景hero.draw()  # 绘制玩家飞机enemy.draw()  # 绘制敌机飞机bullet.draw()  # 绘制子弹# 下面显示得分screen.draw.text("得分: "+str(score), (10,20), fontsize=30,fontname='simhei', color='red')# 不加此句,玩家变成爆炸图一样可以发子弹哟if isLoose: # 游戏失败后输出信息screen.draw.text("游戏失败!", (50, HEIGHT/2), fontsize=90,fontname='simhei', color='red')def update():  # 更新模块,每帧重复操作global isLooseif not isLoose:# 以下代码用于实现背景图片的循环滚动效果if background1.y > 800/2 + 800:background1.y = -800/2  # 背景1移动到背景2的正上方if background2.y > 800/2 + 800:background2.y = -800/2  # 背景2移动到背景1的正上方background1.y += 1  # 背景1向下滚动background2.y += 1  # 背景2向下滚动if bullet.y > -HEIGHT:bullet.y = bullet.y - 10 # 子弹自动向上移动enemy.y += 3 # 敌机自动下落if enemy.y > HEIGHT: # 敌机落到画面底部enemy.y = 0 # 敌机从上面重新出现enemy.x = random.randint(30, WIDTH-30)  # 敌机水平位置随机global scoreif bullet.colliderect(enemy): # 子弹与敌机发生碰撞后sounds.explode.play()  # 播放玩家飞机爆炸音效enemy.y = 0 # 敌机从上面重新出现enemy.x = random.randint(0, WIDTH)  # 敌机水平位置随机score = score + 1 # 得分加1bullet.y = -HEIGHT  # 隐藏子弹if hero.colliderect(enemy): # 玩家飞机和敌机发生碰撞sounds.explode.play()  # 播放玩家飞机爆炸音效isLoose = True  # 游戏失败hero.image = 'blowup' # 更换游戏玩家的图片为爆炸图片def on_mouse_move(pos, rel, buttons):  # 当鼠标移动时执行hero.x = pos[0]  # 玩家飞机的x坐标设为鼠标的x坐标hero.y = pos[1]  # 玩家飞机的y坐标设为鼠标的y坐标def on_mouse_down(): # 当鼠标键按下时bullet.x = hero.x   # 把子弹位置设为玩家飞机的正上方bullet.y = hero.y - 20sounds.射击07.play()pgzrun.go()  # 开始执行游戏

总结

通过此次的《飞机大战》游戏的初步实现,可以对pgzrun的相关知识有了进一步的了解,对pyzero这门语言也有了比以前更深刻的认识。 pyzero的一些基本语法,比如角色、声音、背景,界面控制等,理解更加透彻。如果大家喜欢,关注点先赞较多,后期还会针对此体材进一步增加敌机带着英语单词,或数学口算题,制一个英语单词飞机大战。有兴趣的可关注讨论哟。感䜒您为了孩子看到现在,谢谢。

源码获取

关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主

今天是以此模板持续更新此育儿专栏的第2/50次。
可以关注我,点赞我、评论我、收藏我啦。

小学生python游戏编程2----飞机大战1相关推荐

  1. 小学生python游戏编程arcade----坦克大战2

    小学生python游戏编程arcade----坦克大战2 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.提示框制作 1.1养眼绿色 1.2 画距形提示框 1.3 效果图 1.4 ...

  2. 小学生python游戏编程arcade----坦克大战4

    小学生python游戏编程arcade----坦克大战4 前言 坦克大战4 1.1 每单元英语单词学完升级效果 1.2 单词调用及敌坦克随机问题 1.3 效果图 1.4 代码实现 源码获取 前言 接上 ...

  3. 小学生python游戏编程arcade----可旋转的坦克的发射子弹

    小学生python游戏编程arcade----可旋转的坦克的发射子弹 前言 小学生python游戏编程arcade----可旋转坦克的发射子弹 1.可旋转坦克的发射子弹 1.1 子弹的类 1.2 发射 ...

  4. 小学生python游戏编程arcade----动画图片实现爆炸效果

    小学生python游戏编程arcade----动画图片实现爆炸效果 前言 动画图片实现爆炸效果 1.爆炸类的的实现 1.1爆炸图片 1.2 类的定义 1.3 爆炸类的引用 1.4 爆炸类的更新 1.5 ...

  5. 小学生python游戏编程arcade----excel调用

    小学生python游戏编程arcade----excel调用 前言 小学生python游戏编程arcade----excel调用 1.excel文件 1.1 excel表头 1.2 excel文件 1 ...

  6. 小学生python游戏编程arcade----爆炸粒子类

    小学生python游戏编程arcade----爆炸粒子类 前言 1.1 参数设置 粒子加速下降的速度.如果不需要,则为0 粒子退出的速度 粒子移动的速度.范围为2.5<-->5,设置为2. ...

  7. 小学生python游戏编程arcade----基本知识1

    小学生python游戏编程arcade----基本知识 前言 基本知识 1.简单窗体 2.试着添加角色及背景 3.场景 4.角色控制及物理引擎 总结 源码获取 前言 前面章节分享试用了pyzero,p ...

  8. 小学生python游戏编程arcade----敌人自动面向角色并开火

    小学生python游戏编程arcade----敌人自动面向角色并开火 前言 敌人自动攻击角色的实现 1. 1.1 计算角度,使用敌人面向角色 1.2 自动生成各色子弹,不是通过调用图片 1.3 控制敌 ...

  9. 小学生python游戏编程arcade----灯光示例

    小学生python游戏编程arcade----灯光示例 前言 灯光阴影效果 1.灯光效果 1.1 玩家灯光效果 1.2 代码 2.灯光效果 2.1 软效果 2.2码实现 3.硬效果 3.1 灯光硬效果 ...

最新文章

  1. Jackson 序列化对象成 JSON 字符串,忽略部分字段(属性)
  2. CSS进阶(二十四)流向的改变
  3. 部署LAMP论坛平台(Linux,Apache,MySQL,PHP)
  4. python爬虫知识点总结(二十四)Scrapy爬去知乎用户信息
  5. git(2)---git 分布式版本控制系统
  6. php date 加30分钟,PHP date函数常用时间处理方法
  7. 有效电子邮件地址的最大长度是多少?
  8. theano 编程细节
  9. Google 今天抽风了!
  10. Conda 下 安装 Allennlp
  11. 英语拼音怎么在计算机上拼出来的,英语拼音怎么写
  12. Yolo系列 | Yolov4v5的模型结构与正负样本匹配
  13. MySQL的基础汇总(包含60道练习题)~~
  14. “狂徒”富豪严介和经典语摘
  15. Terraform的安装
  16. 服务器白屏是系统在更新吗,远程服务器白屏怎么处理
  17. C/C++---字符分布分割得到数字,适用于STM32/ESP32等等
  18. 阿里云centos上处理2t3ik与ddgs病毒
  19. PigGo配置Gitee仓库出现“Not Found Project“的错误解决方案
  20. web课程设计网页规划与设计:文化网站设计——中国水墨风书画艺术网站(12个页面)

热门文章

  1. PHP随机生成英文大小写
  2. 计算机开机慢怎么办,电脑开机速度慢怎么办?电脑开机慢五大处理方法介绍
  3. 微信小程序简单获取当前时间及日期
  4. 开关电源学习笔记7 --- DC-DC变换器的储能电感设计之磁芯及气隙
  5. NR PRACH(四)PRACH与SSB的映射
  6. 手机原来也能把照片制作成视频?1分钟包你学会,发朋友圈超有范
  7. 《数字图像处理》冈萨雷斯版 读书笔记(二)
  8. image caption笔记(八):《From Captions to Visual Concepts and Back》
  9. ROS安装与机器人环境配置总结
  10. OpenGl法向量计算