import pygame
import random
from pgu import gui,timer
# 常量
WIDTH, HEIGHT = 800, 600
# 初始化操作
pygame.init()
pygame.mixer.init()
# 创建游戏窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))
# 设置游戏标题
pygame.display.set_caption('飞机拼音大作战--关注作者:blog.csdn.net/qq8864')
# 添加音乐
pygame.mixer.music.load('./sound/bgLoop.wav')
pygame.mixer.music.set_volume(0.5) # 音量
pygame.mixer.music.play(-1, 0)
# 添加系统时钟
FPS = 40
clock = pygame.time.Clock()
# 创建用户自定义事件,每隔2000毫秒触发一次事件,随机创建敌人
CREATE_ENEMY = pygame.USEREVENT
pygame.time.set_timer(CREATE_ENEMY, 2000)
# 加载字体文件
font_path = "./font/SIMYOU.ttf" # 替换为你的字体文件路径
font_size = 24
font = pygame.font.Font(font_path, font_size)
score = 0
score_txt = "得分:"+str(score) # 要显示的文本
text_surface = font.render(score_txt, True, (255, 255, 255))
fail_image = pygame.image.load("./image/failed.png")
show_image = False # 控制是否显示图片
tup_target = ('a','o','e','i','u','ü','b','p','m','f','d','t','n','l')
#退出对话框
class QuitDialog(gui.Dialog):
def __init__(this,main):
title = gui.Label("Dialog Box")
gui.Dialog.__init__(this, title, main)
def close():
pygame.quit()
exit()
app = gui.App() #初始化gui
con = gui.Container() #生成gui的容器
quitDlg = QuitDialog(con) #生成弹窗abc
btn = gui.Button("game over") #生成文字为a的按钮
btn.connect(gui.CLICK, quitDlg.close, None)#将按钮与弹窗的弹出绑定
label = gui.Label("Are you sure you want to quit?")
quitDlg.add(label, 2, 2)
quitDlg.add(btn,2,3) #将按钮安放在容器(0,0)位置
app.init(con)
# ========游戏开始页面静态效果==========
# class Hero(pygame.sprite.Sprite)
# class Bullet(pygame.sprite.Sprite)
# class Enemy(pygame.sprite.Sprite)
# class Explode(pygame.sprite.Sprite)
# class BackGround(pygame.sprite.Sprite)
# 主角
class Hero(pygame.sprite.Sprite):
def __init__(self, speed):
super().__init__()
self.image = pygame.image.load('./image/plane.png')
self.images = [pygame.image.load('./image/planeDie' + str(i) + '.png') for i in range(1, 4)]
self.image_index = 0
self.readt_to_change = 0
self.dired = 0 #默认三条命
self.rect = self.image.get_rect()
self.rect.width *= 0.5
self.rect.height *= 0.5
self.image = pygame.transform.scale(self.image, (self.rect.width, self.rect.height))
self.rect.x, self.rect.y = 0, 100
self.speed = speed
self.ready_to_fire = 0
def update(self, *args):
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
self.rect.y -= self.speed
if keys[pygame.K_DOWN]:
self.rect.y += self.speed
if keys[pygame.K_LEFT]:
self.rect.x -= self.speed
if keys[pygame.K_RIGHT]:
self.rect.x += self.speed
if keys[pygame.K_SPACE]:
if self.ready_to_fire == 0:
self.fire()
self.ready_to_fire += 1
if self.ready_to_fire > 5:
self.ready_to_fire = 0
else:
self.ready_to_fire = 0
if self.rect.x < 0:
self.rect.x = 0
if self.rect.y < 0:
self.rect.y = 0
if self.rect.y > HEIGHT - self.rect.height:
self.rect.y = HEIGHT - self.rect.height
if self.dired != 0:
if self.image_index <= 2:
self.readt_to_change += 1
if self.readt_to_change % 4 == 0:
self.image = self.images[self.image_index]
self.image_index += 1
else:
self.image_index = 0
self.kill()
def fire(self):
bullet = Bullet(10)
bullet.rect.x = self.rect.right
bullet.rect.centery = self.rect.centery
bullet_sprite.add(bullet)
# 音效
sound = pygame.mixer.Sound('./sound/laser.wav')
sound.play()
class Bullet(pygame.sprite.Sprite):
def __init__(self, speed):
super().__init__()
self.image = pygame.image.load('./image/bullet.png')
self.rect = self.image.get_rect()
self.speed = speed
def update(self, *args):
self.rect.x += self.speed
if self.rect.x > WIDTH:
self.kill()
class Enemy(pygame.sprite.Sprite):
count_ = 0
def __init__(self, speed):
super().__init__()
Enemy.count_ += 1
self.image = pygame.image.load('./image/'+'enemy'+str( Enemy.count_)+".png")
self.rect = self.image.get_rect()
self.rect.x = 800
self.rect.y = random.randint(0, HEIGHT)
self.speed = speed
self.id = Enemy.count_
self.name = 'enemy'+str( Enemy.count_)
print("self.id=",self.id)
print("Enemy.count=",Enemy.count_)
if Enemy.count_ >= 53:
Enemy.count_=0
def update(self, *args):
self.rect.x -= self.speed
if self.rect.right < 0:
self.kill()
class Explode(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.images = [pygame.image.load('./image/explode' + str(i) + '.png') for i in range(1, 4)]
self.image_index = 0
self.image = self.images[self.image_index]
self.rect = self.image.get_rect()
self.readt_to_change = 0
sound = pygame.mixer.Sound('./sound/enemyExplode.wav')
sound.play()
def update(self, *args):
if self.image_index < 2:
self.readt_to_change += 1
if self.readt_to_change % 4 == 0:
self.image_index += 1
self.image = self.images[self.image_index]
else:
self.kill()
class BackGround(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load('./image/background0.jpg')
self.rect = self.image.get_rect()
self.ready_to_move = 0
self.index = 0
def update(self, *args):
self.rect.x -= 3
if self.rect.right <= 0:
self.index+=1
self.image = pygame.image.load('./image/background'+str(self.index)+'.jpg')
self.rect = self.image.get_rect()
self.rect.x = self.rect.width
if self.index == 10:
self.index = 9
# 初始化精灵组
bg_sprite = pygame.sprite.Group()
hero_sprite = pygame.sprite.Group()
enemy_sprite = pygame.sprite.Group()
bullet_sprite = pygame.sprite.Group()
explode_sprite = pygame.sprite.Group()
# 定义人物
hero1 = Hero(4)
hero_sprite.add(hero1)
enemy1 = Enemy(5)
enemy2 = Enemy(7)
bg1 = BackGround()
bg2 = BackGround()
bg2.rect.x = bg2.rect.width
bg_sprite.add(bg1, bg2)
# 保持游戏运行状态(游戏循环)
while True:
# ===========游戏帧的刷新===========
clock.tick(FPS)
# 检测事件
for event in pygame.event.get():
# 检测关闭按钮被点击的事件
if event.type == pygame.QUIT:
# 退出
pygame.quit()
exit()
if event.type == CREATE_ENEMY:
enemy_sprite.add(Enemy(random.randint(1, 4)))
app.event(event) #将pygame的事件传递给pgu,很重要
# 碰撞检测,返回字典,得到二者信息
collision = pygame.sprite.groupcollide(enemy_sprite, bullet_sprite, True, True)
for enemy in collision.keys():
explode = Explode()
explode.rect = enemy.rect
explode_sprite.add(explode)
print("enemy.id:"+str(enemy.id))
score+=1
# 碰撞检测,返回字典,得到二者信息
collision1 = pygame.sprite.groupcollide(enemy_sprite, hero_sprite, True, False)
for enemy in collision1.keys():
hero1.dired += 1
quitDlg.open()
show_image = True
break
#explode = Explode()
#explode.rect = enemy.rect
#explode_sprite.add(explode)
#quitDlg.open()
# screen.fill((0,0,0))
for group in [bg_sprite, her
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
让学习变得有趣! pygame小游戏之飞机拼音大作战,做为送给娃的礼物,模拟真实的宇宙环境背景,画面相当震撼。即便是成年人看到后也会觉得像是坐了一次星际旅行! 二娃再过一年就该上一年级了,但现阶段的拼音咋都学不进去。买了拼音挂图贴在墙上,拉都拉不到旁边。突发奇想,何不用python的pygame做个小游戏?在玩中也能学习,让学变得有趣,同时科普知识,认识八大行星。 游戏的背景以宇宙和航空为主题,为孩子们提供了一个奇妙的探索空间。他们可以扮演一位宇航员,驾驶飞机在太空中飞行,同时学习拼音字母。后续计划在游戏中,让孩子们需要根据屏幕上出现的字母或汉字,用正确的拼音字母来击败敌人或通过障碍物。通过这种互动的方式,他们将在玩乐中学习,增长见识,并培养对宇宙未来的探索和想象力,增加对未来的好奇心,探索欲和求知欲。 详细介绍参见个人博客链接:https://blog.csdn.net/yyz_1987/article/details/132742982 让孩子们在享受游戏的乐趣的同时,提高他们的拼音字母识别能力和记忆能力!
资源推荐
资源详情
资源评论
收起资源包目录
pygame小游戏之飞机拼音大作战源码(送给娃的礼物,模拟真实宇宙场景) (132个子文件)
a50f4bfbfbedab64034fc2bfd67db8c379310a55b033.jfif 37KB
82c1347a4a3c4d0087c60bca39f4ab9e.jpeg 278KB
v2-c61b778d018f12dbc41577792abf1644_r.jpg 1.76MB
5ab8-iwtqvyk5395574.jpg 1.27MB
background44.jpg 717KB
background10.jpg 700KB
background6.jpg 448KB
112711177.jpg 328KB
background33.jpg 263KB
background1.jpg 203KB
background33 (3).jpg 193KB
background.jpg 165KB
background31 (2).jpg 165KB
5c0f-iknhexi4392462.jpg 127KB
background11.jpg 125KB
b90e7bec54e736d1869e6ed89a504fc2d4626955.jpg 122KB
f4eed08ce3d5a1f14dab5f1bbc6db73fe8c25065.jpg 100KB
background2.jpg 95KB
background4.jpg 92KB
background77.jpg 76KB
background7.jpg 65KB
background3.jpg 63KB
background5.jpg 56KB
微信图片_20230908135253.jpg 54KB
微信图片_20230908135234.jpg 54KB
background9.jpg 52KB
taiyangxixingxingtupian-09708092_1.jpg 49KB
微信图片_20230908135239.jpg 40KB
background77 (2).jpg 39KB
微信图片_20230908135224.jpg 39KB
background0.jpg 39KB
微信图片_20230908135308.jpg 33KB
background8.jpg 31KB
background13.jpg 31KB
background32.jpg 28KB
background33 (2).jpg 26KB
background31.jpg 21KB
99a5-ifzxhxm6650257.jpg 18KB
48a2f94a708e44ee89c05c23f2b67758.jpg 10KB
566054cd7f10df92568f83a575ef1218.png 415KB
35-220120150Z8-51.png 293KB
enemy51.png 31KB
enemy53.png 22KB
enemy32.png 21KB
enemy29.png 20KB
enemy28.png 20KB
enemy34.png 18KB
enemy31.png 18KB
enemy30.png 18KB
enemy43.png 15KB
enemy21.png 15KB
enemy37.png 15KB
enemy52.png 15KB
enemy23.png 14KB
enemy50.png 14KB
enemy36.png 14KB
enemy47.png 14KB
enemy35.png 14KB
enemy27.png 14KB
enemy48.png 14KB
enemy42.png 14KB
enemy49.png 13KB
enemy40.png 13KB
enemy17.png 13KB
enemy39.png 13KB
enemy26.png 13KB
enemy14.png 13KB
enemy44.png 13KB
enemy38.png 13KB
enemy24.png 12KB
enemy18.png 12KB
enemy20.png 12KB
enemy25.png 12KB
enemy45.png 12KB
enemy41.png 12KB
enemy22.png 11KB
enemy46.png 11KB
enemy15.png 11KB
enemy13.png 11KB
enemy16.png 10KB
enemy19.png 10KB
enemy7.png 9KB
planeDie3.png 9KB
enemy8.png 9KB
enemy10.png 9KB
enemy9.png 9KB
enemy12.png 9KB
planeDie2.png 7KB
planeDie1.png 7KB
plane.png 7KB
enemy11.png 7KB
planeUp.png 6KB
planeDown.png 5KB
boss.png 4KB
explode3.png 4KB
explode2.png 3KB
failed.png 3KB
enemy33.png 3KB
enemy54.png 3KB
vicotry.png 3KB
共 132 条
- 1
- 2
资源评论
- 2301_768119552024-03-05资源使用价值高,内容详实,给了我很多新想法,感谢大佬分享~
特立独行的猫a
- 粉丝: 7w+
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240430_144340_com.ss.android.ugc.live.jpg
- 回到山沟沟.mp3
- 111111111111111111
- 基于matlab实现关于语音信号声源定位DOA估计所用的一些传统算法.rar
- 基于ultralytics-yolov8, 将其检测/分类/分割/姿态等任务移植到rk3588上
- Screenshot_2024-04-30-21-47-24-26.jpg
- 基于matlab实现波束形成,包括线阵、平面阵和圆阵
- Python自动生成excel周期报告源码
- 基于matlab实现DOA 估计和自适应波束形成.rar
- 一个基于yolov8的火灾检测部署
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功