Python 蟒蛇龟:开始倒计时被卡住了
我正在做一个躲避游戏,海龟(形状像海龟)必须避开其他海龟(形状像鳄鱼)。我让游戏开始了,但我正在尝试在游戏开始前加入一个倒计时,3,2,1,开始 我的想法是,自从倒计时_数变量开始,我就开始3,2,1,然后开始!,我可以让它在游戏的其他部分之前出现,因为其他的一切都取决于倒计时的数值“GO!” 然而,现在,当我启动程序时,它会卡在3上,更新间隔重新开始,而不是继续执行2、1和GO!因此游戏无法开始 我已经看到了很多关于堆栈溢出的问题,这些问题都与运行计时器和与游戏并行的事情有关,但我需要在游戏开始之前发生Python 蟒蛇龟:开始倒计时被卡住了,python,timer,countdown,turtle-graphics,Python,Timer,Countdown,Turtle Graphics,我正在做一个躲避游戏,海龟(形状像海龟)必须避开其他海龟(形状像鳄鱼)。我让游戏开始了,但我正在尝试在游戏开始前加入一个倒计时,3,2,1,开始 我的想法是,自从倒计时_数变量开始,我就开始3,2,1,然后开始!,我可以让它在游戏的其他部分之前出现,因为其他的一切都取决于倒计时的数值“GO!” 然而,现在,当我启动程序时,它会卡在3上,更新间隔重新开始,而不是继续执行2、1和GO!因此游戏无法开始 我已经看到了很多关于堆栈溢出的问题,这些问题都与运行计时器和与游戏并行的事情有关,但我需要在游戏开
import turtle
import random
import pygame
window_height = 600
window_width = 600
update_interval = 25
countdown_number = 3
river_width = 400
minimum_river_width = 200
border_height = 600
river_width_update = 0.5
safe_distance_from_border = border_height / 2 + 3
number_of_enemies = 10
enemies = []
enemy_speeds = []
enemy_width = 100
enemy_height = 40
enemy_speed_min, enemy_speed_max = 10, 20
safe_distance_from_enemy = 15
def startgame():
global countdown_number
if countdown_number >= 1:
turtle.home()
turtle.left(270)
turtle.clear()
turtle.speed(0)
for _ in range(0,100,5):
turtle.forward(1)
turtle.color("grey"+str(_))
turtle.write(countdown_number, align="center", font=("Arial", 200, "normal"))
if countdown_number == 0:
countdown_number = "GO!"
turtle.home()
turtle.left(270)
turtle.clear()
turtle.speed(0)
for _ in range(0,100,5):
turtle.forward(1)
turtle.color("grey"+str(_))
turtle.write(countdown_number, align="center", font=("Arial", 200, "normal"))
turtle.clear()
#print(number)
def gameover(msg):
print(msg) # Probably comment this out later
turtle.home()
turtle.write(msg, align="center", font=("Arial", 24, "normal"))
def moveplayerturtle(x, y):
if x > -window_width / 2 and x < window_width / 2:
turtle.goto(x, y)
def updatescreen():
global river_width
global countdown_number
if countdown_number != "GO!":
startgame()
if countdown_number == "GO!":
if upper_river_border.ycor() >= window_height-200:
upper_river_border.sety(upper_river_border.ycor() - river_width_update)
if lower_river_border.ycor() <= -window_height+200:
lower_river_border.sety(lower_river_border.ycor() + river_width_update)
if upper_river_border.ycor() - turtle.ycor() < safe_distance_from_border:
gameover("Game over!")
return
if turtle.ycor() - lower_river_border.ycor() < safe_distance_from_border:
gameover("Game over!")
return
for i in range(number_of_enemies):
enemies[i].forward(enemy_speeds[i])
if enemies[i].xcor() > (window_width+enemy_width)/2:
x = -(window_width+enemy_width)/2
y = int(turtle.ycor())
enemies[i].goto(x, y)
s=1
enemy_speeds[i]=int(random.randrange(10+s, 20+s))
if turtle.distance(enemies[i]) < safe_distance_from_enemy:
gameover("You lose!")
return
turtle.ontimer(updatescreen, update_interval)
turtle.update()
turtle.setup(window_width, window_height) # Set the window size
turtle.bgcolor("DarkBlue")
turtle.tracer(False)
upper_river_border = turtle.Turtle()
upper_river_border.up()
lower_river_border = turtle.Turtle()
lower_river_border.up()
upper_river_border.shape("square")
lower_river_border.shape("square")
upper_river_border.color("DarkOrange4")
lower_river_border.color("DarkOrange4")
upper_river_border.shapesize(30, 40)
lower_river_border.shapesize(30, 40)
upper_river_border.sety((border_height + river_width) / 2)
lower_river_border.sety(-(border_height + river_width) / 2)
turtle.addshape("crocodile.gif")
for _ in range(number_of_enemies):
enemy = turtle.Turtle()
turtle.addshape("crocodile.gif")
enemy.shape("crocodile.gif")
enemy.up()
x = -(window_width + enemy_width) / 2
y = random.randint(-(river_width-enemy_height)/2, (river_width-enemy_height)/2)
enemy.goto(x, y)
enemies.append(enemy)
enemy_speeds.append(random.randint(enemy_speed_min, enemy_speed_max))
turtle.shape("turtle")
turtle.left(180)
turtle.color("GreenYellow")
turtle.up()
turtle.ondrag(moveplayerturtle)
turtle.ontimer(updatescreen, update_interval)
turtle.done()
导入海龟
随机输入
导入pygame
窗户高度=600
窗宽=600
更新间隔=25
倒计时次数=3
河流宽度=400
最小河流宽度=200
边框高度=600
河流宽度更新=0.5
距离边界的安全距离=边界高度/2+3
敌人的数量=10
敌人=[]
敌方速度=[]
宽度=100
敌方高度=40
敌方速度最小值,敌方速度最大值=10,20
与敌人的安全距离=15
def startgame():
全球倒计时
如果倒计时\u编号>=1:
海龟之家
海龟。左(270)
乌龟
乌龟。速度(0)
对于范围内的(0100,5):
乌龟前进(1)
乌龟。颜色(“灰色”+str(33;))
乌龟。写(倒计时数字,align=“center”,font=(“Arial”,200,“normal”))
如果倒计时\u编号==0:
倒计时\u number=“开始!”
海龟之家
海龟。左(270)
乌龟
乌龟。速度(0)
对于范围内的(0100,5):
乌龟前进(1)
乌龟。颜色(“灰色”+str(33;))
乌龟。写(倒计时数字,align=“center”,font=(“Arial”,200,“normal”))
乌龟
#打印(数字)
def gameover(味精):
打印(msg)#稍后可能会对此进行评论
海龟之家
write(msg,align=“center”,font=(“Arial”,24,“normal”))
def moveplayerturtle(x,y):
如果x>-window\u width/2和x=窗口高度-200:
upper_river_border.sety(upper_river_border.ycor()-river_width_update)
如果下游河流边界.ycor()(窗口宽度+敌人宽度)/2:
x=-(窗口宽度+敌人宽度)/2
y=int(turtle.ycor())
敌人[i].goto(x,y)
s=1
敌方速度[i]=int(随机范围(10+s,20+s))
如果距离(敌人[i])<与敌人的安全距离:
游戏结束(“你输了!”)
返回
ontimer(updatescreen,update\u interval)
tutle.update()
设置(窗口宽度、窗口高度)#设置窗口大小
turtle.bgcolor(“深蓝色”)
海龟追踪器(假)
上游河流边界=海龟。海龟()
上_河_边界。向上()
下游河流边界=海龟。海龟()
下(河)上()
上_河_边界。形状(“方形”)
下_河_边界。形状(“方形”)
上_河_边界颜色(“DarkOrange4”)
下_河_边界颜色(“DarkOrange4”)
上_河_边界。形状尺寸(30,40)
下_河_边界。形状尺寸(30,40)
上游河流边界。sety((边界高度+河流宽度)/2)
下游河流边界。sety(-(边界高度+河流宽度)/2)
海龟.addshape(“鳄鱼.gif”)
对于范围内的(敌人的数量):
敌人=乌龟
海龟.addshape(“鳄鱼.gif”)
敌方形状(“鳄鱼”gif)
敌人
x=-(窗口宽度+敌人宽度)/2
y=random.randint(-(河流宽度-敌人高度)/2,(河流宽度-敌人高度)/2)
敌人。后藤(x,y)
敌人。附加(敌人)
敌方速度。附加(随机。随机(敌方速度最小,敌方速度最大))
海龟形状(“海龟”)
乌龟。左(180)
海龟。颜色(“绿黄色”)
乌龟
乌龟,乌龟
ontimer(updatescreen,update\u interval)
乌龟
当我把倒计时作为自己的程序来编写时,我已经让它自己工作得非常好了,所以我认为它一定是从倒计时序列过渡到游戏循环本身造成了问题
如果有任何帮助,我们将不胜感激。在启动屏幕倒计时时,您的电话线已经接通——在错误的时间拨打错误的电话。下面是我对最小修复的建议。首先,重新定义
startgame()
,如下所示:
def startgame():
global countdown_number
turtle.home()
turtle.clear()
turtle.left(270)
if countdown_number > 0:
for grey in range(0, 100, 5):
turtle.forward(1)
turtle.color("grey" + str(grey))
turtle.write(countdown_number, align="center", font=("Arial", 200, "normal"))
countdown_number -= 1
turtle.ontimer(startgame, countdown_interval)
else:
for grey in range(0, 100, 5):
turtle.forward(1)
turtle.color("grey" + str(grey))
turtle.write("GO!", align="center", font=("Arial", 200, "normal"))
turtle.clear()
turtle.ontimer(updatescreen, countdown_interval)
接下来是一些小改动,以适应这次重写。在代码顶部,添加以下定义:
countdown_interval = 1000
在更新间隔的定义附近
在代码的底部,而不是:
turtle.ontimer(updatescreen, update_interval)
turtle.done()
这样做:
turtle.ontimer(startgame, update_interval)
turtle.done()
最后,在updatescreen()
中删除所有处理倒计时\u编号的代码:
global countdown_number
if countdown_number != "GO!":
startgame()
if countdown_number == "GO!":
并根据需要重新启用此功能的主体
应该这样做。躲闪愉快