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 |