python游戏

python小游戏 太空人入侵

步骤如下

  • 创建背景
  • 创建玩家 玩家动起来
  • 创建敌人 敌人动起来
  • 创建,发射子弹
  • 添加分数
  • 判定游戏结束
  • 载入音乐

一个简单的小游戏,没有用太多的库
效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
gif图片没有搞上来
代码如下:

import turtle
import random
import simpleaudio as sa
#载入音乐
laser = sa.WaveObject.from_wave_file('./img/laser.wav')
exp = sa.WaveObject.from_wave_file('./img/explosion.wav')
# 设置背景
game = turtle.Screen()
game.setup(700,700)
game.title('太空人入侵')
game.bgpic('./img/bg.gif')

# 创建玩家
turtle.addshape('./img/player.gif')
player = turtle.Turtle()
player.ht()
player.speed(0)
player.up()
player.shape('./img/player.gif')
player.setpos(0,-300)
player.st()

# 添加分数
score = 0
pen = turtle.Turtle()
pen.color('white')
pen.speed(0)
pen.up()
pen.ht()
pen.setpos(-340,230)
score_string ='分数:%s' %score
pen.write(score_string,align='left',font=('Arial',12,'normal'))

#每次移动
play_step =15
def go_left():
    x= player.xcor()
    x = x-play_step
    if x < -300:
        x = -300
    player.setx(x)

def go_right():
    x= player.xcor()
    x = x+play_step
    if x > 300:
        x = 300
    player.setx(x)
#监听
turtle.listen()
turtle.onkey(go_left,'Left')
turtle.onkey(go_right,'Right')


# 添加敌人
num = 6
inv_list = []
turtle.addshape('./img/inv.gif')
for i in range(6):
    inv = turtle.Turtle()
    inv_list.append(inv)
    inv.ht()
    inv.speed(0)
    inv.up()
    inv.shape('./img/inv.gif')
    x = random.randint(-200,200)
    y = random.randint(100,200)
    inv.setpos(x,y)
    inv.st()

# 创建子弹
bomd = turtle.Turtle()
bomd.ht()
bomd.speed(0)
bomd.up()
bomd.shape('triangle')
bomd.color('yellow')
bomd.shapesize(0.5,0.5)
bomd.seth(90)


# 发射子弹
is_fired = False
def fire():
    global is_fired
    if is_fired ==False:
        bomd.setpos(player.xcor(),player.ycor()+20)
        bomd.st()
        is_fired = True
        laser.play()
turtle.onkey(fire,'space')

# 敌人移动速度
inv_step = 2
# 敌人位置状态
go_banck = False
# 子弹速度
bomd_step = 10
# 游戏状态
game_over = False
# 循环内使敌人 子弹动起来
while True:
    #判断游戏结束
    if game_over:
        pen2 = turtle.Turtle()
        pen2.color('red')
        pen.ht()
        pen2.write('游戏结束',align='center',font=('Arial',18,'bold'))
        break
    # 敌人移动起来
    for inv in inv_list:
        x = inv.xcor()
        x += inv_step
        inv.setx(x)

        #敌人左右摇摆
        if x > 300 or x <-300:
            go_banck = True

        # 击中敌人后执行的操作
        # 敌人复位
        if inv.distance(bomd) < 15:
            inv.setpos(0,240)
            is_fired = False
            bomd.setpos(-350,-350)
            bomd.ht()
            # 计分
            score +=10
            score_string = '分数:%s' % score
            pen.clear()
            pen.write(score_string, align='left', font=('Arial', 12, 'normal'))
            exp.play()

        # 满足改条件 游戏结束
        if inv.ycor() < -280:
            game_over = True

        # 敌人来回移动 到达边界下降40
        if go_banck:
            inv_step *= -1
            go_banck = False
            for inv in inv_list:
                y = inv.ycor()
                y -=40
                inv.sety(y)
        #发射子弹
        if is_fired:
            y = bomd.ycor()
            y+= bomd_step
            bomd.sety(y)

            # 子弹到达边界消失
            if y > 250:
                is_fired = False
                bomd.setpos(-350,-350)
                bomd.ht()


turtle.done()

代码参考视频,B站麦叔编程 需要图片或者 声音资料的可以找我要 也可以去B站找麦叔

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值