9. 구현 : 게임 개발

2021. 11. 15. 23:14파이썬/알고리즘

1 * 1의 정사각형으로 이루어진 n * m 의 직사각형 맵.

rule :

1. 현재 위치에서 현재 방향을 기준으로 왼쪽 방향부터 차례대로 갈 곳을 정함.

2. 캐릭터가 왼쪽 방향에 아직 가보지 않은 칸이 존재한다면 왼쪽으로 회전하고 한 칸 전진.

3. 네 방향 모두 가본 칸이거나 바다로 되어 있는 칸인 경우 방향을 유지한채 뒤로 한 칸. 이 때 뒤가 바다인 칸이면 움직임 멈춤.

 

n,m = map(int,input().split())
x,y,direction = map(int,input().split())

d = [[0]*m for _ in range(n)]

d[x][y] =1 

array = []
for i in range(n):
  array.append(list(map(int,input().split())))

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

def turn_left():
  global direction
  direction -= 1
  if direction == -1:
    direction = 3


count = 1
turn_time = 0

while True:
  turn_left()
  nx = x + dx[direction]
  ny = y + dy[direction]

  if d[nx][ny] == 0 and array[nx][ny] == 0:
    d[nx][ny] = 1
    x = nx
    y = ny
    count += 1
    turn_time = 0
    continue
  else:
    turn_time += 1

  if turn_time == 4:
    nx = x - dx[direction]
    ny = y - dy[direction]

    if array[nx][ny] == 0:
      x = nx
      y = ny
    else:
      break
    turn_time = 0

print(array)
print(d)
print(count)

 우선 함수로 하는 것과 2차원 리스트를 두 개 만들어 활용한 것. (구현이 더욱 편해짐). 그리고 turn left를 언제 0으로 만들지가 많이 헷갈린 것 같다..! 일단 내용대로 구현하는 힘을 키우자!

반응형

'파이썬 > 알고리즘' 카테고리의 다른 글

11. DFS/BFS : 음료수 얼려 먹기  (0) 2021.11.16
10. DFS/BFS : 문제 풀이 전략  (0) 2021.11.16
8. 구현 : 체스 나이트의 경우의 수  (0) 2021.11.14
7. 구현 : 시각  (0) 2021.11.14
6. 구현 : 상하좌우 움직이기  (0) 2021.11.13