见缝插针(Python)

见缝插针(Python

直接看效果吧!

见缝插针

上代码

import pgzrun
import random

TITLE = "Python见缝插针" # 窗口标题

background = Actor('background') # 导入背景图片

needles = [] # 存放发射针的列表
startNeedle = Actor('needle',anchor=(170 + 50,1.5)) # 导入针的图片,并设置锚点(旋转轴心)
startNeedle.x = 220
startNeedle.y = 300

difficulty_Needles = [] # 存放干扰的针

rotateSpeed= 1 # 针旋转的速度,默认设置为1
score = 8 # 针的数量,默认设置为8
radius = 80 # 圆盘的半径
record_score = 8 # 记录针的数量,方便切换关卡
level = 1 # 关卡
record_speed = 1 # 记录速度
flag = 0 # 设置标志位,来画干扰的针

r,g,b = random.randint(0,255),random.randint(0,255),random.randint(0,255) # 随机圆盘的颜色

def draw(): # 绘制模块,每帧重复执行
    global flag #全局变量
    if not flag: #将干扰的针添加进列表
        for i in range(int(rotateSpeed)+3):
            difficulty_Needle2 = Actor('needle', anchor=(170 + 50, 1.5))
            difficulty_Needle2.angle = (360 / (int(rotateSpeed) + 2)) * i
            difficulty_Needle2.x = 400
            difficulty_Needle2.y = 300
            needles.append(difficulty_Needle2)
    if rotateSpeed != 0:
        flag = 1
        screen.fill('white') # 白色背景
        screen.draw.filled_circle((400,300),radius,(r,g,b)) # 画圆盘
        screen.draw.text("第{}关".format(level),(320,10),fontsize=60,fontname="simhei",color='black') # 显示关卡
        if score < 10: # 显示分数,这里用判断语句来区分一位数和两位数,位置稍有不同
            screen.draw.text(str(score), (385, 275), fontsize=80, color='white')
        else:
            screen.draw.text(str(score), (370, 275), fontsize=80, color='white')
        screen.draw.text("Speed : {}".format(rotateSpeed), (20, 270), fontsize=35, color='red') # 显示速度
        startNeedle.draw() # 画初始的针
        for difficulty_Needle in difficulty_Needles: # 循环遍历画出干扰的针
            difficulty_Needle.draw()
        for needle in needles: # 循环遍历画出发射出去的针
            needle.draw()
    else: # 失败后的场景
        screen.clear()  # 清屏
        background.draw() # 画背景
        screen.draw.text('Game Over!', (200, 200), fontsize=100, color='red')  # 画文本
        screen.draw.text('再试一次', (230, 400), fontsize=25, fontname="simhei", color='green')
        screen.draw.text('退出游戏', (450, 400), fontsize=25, fontname="simhei", color='green')

def update(): # 更新模块,每帧重复执行
    # 让针旋转
    for needle in needles:
        needle.angle += rotateSpeed
    for difficulty_Needle in difficulty_Needles:
        difficulty_Needle.angle += rotateSpeed

def on_key_down(): # 按键检测
    global rotateSpeed,score,level,record_score,record_speed,flag # 全局变量
    newNeedle = Actor('needle', anchor=(170 + 50, 1.5)) # 新建一根针
    newNeedle.x = 400 # 新建针的x坐标
    newNeedle.y = 300 # 新建针的y坐标
    for needle in needles: # 判断发射针是否碰到其他针,如果碰到就停止转动
        if newNeedle.colliderect(needle):
            rotateSpeed = 0
            music.play_once("失败") # 失败音效
    needles.append(newNeedle) # 将新创建的针加入列表
    if rotateSpeed > 0:
        score -= 1 # 每发射一根针的数量就减1
        if score == 0: # 当针的数量减到零时,要切换关卡,增加难度
            needles.clear() # 清除发射针列表
            record_score += 2 # 针的数量变多
            score = record_score
            level += 1 # 关卡变更
            rotateSpeed += 0.5 # 速度加快
            record_speed = rotateSpeed
            flag = 0 # 将标志位置零,重新绘制干扰针
        music.play_once('发射') # 发射音效


def on_mouse_down(pos, button): # 鼠标检测
    global rotateSpeed,record_speed,score,flag # 全局变量
    if button == mouse.LEFT and pos[0] > 445 and pos[0] < 555 and pos[1] > 395 and pos[1] < 435: # 如果鼠标左键按下退出游戏
        exit() # 退出游戏
    if button == mouse.LEFT and pos[0] > 225 and pos[0] < 335 and pos[1] > 395 and pos[1] < 435: # 如果鼠标左键按下再试一次
        rotateSpeed = record_speed # 重置速度
        needles.clear() # 清空发射针的列表
        score = record_score # 重置针的数量
        flag = 0 # 将标志位置零,用于重新绘制干扰针

pgzrun.go() # 开始执行游戏
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值