Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我想在我的程序中添加一个倒计时_Python_Timer_Turtle Graphics - Fatal编程技术网

Python 我想在我的程序中添加一个倒计时

Python 我想在我的程序中添加一个倒计时,python,timer,turtle-graphics,Python,Timer,Turtle Graphics,所以我正在用Python做一个游戏,我几乎完成了,尽管我被难住了。 有几件事我想要: 我想做一个30秒的计时器。玩家有30秒的时间收集尽可能多的小球 第二,计时器完成后,乌龟不再可控 我需要做什么来修复这些 屏幕设置 import turtle import math import random #screen wn=turtle.Screen() wn.bgcolor("lightblue") speed=1 wn.tracer(2) #Score Variable score=0 #

所以我正在用Python做一个游戏,我几乎完成了,尽管我被难住了。 有几件事我想要:

  • 我想做一个30秒的计时器。玩家有30秒的时间收集尽可能多的小球
  • 第二,计时器完成后,乌龟不再可控
我需要做什么来修复这些

屏幕设置

import turtle
import math
import random
#screen
wn=turtle.Screen()
wn.bgcolor("lightblue")
speed=1
wn.tracer(2)


#Score Variable
score=0
#Turtle Player
spaceship= turtle.Turtle()
spaceship.pensize(1)
spaceship.color("red")
spaceship.penup()
turtle.delay(3)
spaceship.shapesize(1,1)
add=1

#Create Goals
maxpoints = 6
points = []

for count in range(maxpoints):
    points.append(turtle.Turtle())
    points[count].color("green")
    points[count].shape("circle")
    points[count].penup()
    points[count].goto(random.randint(-300,300), random.randint(-200,200))

#Border
border = turtle.Turtle()
border.penup()
border.goto(-300,-200)
border.pendown()
border.pensize(5)
border.color("darkblue")
for side in range(2):
    border.forward(600)
    border.left(90)
    border.forward(400)
    border.left(90)



#Functions
def left():
    spaceship.left(30)
def right():
    spaceship.right(30)

def increasespeed():
    global speed
    speed += 1

def decreasespeed():
    global speed
    speed -= 1

def iscollision(turtle1,turtle2):
    collect = math.sqrt(math.pow(turtle1.xcor()-turtle2.xcor(),2)+ math.pow(turtle1.ycor()-turtle2.ycor(),2))
    if collect <20:
        return True
    else:
        return False
导入海龟
输入数学
随机输入
#屏风
wn=tutle.Screen()
wn.bgcolor(“浅蓝色”)
速度=1
wn.示踪剂(2)
#分数变量
分数=0
#乌龟运动员
宇宙飞船=海龟
太空船。养老金(1)
太空船。颜色(“红色”)
宇宙飞船
乌龟。延迟(3)
宇宙飞船.形状尺寸(1,1)
相加=1
#创造目标
最大点=6
点数=[]
对于范围内的计数(最大点):
points.append(turtle.turtle())
点数[计数]。颜色(“绿色”)
点[计数]。形状(“圆”)
点数[count].penup()
点数[count].goto(random.randint(-300300),random.randint(-200200))
#边界
border=turtle.turtle()
border.penup()
border.goto(-300,-200)
border.pendown()
边界。养老金(5)
边框颜色(“暗蓝色”)
对于范围内的侧面(2):
边界向前(600)
边框。左(90)
边界向前(400)
边框。左(90)
#功能
def left():
太空船,左(30)
def right():
太空船。右(30)
def递增速度():
全球速度
速度+=1
def降低速度():
全球速度
速度-=1
def iscollision(turtle1、turtle2):
collect=math.sqrt(math.pow(turtle1.xcor()-turtle2.xcor(),2)+math.pow(turtle1.ycor()-turtle2.ycor(),2))

如果收集300或spaceship.xcor()200或spaceship.ycor()实现此功能的另一种简单方法是执行以下操作:

  • 添加一个变量,该变量保存游戏开始时的时间戳
  • 将要遵守超时的代码包装到while循环中,该循环在当前时间和开始时间之间的差值小于时间限制时运行
  • 例如:

    import time
    starting_time = time.time()
    time_limit = 30
    
    while (time.time() - starting_time) < time_limit:
         # YOUR GAME LOGIC HERE
    
    导入时间
    开始时间=time.time()
    时限=30
    while(time.time()-开始时间)<时间限制:
    #你的游戏逻辑在这里
    
    我本来打算给你一些海龟
    ontimer()
    事件代码来处理倒计时,但意识到你的代码没有正确组织来处理倒计时。例如,您的无限
    while True:
    循环可能会阻止某些事件的触发,它肯定会阻止边界和冲突代码的运行。即使没有,您的边界和碰撞代码也只设置为在每次宇宙飞船移动时运行一次

    我已经围绕运行宇宙飞船的
    ontimer()
    事件和运行倒计时的另一个事件重新组织了您的代码。我已经修复了边界和碰撞代码,基本上可以正常工作。为了简化此示例,我省略了一些功能(例如
    spaceship.shapesize(add)
    ):

    from turtle import Turtle, Screen
    import random
    
    MAXIMUM_POINTS = 6
    FONT = ('Arial', 16, 'normal')
    WIDTH, HEIGHT = 600, 400
    
    wn = Screen()
    wn.bgcolor('lightblue')
    # Score Variable
    score = 0
    
    # Turtle Player
    spaceship = Turtle()
    spaceship.color('red')
    spaceship.penup()
    
    speed = 1
    
    # Border
    border = Turtle(visible=False)
    border.pensize(5)
    border.color('darkblue')
    
    border.penup()
    border.goto(-WIDTH/2, -HEIGHT/2)
    border.pendown()
    
    for _ in range(2):
        border.forward(WIDTH)
        border.left(90)
        border.forward(HEIGHT)
        border.left(90)
    
    border.penup()
    border.goto(-WIDTH/2 + 10, HEIGHT/2 + 10)
    border.write('Score: {}'.format(score), align='left', font=FONT)
    
    # Create Goals
    points = []
    
    for _ in range(MAXIMUM_POINTS):
        goal = Turtle('circle')
        goal.color('green')
        goal.penup()
        goal.goto(random.randint(20 - WIDTH/2, WIDTH/2 - 20), \
            random.randint(20 - HEIGHT/2, HEIGHT/2 - 20))
        points.append(goal)
    
    # Functions
    def left():
        spaceship.left(30)
    
    def right():
        spaceship.right(30)
    
    def increasespeed():
        global speed
        speed += 1
    
    def decreasespeed():
        global speed
        speed -= 1
    
    def iscollision(turtle1, turtle2):
        return turtle1.distance(turtle2) < 20
    
    # Keyboard Bindings
    wn.onkey(left, 'Left')
    wn.onkey(right, 'Right')
    wn.onkey(increasespeed, 'Up')
    wn.onkey(decreasespeed, 'Down')
    wn.onkey(wn.bye, 'q')
    
    wn.listen()
    
    timer = 30
    
    def countdown():
        global timer
    
        timer -= 1
    
        if timer <= 0:  # time is up, disable user control
            wn.onkey(None, 'Left')
            wn.onkey(None, 'Right')
            wn.onkey(None, 'Up')
            wn.onkey(None, 'Down')
        else:
            wn.ontimer(countdown, 1000)  # one second from now
    
    wn.ontimer(countdown, 1000)
    
    def travel():
        global score
    
        spaceship.forward(speed)
    
        # Boundary
        if not -WIDTH/2 < spaceship.xcor() < WIDTH/2:
            spaceship.left(180)
    
        if not -HEIGHT/2 < spaceship.ycor() < HEIGHT/2:
            spaceship.left(180)
    
        # Point collection
        for count in range(MAXIMUM_POINTS):
            if iscollision(spaceship, points[count]):
                points[count].goto(random.randint(20 - WIDTH/2, WIDTH/2 - 20), \
                    random.randint(20 - HEIGHT/2, HEIGHT/2 - 20))
                score += 1
                # Screen Score
                border.undo()
                border.write('Score: {}'.format(score), align='left', font=FONT)
    
        if timer:
            wn.ontimer(travel, 10)
    
    travel()
    
    wn.mainloop()
    
    从海龟导入海龟,屏幕
    随机输入
    最大积分=6
    字体=('Arial',16,'normal')
    宽度,高度=600400
    wn=屏幕()
    wn.bgcolor('lightblue'))
    #分数变量
    分数=0
    #乌龟运动员
    太空船=海龟
    太空船。颜色(“红色”)
    宇宙飞船
    速度=1
    #边界
    边框=海龟(可见=假)
    边界。养老金(5)
    border.color('darkblue')
    border.penup()
    边框。转到(-宽度/2,-高度/2)
    border.pendown()
    对于范围(2)内的uu:
    边框向前(宽度)
    边框。左(90)
    边界向前(高度)
    边框。左(90)
    border.penup()
    边框。转到(-宽度/2+10,高度/2+10)
    write('Score:{}'。格式(Score),align='left',font=font)
    #创造目标
    点数=[]
    对于范围内的(最大点):
    目标=乌龟(“圆圈”)
    目标颜色(“绿色”)
    目标
    goal.goto(random.randint(20-WIDTH/2,WIDTH/2-20)\
    random.randint(20-HEIGHT/2,HEIGHT/2-20))
    加分(目标)
    #功能
    def left():
    太空船,左(30)
    def right():
    太空船。右(30)
    def递增速度():
    全球速度
    速度+=1
    def降低速度():
    全球速度
    速度-=1
    def iscollision(turtle1、turtle2):
    返回套头衫1.距离(套头衫2)<20
    #键盘绑定
    wn.onkey(左,‘左’)
    wn.onkey(右,‘右’)
    wn.onkey(增加速度,'Up')
    wn.onkey(降低速度,'Down')
    wn.onkey(wn.bye,'q')
    听着
    计时器=30
    def倒计时():
    全局计时器
    计时器-=1
    
    如果计时器对我有帮助的是使用
    time.time()
    。如果在代码开头将变量(例如
    startTime
    )设置为
    time.time()
    ,则可以在主游戏循环中添加If。
    if
    将检查是否经过了足够的时间。例如:

    import time
    starting_time = time.time()
    time_limit = 30
    
    while (time.time() - starting_time) < time_limit:
         # YOUR GAME LOGIC HERE
    
    如果time.time()>开始时间+30:
    #无论您如何结束游戏

    time.time()
    以秒为单位给出当前时间,因此如果在代码开头将变量设置为
    time.time()
    ,该变量将给出游戏开始的时间。在
    if
    中,检查当前时间是否达到游戏开始时间加30秒

    我希望这有帮助;如果真是这样,一定要投赞成票!:)