[python] 게임 개발

전.py / / 2022. 7. 8. 14:33
728x90

- 1 x 1 크기읮 ㅓㅇ사각형으로 이뤄진 N x M 크기의 직사각형

- 각 칸은 육지 or 바다

- 캐릭터는 동서남북 중 한 곳 바라봄

- 각 칸은 (A, B) 로 나타냄

- A는 북쪽으로부터 떨어진 칸의 개수

- B는 서쪽으로부터 떨어진 칸의 개수

- 캐릭터는 상하좌우로 움직일 수 있음

- 바다로 되어 있는 공간에는 갈 수 없음

< 매뉴얼 >

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

2-1) 왼쪽 방향에 아직 가보지 않은 칸 존재하면, 왼쪽 방향으로 회전한 후 왼쪽으로 한 칸 전진

2-2) 왼쪽 방향에 가보지 않은 칸 없으면, 왼쪽 방향으로 회전한 후 1)로 돌아감

3) 네 방향 모두 이미 가본 칸 or 바다로 되어 있는 칸이면, 바라보는 방향 유지한 채로 한 칸 뒤로 가고 1)로 돌아감

뒤쪽 방향이 바다 칸인 경우 움직임 멈춤

=> 캐릭터가 방문한 칸의 수 출력

 

- A, B 좌표와 방향 d 입력 받음

- d는 0(북쪽), 1(동쪽), 2(남쪽), 3(서쪽)

- 맴이 육지인지 바다인지에 대한 정보 입력

- 0(육지), 1(바다)

 

 

# 맵 크기 입력
n, m = map(int, input().split())

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

# 현재 좌표, 방향 입력
x, y, direction = map(int, input().split())
d[x][y] = 1

data = []
for i in range(n):
    data.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
        
cnt = 1
turn_time = 0
while True:
    # 왼쪽으로 회전
    turn_left()
    nx = x + dx[direction]
    ny = y + dy[direction]
    
    # 가보지 않은 칸이 존재하는 경우 => 이동
    if d[nx][ny] == 0 and data[nx][ny] == 0:
        d[nx][ny] = 1
        x = nx
        y = ny
        cnt += 1
        turn_time = 0
        continue
    
    # 가보지 않은 칸이 없구나 바다인 경우
    else:
        turn_time += 1
    
    # 네 방향 모두 갈 수 없는 경우
    if turn_time == 4:
        nx = x - dx[direction]
        ny = y - dy[direction]
        
        # 뒤로 갈 수 있으면 이동
        if data[nx][ny] == 0:
            x = nx
            y = ny
        # 뒤가 바다이면
        else:
            break
        turn_time = 0
print(cnt)

반응형

'전.py' 카테고리의 다른 글

[python] DFS & BFS  (0) 2022.07.08
[python] 팩토리얼  (0) 2022.07.08
[python] 왕실의 나이트  (0) 2022.07.07
[python] 시각  (0) 2022.07.07
[python] 상하좌우  (0) 2022.07.07
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기