星球侵略者

星球侵略者

音效

图片资源

背景
在这里插入图片描述

敌人

在这里插入图片描述
玩家
在这里插入图片描述
代码片段


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)
                


            
        
        





    




    

    






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值