2017-11-15 6 views
0

私はPython turtleでゲームを作ろうとしています。それが何のために作られたのか分からないが、それは楽しいと思った。私は自分の試合で「川」を持っているので、橋を渡らなければ選手が交差できないようにしたいので、川を越えようとするとスタートに戻るようにしています橋を使わずに。私は複数の試みの後でこれを行う方法を知りません。境界線外にある壁を作る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

あなたのコードはで動作するように挑戦です: はここに私のコードです。

この例では、問題に影響しないので、私はあなたの木と橋の厚板を投げました。あなたの川と橋は長方形なので、図形をbegin_poly()end_poly()の組み合わせで囲んで、それらの長方形の境界ボックスを持っています。その後、2つの移動コマンド(前後)のために、私たちは、結果動きが川で私たちを置くではなく、ブリッジを、単に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() 

enter image description here

+0

さて、あなたのコードとコード全体を混在させることはできますか?それらを組み合わせることは本当に難しいです。 –