文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何利用Python实现星空大战游戏

2023-06-29 18:02

关注

小编给大家分享一下如何利用Python实现星空大战游戏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一.游戏画面

如何利用Python实现星空大战游戏

二.游戏结束画面

如何利用Python实现星空大战游戏

三.游戏素材

如何利用Python实现星空大战游戏

如何利用Python实现星空大战游戏

四.游戏代码

星空飞碟大战.py

由于配音需要混音器,这里用到了pygame的混音器,

五、核心代码

1.导入模块

from sprites import *import pygame.mixer

2.动态星空背景函数

def star_move():  """动态星空背景函数"""  for star in stars:    star.move(0,-20)    if star.ycor() < -height//2:      x = random.randint(-width//2,width//2)      y = random.randint(10+height//2,height*2)      star.reborn(x,y,0,-20)

3.不定时产生敌机函数

def spawn_enemy():  """不定时产生敌机函数"""  if random.randint(1,10)==1 and len(enemys)<10:    x = random.randint(-200,200)    y = random.randint(100,300)    enemy = Sprite(shape='res/ufo.png',visible=False,pos=(x,y),tag='enemy')    enemy._rotatemode = 1    enemy.scale(0.5)    enemy.setheading(random.randint(1,360))    enemy.show()

4.飞碟的移动

def enemymove():  """飞碟的移动"""    for e in enemys:    e.fd(3)        # 设定一定的机率让ufo朝向player    if random.randint(10,100) == 10 and \       abs(e.xcor())<200 and abs(e.ycor()<250):      e.heading(player)        e.bounce_on_edge()

5.子弹的移动

def bulletmove():  """子弹的移动"""    for b in list(bullets):     b.move(0,10)     if b.collide_edge():b.remove()

6.玩家射击函数

def player_shoot():  """玩家射击函数"""  if player.alive == False : return   if m1.down() and framecounter % 5 == 0 :     b = Sprite(shape='circle',visible=False,tag='bullet')     b.scale(0.5)     b.color('yellow')         b.goto(player.pos())        # 移到player坐标     b.show()                    # 显示子弹     shoot.play()                # 播放射击声

7.播放背景音乐与生成声效对象

# 播放背景音乐与生成声效对象pygame.mixer.init()pygame.mixer.music.load('audio/FrozenJam.ogg')pygame.mixer.music.play(-1,0)explosion = pygame.mixer.Sound('audio/expl3.wav')shoot = pygame.mixer.Sound('audio/pew.wav')

8.新建屏幕

width,height = 480,640screen = Screen()               # 新建屏幕screen.bgcolor('black')         # 屏幕背景色为黑screen.setup(width,height)screen.title("星空飞碟大战by大海老师")screen.addshape('res/fighter.png')screen.addshape('res/ufo.png')frames = ['res/explosion0.png','res/explosion1.png'][screen.addshape(frame) for frame in frames]

9.移动图章实现星星

# 星星,用来做向下滚动背景,星星的移动也可以通过移动图章实现# 这样可以有更多的星星。如果用克隆的话有数量限制,根据计算机配置不同而不同。star = Sprite(shape='circle')star.color('white')star.scale(0.1)stars = [star]stars.extend([star.clone() for _ in range(20)])for star in stars:  x = random.randint(-width//2,width//2)  y = random.randint(10+height//2,height*2)  star.goto(x,y)

10.哭脸

cry = Sprite(shape='cry.png',visible=False,pos=(0,100))

11.玩家

player = Sprite(shape='res/fighter.png',pos=(0,-200))player.scale(0.65)player.alive = True             # 表示player是活的m1 = Mouse()                    # 鼠标左键检测实例clock = Clock()                 # 实钟对象,用来控制fpsframecounter = 0counter = 0                     # 统计击中的ufo数量bullets = Group('bullet')       # 子弹组enemys = Group('enemy')         # ufo敌人组

12.飞碟移动与子弹移动

while counter<100:  framecounter += 1             # 帧计数器  spawn_enemy()                 # 不定时产生敌机UFO  player_shoot()                # 单击鼠标左键,射击子弹  enemymove()                   # 飞碟们的移动   bulletmove()                  # 子弹的移动  if player.alive:    player.goto(mousepos())  else:    cry.show()                  # 显示哭脸,表示失败  star_move()                   # 星空滚动背景

13.敌机的碰撞检测

for e in list(enemys):        # 对每架敌机进行碰撞检测  if e.collide(player,scale=0.6):                  explode(e.position(),frames)      e.remove()      explode(player.pos(),frames)      player.remove()      player.alive = False      explosion.play()         # 爆炸声      break  # 敌机是否碰到任意一颗子弹  for b in list(bullets):    if b.collide(e,scale=0.6): # 如果子弹碰到UFO              explode(e.position(),frames)      e.remove()      b.remove()      explosion.play()         # 爆炸声      counter +=1              # 进行统计               break            screen.title('星空飞碟大战,当前击毙:' +  str(counter) + " 架UFO")  clock.tick(60)

14.闯关成功把子弹删除

[b.remove() for b in list(bullets)] # 闯关成功把子弹删除for e in list(enemys):              # 每架飞碟都爆炸  explode(e.position(),frames)  e.remove()    clock.tick(10)    t = Turtle(visible=False)t.color('yellow')t.write('成功闯关!',align='center',font=('黑体',32,'normal'))while True:  player.goto(mousepos())   star_move()                   # 星空滚动背景    clock.tick(60)

以上是“如何利用Python实现星空大战游戏”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯