2015-01-22 5 views
-1

현재 iPython notbook으로 작성중인 미로 게임을하고 있습니다. 나는 파이 게임에 접근 할 수 없기 때문에 처음부터 콜리 션 탐지를하고있다.Python에서 충돌 감지

내가 지금까지 가지고있는 코드는 플레이어를 움직일 수 있으며 이미 플레이 필드의 크기가 큰 표가 있습니다.

from turtle import * 

def line(x1, y1, x2, y2): 
    pu() 
    goto(x1,y1) 
    pd() 
    goto(x2,y2) 
    pu() 


setup(600,600) 
setworldcoordinates(-1,-1,11,11) 

class Network: 

tracer(30) 
ht() 
for n in range(0,11): 
    line(0,n,10,n) 
    line(n,0,n,10) 

tracer(1) 

head= heading() 

st() 

class Figur: 

register_shape("figur.gif") 
shape("figur.gif") 

head = heading() 
pu() 
setpos(9.5,9.5) 

def turtle_up(): 
    if head != 90: 
     seth(90) 
     fd(1) 

def turtle_down(): 
    if head != 270: 
     seth(270) 
     fd(1) 

def turtle_left(): 
    if head != 180: 
     seth(180) 
     fd(1) 

def turtle_right(): 
    if head != 360: 
     seth(0) 
     fd(1) 

onkey(turtle_up, "Up") 
onkey(turtle_down, "Down") 
onkey(turtle_left, "Left") 
onkey(turtle_right, "Right") 

listen() 

class Walls: 

    def tortle(): 
     tracer(30) 
     t1 = Turtle() 
     t1.color("green") 
     t1.left(180) 
     t1.fd(1) 
     t1.right(90) 
     t1.fd(11) 
    for i in range(1,4): 
     t1.right(90) 
     t1.fd(12) 
    for i in range(1,3): 
     t1.right(90) 
     t1.fd(1) 
    t1.left(90) 
    for i in range(1,5): 
     t1.fd(10) 
     t1.right(90) 

Walls.tortle() 
tracer(1) 

update() 
done() 

현재 벽은 거의 완료되지 않았습니다. 나는 이제 막 시작했고 경기장 주변에 벽을 만들어 녹색으로 덮인 구멍 지역을 만들려고했습니다. 거북이의 그림은 내가 직접 만든 것입니다.하지만 거북이가 없으면 효과가 있으며 거북이를 대신 먹어야한다고 생각합니다.

그래서 내 거북이는 벽을 통과 할 수 없도록 내 거북이에 대한 콜리 션 탐지를 어떻게 만드나요?

+0

확인, -1 즉시. 누군가이 게시물에 내가 잘못한 것을 설명 할 수 있습니까? – Martin

답변

0

나는 이미 의 Vec2D을 이미 방문한 포인트로 생각하고 이동할 때마다 그 포인트를 비교할 것입니다. 여기에 앞으로 뒤로 간단한있어이 작동 :

def no_collision_forward(amount, walls): 
    movement = 1 if abs(amount) == amount else -1 # If amount is negative, moving down 
    for i in range(abs(amount)): 
     cur_pos = pos() 
     nex_pos = Vec2D(cur_pos[0], cur_pos[1] + movement) 
     if nex_pos in walls: 
      return # Can return whatever 
     else: 
      forward(movement) 

def no_collision_backward(amount, walls): 
    return no_collision_forward(-amount, walls) 

visited_locationsVec2D s 또는 튜플의 집합이어야한다.

이것은 아마도 가장 효율적인 해결책은 아니지만 작동합니다!