[東賓書]実施-ゲーム開発


問題の説明
IN

  • 地図の垂直サイズN、地図の水平サイズM

  • ゲームキャラクタの座標と方向
    →方向:北0洞1南2西3

  • 地図が陸なのか海なのかについて
    →0:陸地、1:海
  • OUT
  • 移動後のキャラクタアクセスの格子数
  • 質問する

  • NMサイズのマッピング(11サイズの正方形からなる)でキャラクタを移動

  • 各格子は海洋または陸地からなり、海洋が通過する回数x

  • 移動の条件は

  • [左から右へ](From Left to Right)現在の方向にスペースを表示
    1.1左側がドアxですか?
    :左に回転して左に1マス移動
    1.2左側がドアですo
    :左のみ回転、x移動

  • 四方向に行ったことがある格/4面が海なら
    :1つ後退し、後ろが海の場合は終了
  • に答える
    def solution():
        N, M = map(int, input().split())
        pos = list(map(int, input().split()))
        map_info = []
        dx = [0, 1, 0, -1]
        dy = [-1, 0, 1, 0]
        dir_count = 0
        count = 1
    
        for i in range(N):
            arr = list(map(int, input().split()))
            map_info.append(arr)
        map_info[pos[0]][pos[1]] = 2
        
        while True:
            if dir_count > 4:
                back = (pos[2]+2) % 4
                pos[1] += dx[back]
                pos[0] += dy[back]
                if map_info[pos[0]][pos[1]] == 1:
                    break
                else:
                    dir_count = 0
            #바라보는 방향 기준 왼쪽을 방문했는지 ? 
            left = (pos[2]+3)%4
            if map_info[pos[0]+dy[left]][pos[1]+dx[left]] == 0:
                #왼쪽 방문한적 없음
                pos[2] = left
                pos[1] += dx[pos[2]]
                pos[0] += dy[pos[2]]
                map_info[pos[0]][pos[1]] = 2
                count += 1
                dir_count = 0
                
            else:
                pos[2] = left
                dir_count += 1
                
            print("pos: ", pos, " count: ", dir_count)
            print(map_info)
    
        return count   
    
    print(solution())

  • 陸地は0,海洋は1,訪問した陸地は2
    →最初にも訪問したことがあるので、初期に2に設定します!!

  • 左に回転→(現在位置+3)%4

  • 後退→(pos[2]+2)%4