我正在尝试用Python龟制作游戏。我知道这不是它的用途,但我认为这很有趣。在我的游戏中我有一条“河流”,我不希望玩家能够穿过,除非他们越过桥梁,所以我试图让它们如果他们试图越过河流就回到起点没有使用桥梁。多次尝试后,我只是不知道该怎么做。 这是我的代码:
import turtle
import random
import time
wn = turtle.Screen()
layout = turtle.Turtle()
layout.speed(100)
layout.up()
wn.bgcolor("lightgreen")
def drawTree(t, sd):
for i in range(4):
layout.down()
t.forward(sd)
t.right(90)
layout.up()
def drawRiver():
for i in range(2):
print(layout.pos()[0])
print(layout.pos()[1])
layout.color("darkblue")
layout.fillcolor("blue")
layout.begin_fill()
layout.down()
layout.forward(2000)
layout.right(90)
layout.forward(99)
layout.right(90)
layout.forward(4000)
layout.end_fill()
layout.up()
def tree(branchLen,layout):
if branchLen > 6:
layout.down()
layout.forward(branchLen)
layout.right(20)
tree(branchLen-6,layout)
layout.left(40)
tree(branchLen-6,layout)
layout.right(20)
layout.backward(branchLen)
layout.up()
def main():
myWin = turtle.Screen()
layout.left(90)
layout.up()
layout.backward(100)
layout.down()
layout.color("brown")
tree(36,layout)
layout.right(90)
layout.up()
def drawBridge():
layout.goto(50, -120)
layout.down()
layout.color("rosybrown4")
layout.fillcolor("saddlebrown")
layout.begin_fill()
layout.forward(100)
layout.left(90)
layout.forward(150)
layout.left(90)
layout.forward(100)
layout.left(90)
layout.forward(150)
layout.left(90)
layout.up()
layout.end_fill()
layout.goto(150, -118)
layout.left(90)
for i in range(38):
layout.pensize(.1)
layout.down()
layout.color("black")
layout.forward(.1)
layout.left(90)
layout.forward(100)
layout.left(90)
layout.forward(.1)
layout.left(90)
layout.forward(100)
layout.left(90)
layout.up()
layout.forward(4)
layout.up()
layout.right(90)
layout.goto(-799, 0)
drawRiver()
drawBridge()
# Tree locations
layout.goto(222, 198)
main()
layout.goto(-334, 155)
main()
layout.goto(132, 140)
main()
layout.goto(400, -200)
main()
layout.goto(50, -222)
main()
layout.goto(180, -122)
main()
layout.goto(-400, 400)
main()
layout.goto(-332, -332)
main()
layout.goto(-472, 400)
main()
layout.goto(-400, -380)
main()
layout.goto(-362,200)
main()
layout.goto(-222, 198)
main()
layout.goto(-750, -300)
main()
layout.goto(600, -467)
main()
layout.goto(100, 450)
main()
layout.goto(-100, 400)
main()
layout.goto(-600, 400)
main()
layout.goto(500, 123)
main()
layout.goto(700, 400)
main()
layout.goto(350, 350)
main()
layout.color("blue")
layout.goto(0, -50)
Player = turtle.Turtle()
Player.up()
Player.goto(0, -200)
Player.left(90)
def k1():
Player.forward(45)
def k2():
Player.left(30)
def k3():
Player.right(30)
def k4():
Player.back(45)
wn.onkey(k1, "Up")
wn.onkey(k2, "Left")
wn.onkey(k3, "Right")
wn.onkey(k4, "Down")
wn.listen()
答案 0 :(得分:0)
您的代码是一项挑战。
对于这个例子,我扔了你的树和桥板,因为它们对问题没有影响。由于您的河流和桥梁是矩形的,我将它们的绘图包裹在begin_poly()
和end_poly()
组合中,以便我们拥有这些矩形的边界框。然后,对于两个运动命令(向前和向后),我们测试结果运动是否将我们放入河中,而不是桥梁,如果是这样的话,只需goto()
起始位置:
from turtle import Turtle, Screen
def inside(point, rectangle):
x, y = point
# not efficient, just a quick solution
x1 = min(p[0] for p in rectangle)
y1 = min(p[1] for p in rectangle)
x2 = max(p[0] for p in rectangle)
y2 = max(p[1] for p in rectangle)
return x1 < x < x2 and y1 < y < y2
def not_safe(turtle):
position = turtle.position()
return inside(position, river) and not inside(position, bridge)
def drawRiver(turtle):
turtle.color('darkblue', 'blue')
turtle.goto(-WIDTH / 2, 0)
turtle.begin_poly()
turtle.begin_fill()
turtle.forward(WIDTH)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(WIDTH)
turtle.end_fill()
turtle.end_poly()
return turtle.get_poly()
def drawBridge(turtle):
turtle.right(180)
turtle.goto(50, -120)
turtle.color('rosybrown4', 'saddlebrown')
turtle.begin_poly()
turtle.begin_fill()
turtle.forward(100)
turtle.left(90)
turtle.forward(150)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.end_fill()
turtle.end_poly()
return turtle.get_poly()
wn = Screen()
wn.bgcolor('lightgreen')
WIDTH = wn.window_width()
layout = Turtle(visible=False)
layout.speed('fastest')
layout.penup()
river = drawRiver(layout)
bridge = drawBridge(layout)
player = Turtle('turtle')
player.penup()
player.goto(0, -200)
player.setheading(90)
def k1():
player.forward(45)
if not_safe(player):
player.goto(0, -200)
player.setheading(90)
def k2():
player.back(45)
if not_safe(player):
player.goto(0, -200)
player.setheading(90)
def k3():
player.left(30)
def k4():
player.right(30)
wn.onkey(k1, 'Up')
wn.onkey(k2, 'Down')
wn.onkey(k3, 'Left')
wn.onkey(k4, 'Right')
wn.listen()
wn.mainloop()