作者:书友68610983 | 来源:互联网 | 2023-09-11 13:22
小编给大家分享一下如何利用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=&#39;res/ufo.png&#39;,visible=False,pos=(x,y),tag=&#39;enemy&#39;)
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=&#39;circle&#39;,visible=False,tag=&#39;bullet&#39;)
b.scale(0.5)
b.color(&#39;yellow&#39;)
b.goto(player.pos()) # 移到player坐标
b.show() # 显示子弹
shoot.play() # 播放射击声
7.播放背景音乐与生成声效对象
# 播放背景音乐与生成声效对象
pygame.mixer.init()
pygame.mixer.music.load(&#39;audio/FrozenJam.ogg&#39;)
pygame.mixer.music.play(-1,0)
explosion = pygame.mixer.Sound(&#39;audio/expl3.wav&#39;)
shoot = pygame.mixer.Sound(&#39;audio/pew.wav&#39;)
8.新建屏幕
width,height = 480,640
screen = Screen() # 新建屏幕
screen.bgcolor(&#39;black&#39;) # 屏幕背景色为黑
screen.setup(width,height)
screen.title("星空飞碟大战by大海老师")
screen.addshape(&#39;res/fighter.png&#39;)
screen.addshape(&#39;res/ufo.png&#39;)
frames = [&#39;res/explosion0.png&#39;,&#39;res/explosion1.png&#39;]
[screen.addshape(frame) for frame in frames]
9.移动图章实现星星
# 星星,用来做向下滚动背景,星星的移动也可以通过移动图章实现
# 这样可以有更多的星星。如果用克隆的话有数量限制,根据计算机配置不同而不同。
star = Sprite(shape=&#39;circle&#39;)
star.color(&#39;white&#39;)
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=&#39;cry.png&#39;,visible=False,pos=(0,100))
11.玩家
player = Sprite(shape=&#39;res/fighter.png&#39;,pos=(0,-200))
player.scale(0.65)
player.alive = True # 表示player是活的
m1 = Mouse() # 鼠标左键检测实例
clock = Clock() # 实钟对象,用来控制fps
framecounter = 0
counter = 0 # 统计击中的ufo数量
bullets = Group(&#39;bullet&#39;) # 子弹组
enemys = Group(&#39;enemy&#39;) # 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(&#39;星空飞碟大战,当前击毙:&#39; + 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(&#39;yellow&#39;)
t.write(&#39;成功闯关!&#39;,align=&#39;center&#39;,fOnt=(&#39;黑体&#39;,32,&#39;normal&#39;))
while True:
player.goto(mousepos())
star_move() # 星空滚动背景
clock.tick(60)
以上是“如何利用Python实现星空大战游戏”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程笔记行业资讯频道!