星球侵略者
音效
图片资源
背景
敌人
玩家
代码片段
import turtle
import random
import simpleaudio as sa
# 引入音乐
laser = sa.WaveObject.from_wave_file("laser.wav")
#exp = sa.WaveObject.from_wave_file("")
# 创建方法 以下是方法区
# 创建方法
player_speed = 15
def left():
x = player.xcor()
x =x -player_speed
if x<-280:
x =-280
player.setx(x)
def right():
x = player.xcor()
x =x +player_speed
if x>280:
x =280
player.setx(x)
# 发射子弹
def fire():
bomb.setpos(player.xcor(),player.ycor())
bomb.showturtle()
laser.play()
turtle.onkey(fire,"space")
# 以上是方法区域
# 创建游戏画布
game = turtle.Screen()
# 设置游戏画布大小
game.setup(600,600)
# 设置窗口题目
game.title("太空侵略者")
# 传入背景
game.bgpic("bg.gif")
# 创建玩家
turtle.addshape("player.gif")
player = turtle.Turtle()
player.speed(0)
player.penup()
player.shape("player.gif")
# 设置player的位置
player.setpos(0,-270)
# 监听键盘事件
turtle.listen()
turtle.onkey(left,"Left")
turtle.onkey(right,"Right")
# 添加子弹
bomb = turtle.Turtle("triangle")
bomb.hideturtle()
bomb.speed(0)
bomb.color("yellow")
bomb.penup()
bomb.shapesize(0.5,0.5)
bomb.setheading(90)
# 添加分数
pen = turtle.Turtle()
pen.color("white")
pen.speed(0)
pen.up()
pen.hideturtle()
pen.setpos(-280,280)
score = 0
score_s = "分数: %s" % score
pen.write(score_s,align="left",font=("Arial",12,"normal"))
# 添加敌人
num = 6
inv_list =[]
turtle.addshape("enemy.gif")
for i in range(num):
inv = turtle.Turtle()
inv_list.append(inv)
inv.speed(0)
inv.penup()
inv.shape("enemy.gif")
x = random.randint(-200,200)
y = random.randint(100,200)
inv.setpos(x,y)
# 让敌人动起来
inv_step = 5
go_back = False
bomb_step=50
game_over = False
while True:
if game_over:
pen2 = turtle.Turtle()
pen2.color("red")
pen2.hideturtle()
pen2.write("游戏结束",align="center",font=("Arial",18,"bold"))
break
for inv in inv_list:
print(inv)
x = inv.xcor()
x+=inv_step
inv.setx(x)
print(x)
if x > 280 or x <-280:
go_back=True
if inv.distance(bomb) <30:
inv.setpos(0,240)
is_fired = False
bomb.setpos(-350,-350)
score += 10
score_s = "分数: %s" % score
pen.clear()
pen.write(score_s,align="left",font=("Arial",12,"normal"))
if inv.ycor()< -270:
game_over = True
if go_back:
inv_step *=-1
go_back=False
for inv in inv_list:
y = inv.ycor()
y-=10
inv.sety(y)
y = bomb.ycor()
y+=bomb_step
bomb.sety(y)
if y>300:
bomb.setpos(-350,-350)