使用Python turtle图形实现视频游戏时遇到的问题
基本上,我正在尝试使用Python的turtle模块创建一个两人游戏。底部有两只海龟是玩家,顶部有两个圆圈作为检查站。一只乌龟应该在两个检查站之间来回,这只乌龟就是目标。底部的海龟向目标打圆圈 我的问题:使用Python turtle图形实现视频游戏时遇到的问题,python,turtle-graphics,Python,Turtle Graphics,基本上,我正在尝试使用Python的turtle模块创建一个两人游戏。底部有两只海龟是玩家,顶部有两个圆圈作为检查站。一只乌龟应该在两个检查站之间来回,这只乌龟就是目标。底部的海龟向目标打圆圈 我的问题: 目标海龟移动得太快了 底部乌龟的子弹从屏幕中央射出 注意:代码的某些部分可能令人困惑和/或不需要 代码如下: from turtle import* import math def k1():#Enemy Key Commands enemy.left(90) enemy
- 目标海龟移动得太快了
- 底部乌龟的子弹从屏幕中央射出
from turtle import*
import math
def k1():#Enemy Key Commands
enemy.left(90)
enemy.forward(10)
enemy.right(90)
def k2():
enemy.left(90)
enemy.backward(10)
enemy.right(90)
def k3():#Yertle Key Commands
yertle.left(90)
yertle.forward(10)
yertle.right(90)
def k4():
yertle.left(90)
yertle.backward(10)
yertle.right(90)
def k5():
a=bullet_red()
a.speed(10)
a.forward(400)
collision= math.sqrt(math.pow(a.xcor()-yertle.xcor(),2)+math.pow(a.ycor()-yertle.ycor(),2))
if(collision<10):
text=enemy.write("Game Over", align="center" , font=("Arial", 16, "normal"))
a.hideturtle()
def k6():
a=bullet_blue()
a.speed(10)
a.forward(400)
collision= math.sqrt(math.pow(a.xcor()-yertle.xcor(),2)+math.pow(a.ycor()-yertle.ycor(),2))
if(collision<10):
text=enemy.write("Game Over", align="center" , font=("Arial", 16, "normal"))
a.hideturtle()
def collision(a, b):
collision= math.sqrt(math.pow(a.xcor()-b.xcor(),2)+math.pow(a.ycor()-b.ycor(),2))
if(collision<5):
print("Bottom Player Wins")
print("Game Over")
def bullet_red():
bullet=Turtle("circle")#Description For Bullet
bullet.color("red")
bullet.penup()
bullet.goto(enemy.pos())
bullet.setheading(180)
bullet.right(90)
return bullet
def bullet_blue():
bullet=Turtle("circle")#Description For Bullet
bullet.color("blue")
bullet.penup()
bullet.goto(yertle.pos())
bullet.setheading(180)
bullet.right(90)
return bullet
ops = Screen()
ops.setup(500, 500)
ops.onkey(k1, "a")#Enemy
ops.onkey(k2, "d")#Enemy
ops.onkey(k3, "Left")#Yertle
ops.onkey(k4, "Right")#Yertle
ops.onkey(k5, "w")#Shoot(Enemy)
ops.onkey(k6, "Up")#Shoot(Enemy)
ops.listen()
checkpoint_1=Turtle(shape="circle")#Turtle Description for Checkpoint 1
checkpoint_1.color("red")
checkpoint_1.setheading(180)
checkpoint_1.right(90)
checkpoint_1.penup()
checkpoint_1.setx(-220)
checkpoint_1.sety(230)
checkpoint_1.speed(0)
#_____________________________
checkpoint_2=Turtle(shape="circle")#Turtle Description for Checkpoint 2
checkpoint_2.color("red")
checkpoint_2.setheading(180)
checkpoint_2.right(90)
checkpoint_2.penup()
checkpoint_2.setx(220)
checkpoint_2.sety(230)
checkpoint_2.speed(0)
#____________________________
runner=Turtle(shape="turtle")#Turtle Description for Checkpoint 2
runner.color("yellow")
while(runner!=collision):
runner.penup()
runner.goto(checkpoint_1.pos())
runner.goto(checkpoint_2.pos())
runner.speed(0)
#_____________________________
enemy=Turtle(shape="turtle")#Turtle Description for Player 1
enemy.color("red")
enemy.setheading(180)
enemy.right(90)
enemy.penup()
enemy.setx(-20)
enemy.sety(-200)
enemy.speed(0)
#_____________________________
yertle = Turtle(shape="turtle")#Turtle Description for Player 2
yertle.color("blue")
yertle.setheading(180)
yertle.right(90)
yertle.penup()
yertle.setx(20)
yertle.sety(-200)
yertle.speed(0)
#_____________________________
从海龟导入*
输入数学
def k1():#敌人的关键命令
敌人,左(90)
敌人,前进(10)
敌人,对(90)
def k2():
敌人,左(90)
敌后(10)
敌人,对(90)
def k3():#Yertle键命令
耶特尔左(90)
耶特尔向前(10)
耶特尔。右(90)
def k4():
耶特尔左(90)
耶特尔向后(10)
耶特尔。右(90)
def k5():
a=子弹头红色()
a、 速度(10)
a、 前进(400)
collision=math.sqrt(math.pow(a.xcor()-yertle.xcor(),2)+math.pow(a.ycor()-yertle.ycor(),2))
如果下面(collision是我对你的代码的修改,让它基本上可以玩游戏——它仍然需要工作才能成为一个完整的程序
from turtle import Turtle, Screen
FONT = ("Arial", 32, "bold")
def k1(): # Enemy Key Commands
enemy.backward(10)
def k2():
enemy.forward(10)
def k3(): # Yertle Key Commands
yertle.backward(10)
def k4():
yertle.forward(10)
def k5(): # enemy shoot
bullet.color("red")
bullet.goto(enemy.position())
bullet.showturtle()
bullet.forward(430)
if bullet.distance(runner) < 10:
magic_marker.write("Game Over", align="center", font=FONT)
bullet.hideturtle()
def k6(): # yertle shoot
bullet.color("blue")
bullet.goto(yertle.position())
bullet.showturtle()
bullet.forward(430)
if bullet.distance(runner) < 10:
magic_marker.write("Game Over", align="center", font=FONT)
bullet.hideturtle()
def move_runner():
if runner.distance(checkpoint_1) < 5 or runner.distance(checkpoint_2) < 5:
runner.left(180)
runner.forward(2)
screen.ontimer(move_runner, 50)
screen = Screen()
screen.setup(500, 500)
bullet = Turtle("circle", visible=False) # Description For Bullet
bullet.speed('normal')
bullet.penup()
bullet.setheading(90)
checkpoint_1 = Turtle("circle", visible=False) # Turtle Description for Checkpoint 1
checkpoint_1.color("red")
checkpoint_1.penup()
checkpoint_1.goto(-220, 230)
checkpoint_2 = checkpoint_1.clone() # Turtle Description for Checkpoint 2
checkpoint_2.goto(220, 230)
runner = Turtle("turtle", visible=False)
runner.color("orange")
runner.speed('fastest')
runner.penup()
runner.sety(230)
yertle = Turtle(shape="turtle", visible=False) # Turtle Description for Player 1
yertle.tiltangle(90) # face one way but move another!
yertle.speed('fastest')
yertle.penup()
yertle.color("blue")
yertle.goto(20, -200)
enemy = yertle.clone() # Turtle Description for Player 2
enemy.color("red")
enemy.goto(-20, -200)
checkpoint_1.showturtle()
checkpoint_2.showturtle()
runner.showturtle()
yertle.showturtle()
enemy.showturtle()
magic_marker = Turtle(visible=False) # for writing text
screen.onkey(k1, "a") # Enemy
screen.onkey(k2, "d") # Enemy
screen.onkey(k3, "Left") # Yertle
screen.onkey(k4, "Right") # Yertle
screen.onkey(k5, "w") # Shoot(Enemy)
screen.onkey(k6, "Up") # Shoot(Yertle)
screen.listen()
move_runner()
screen.mainloop()
从海龟导入海龟,屏幕
字体=(“Arial”,32,“粗体”)
def k1():#敌人的关键命令
敌后(10)
def k2():
敌人,前进(10)
def k3():#Yertle键命令
耶特尔向后(10)
def k4():
耶特尔向前(10)
def k5():#敌人射击
项目符号颜色(“红色”)
bullet.goto(敌人位置())
bullet.showturtle()
子弹,前进(430)
如果子弹距离(滑道)<10:
魔术标记。书写(“游戏结束”,align=“center”,font=font)
子弹
def k6():#耶特尔射击
项目符号。颜色(“蓝色”)
bullet.goto(yertle.position())
bullet.showturtle()
子弹,前进(430)
如果子弹距离(滑道)<10:
魔术标记。书写(“游戏结束”,align=“center”,font=font)
子弹
def move_runner():
如果流道距离(检查点_1)<5或流道距离(检查点_2)<5:
左(180)
亚军、前锋(2)
屏幕时间(移动时间,50)
screen=screen()
屏幕设置(500500)
子弹=乌龟(“圆圈”,可见=假)#子弹说明
子弹速度(“正常”)
bullet.penup()
项目符号.设置标题(90)
检查点_1=乌龟(“圆圈”,可见=假)#检查点1的乌龟描述
检查点1.颜色(“红色”)
检查点_1.penup()
检查点1.转到(-220230)
checkpoint_2=checkpoint_1.clone()#检查点2的说明
检查站2.后藤(220230)
跑步者=乌龟(“乌龟”,可见=假)
跑步者颜色(“橙色”)
跑步者速度(“最快”)
亚军
赛蒂(230)
耶特尔=乌龟(shape=“Turtle”,visible=False)#玩家1的乌龟描述
yertle.倾斜角(90)#面向一个方向,但移动另一个方向!
耶特尔速度(“最快”)
耶特尔·彭普
耶特尔颜色(“蓝色”)
耶特尔.后藤(20,-200)
敌人=yertle.clone()#玩家2的海龟描述
敌人。颜色(“红色”)
敌人。转到(-20,-200)
检查点_1.showturtle()
检查点_2.showturtle()
跑者
yertle.showtull()
敌人
魔术标记=乌龟(可见=假)#用于书写文本
屏幕。按键(k1,“a”)#敌人
屏幕。按键(k2,“d”)#敌人
屏幕显示键(k3,“左”)#耶特尔
screen.onkey(k4,“右”)#Yertle
屏幕。开键(k5,“w”)#射击(敌人)
screen.onkey(k6,“Up”)#Shoot(Yertle)
screen.listen()
move_runner()
screen.mainloop()
你的代码有错误(你的评论也有),但我的主要建议是查看海龟文档,看看你可以使用的所有功能——在编写游戏时,你需要知道海龟能做什么
我把子弹改成了一个共享的子弹——海龟在你用完它们后不会消失,所以这看起来更明智。但是它也有缺陷。如果你继续使用一个子弹模型,你会想要联锁发射事件以防止重叠。如果你改为使用多个子弹同时发射,你会发现'我想添加更多的ontimer
事件,比如runner
用来控制它们的运动