Python 我想在我的程序中添加一个倒计时
所以我正在用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 #
- 我想做一个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秒
我希望这有帮助;如果真是这样,一定要投赞成票!:)