gpt로 사천성 게임 만들기

원본 링크 : https://suave-spirit-02a.notion.site/chatgpt-d3eee09653254b7193f69c8c5294da1a?pvs=4

최종본 코드 :

GitHub - MuYoul/sichuan: chat_gpt를 사용한 게임 만들기

데모 링크 : https://asciinema.org/a/JwDenjkXcFTnX2c7Q1CK0Pp12


요약본

해당 작업은 1시간 미만으로 완료되었으며, 최종 코드 리뷰는 생략되었습니다. 코드 검토 과정에서 문제가 발견되지 않았으나 버그가 존재하였고, 일부 수정이 이루어졌습니다. 역할 분배에 있어 Q와 C의 차이가 미비하여 효과에 의문이 생겼습니다. GPT는 발전 가능성이 있는 신규 개발 도구로 평가되었으나, 결정적인 부분에서 부족함이 있었습니다. 이 부분은 올바른 요구 사항 전달의 실패로 인한 것으로 판단되었으며, 앞으로 실제 시장에 배포 가능한 프로그램 작성을 계획하고 있습니다.

목표

chatgpt를 사용하여 큰 노력을 들이지 않고 실제 구동하는 게임을 만드는 것이 목표입니다


배경 지식

필수 사항

  • chatgpt에 대한 이해 및 사용법

  • python 사용법 및 구동법

권장 사항

  • 일반적인 개발에 필요한 지식

    • tools, cli, debug, …

문서 작성자 배경 사항

  • 핸드폰용 모바일 게임 출시 경험이 다수 있음

  • 실제 업무에서 사용해본 언어 : pascal, c/c++, java, python

  • IT 경력 : 20년차


본문

AI를 역할별로 나눠서 각자 할일을 수행합니다

  1. Architector: 알고리즘 방법론을 구축하는 ai 및 쉐도 코드 작성하는 역할

  2. Coder: 쉐도 코드를 실제 구동하는 코드를 생성하는 역할

  3. Quility Tester: 작성된 코드의 테스트 코드와 오류를 찾고 디버깅하는 역할 - copilot x

공통 파트

우리는 사천성 게임을 만드는 chatgpt 팀이야
팀원은 총 3명이 있어
팀원 A는 사천성에서 수행할 주요 알고리즘을 작성하는 역할을 수행해.
팀원 C는 A가 생성한 알고리즘을 코드화 시키는 역할을 수행해
팀원 Q는 C가 작성한 코드를 테스트하고 더 완벽한 코드를 만드는 역할을 수행해.

알고리즘 테스트하는 AI

너의 역할은 A야.
게임에서 사용되는 알고리즘을 작성하는 역할이야
간단한 알고리즘 설명과 함께 쉐도 코드를 작성해줘
쉐도 코드는 팀원 C를 사용해서 실행되는 코드로 만들꺼야. 
그러니깐 C가 코드를 작성할 수 있도록 프롬프트로 만들어줘.

쉐도 코드를 실제 구현체로 만드는 역할

너의 역할은 C야.
입력받은 쉐도 코드를 python으로 작성해줘
각 함수는 가능한 100라인을 넘지 않도록 작성해줘
주요 기능별 함수를 분리해서 만들어줘

만들어진 코드는 팀원 Q에게 테스트코드 생성 및 디버깅을 부탁할꺼야
그러니깐 생성된 코드를 테스트할 수 있도록 팀원 Q에게 전달할 수 있는 프롬프트를 생성해줘

테스트 코드 작성 및 디버깅하는 역할


너의 역할은 Q야.

너는 입력받은 코드를 전문적으로 테스트하고 문제점을 찾는 전문가야
입력받은 코드의 테스트 코드를 작성해줘

각 테스트 함수가 무엇을 테스트 하려는지 주석으로 설명을 달고 테스트 코드를 작성해줘
테스트가 실패할 경우 어떻게 수정해야하는지 수정 사항을 알려줘.
수정 사항은 팀원 C에게 알려줄꺼야. 그러므로 수정 사항은 프롬프트로 작성해줘


to A

게임 보드는 10x10으로 할꺼야
사용될 카드 종류는 3종류야
더 이상 매칭할 수 잇는 타일이없으면 게임오버야
text기반으로 출력할꺼야.

타일 정보를 읽어서 매칭이 가능한 타일을 찾아내서 1초마다 이를 수행할 것이야
1초마다 화면 전체를 지우고 전체 보드를 다시 그릴 것이야
  • from A

    네, 지정된 요구사항에 따라 알고리즘 설명과 그림자 코드를 업데이트했습니다.
    
    ### 알고리즘 설명:
    1. **보드 초기화**: 10x10 보드를 생성하고 3 종류의 카드를 쌍으로 배열합니다.
    2. **유효한 이동 확인**: 매칭 가능한 타일을 찾아내어 매칭을 수행합니다.
    3. **타일 매칭 및 제거**: 매칭 가능한 타일을 찾으면 보드에서 제거합니다.
    4. **게임 오버 확인**: 더 이상 매칭할 수 있는 타일이 없으면 게임 오버입니다.
    5. **화면 갱신**: 1초마다 화면 전체를 지우고 전체 보드를 다시 그립니다.
    
    ### 그림자 코드:
    
    ```plaintext
    class SichuanGame:
        def initialize_board(self):
            # TODO: C should implement the logic to create a 10x10 game board with 3 types of paired tiles.
    
        def find_and_match_tiles(self):
            # TODO: C should implement the logic to find matching tiles and remove them from the board.
    
        def check_game_over(self):
            # TODO: C should implement the logic to check if there are no more matching tiles and end the game if true.
    
        def draw_board(self):
            # TODO: C should implement the logic to clear the screen and redraw the entire 10x10 board every second.
    
        def start_game(self):
            # TODO: C should implement the main game loop, calling the above methods as needed.
    

    이 코드는 C 팀원에게 프롬프트로 제공되어 세부 구현을 완성할 수 있게 됩니다.

    
    
    
각 클래스 매소드에 해당하는 알고리즘은 더 채워넣어줘.
어떤 코드를 작성해야하는 각 메소드마다 더 자세하게 써줘
  • from A

    물론이죠! 각 클래스 메소드에 대한 보다 자세한 알고리즘 설명을 제공하겠습니다.
    
    ### 알고리즘 설명:
    
    1. **보드 초기화**: 10x10 보드를 생성하고 3 종류의 카드를 쌍으로 배열합니다.
        - 10x10 배열 생성
        - 3 종류의 타일로 총 15쌍(나머지 타일은 비워둠) 랜덤 배치
    
    2. **타일 찾기 및 매칭**: 매칭 가능한 타일을 찾아내어 매칭을 수행합니다.
        - 타일의 쌍을 찾는 알고리즘 구현
        - 쌍을 찾으면 해당 타일을 보드에서 제거
        - 매 초마다 이 과정 반복
    
    3. **게임 오버 확인**: 더 이상 매칭할 수 있는 타일이 없으면 게임 오버입니다.
        - 모든 타일을 순회하면서 가능한 쌍이 있는지 확인
        - 없으면 게임 종료 메시지 출력
    
    4. **화면 갱신**: 1초마다 화면 전체를 지우고 전체 보드를 다시 그립니다.
        - 기존 보드 지우기
        - 현재 보드 상태 출력
    
    ### 그림자 코드:
    
    ```plaintext
    class SichuanGame:
        def initialize_board(self):
            # Create a 10x10 grid.
            # Randomly place 15 pairs of 3 types of tiles.
            # Leave the rest of the tiles empty.
    
        def find_and_match_tiles(self):
            # Loop through the tiles to find a matching pair.
            # If a pair is found, remove them from the board.
            # Repeat this process every second.
    
        def check_game_over(self):
            # Loop through all tiles to check if there are any possible matches.
            # If not, print a game over message and exit the game.
    
        def draw_board(self):
            # Clear the existing console screen.
            # Print the current state of the 10x10 board, including all remaining tiles.
    
        def start_game(self):
            # Implement the main game loop, utilizing the above methods.
            # This should manage the game flow, including initialization, drawing, matching, and checking game over.
    

    이 설명과 코드는 C 팀원이 각 메소드에 필요한 세부 로직을 구현하는 데 도움이 될 것입니다.

    
    
    

코드를 받은 후 C에게 간다

to C

A에게 받은 코드야.
이를 파이썬으로 구현해줘

  • from C

    A 팀원님의 설계를 바탕으로 파이썬 코드로 변환하겠습니다. 주어진 설명을 바탕으로 기능을 구현하겠으나, 일부 세부 사항이 누락되어 있을 수 있으므로 팀원 Q에게 테스트와 디버깅을 요청하는 것이 좋을 것 같습니다.
    
    1. **initialize_board**: 10x10 그리드를 생성하고, 무작위로 15 쌍의 3 종류의 타일을 배치합니다.
    2. **find_and_match_tiles**: 타일을 순회하면서 일치하는 쌍을 찾아 제거합니다. 이 작업을 매 초마다 반복합니다.
    3. **check_game_over**: 모든 타일을 순회하여 가능한 일치가 없으면 게임 오버 메시지를 출력하고 게임을 종료합니다.
    4. **draw_board**: 현재 10x10 보드의 상태를 콘솔 화면에 출력합니다.
    5. **start_game**: 위의 메서드들을 사용하여 게임의 주요 루프를 구현합니다.
    
    ```python
    import random
    import time
    import os
    
    class SichuanGame:
        def initialize_board(self):
            self.board = [[' ' for _ in range(10)] for _ in range(10)]
            tiles = ["A", "B", "C"] * 15
            random.shuffle(tiles)
    
            for tile in tiles:
                x, y = random.randint(0, 9), random.randint(0, 9)
                while self.board[y][x] != ' ':
                    x, y = random.randint(0, 9), random.randint(0, 9)
                self.board[y][x] = tile
    
        def find_and_match_tiles(self):
            for y in range(10):
                for x in range(10):
                    if self.board[y][x] != ' ':
                        # Find a matching pair and remove them
                        # Implement match logic
    
        def check_game_over(self):
            # Implement game over check logic
    
        def draw_board(self):
            os.system('clear' if os.name == 'posix' else 'cls')
            for row in self.board:
                print(' '.join(row))
            print()
    
        def start_game(self):
            self.initialize_board()
            while True:
                self.draw_board()
                self.find_and_match_tiles()
                if self.check_game_over():
                    print("Game Over!")
                    break
                time.sleep(1)
    
    game = SichuanGame()
    game.start_game()
    

    팀원 Q에게 전달할 프롬프트:

    팀원 Q님, 사천성 게임의 파이썬 코드를 작성했습니다. find_and_match_tiles와 check_game_over 함수의 구현이 필요하니, 해당 로직을 완성하고 전체 게임을 테스트해 주세요. 필요한 디버깅 및 수정을 부탁드립니다.
    

    위 코드의 일부 세부 구현은 누락되어 있으므로, 팀원 Q의 도움이 필요합니다.

    
    
    

코드를 받아서 C가 작성해준 프롬프트와 함께 Q에게 간다

to Q

팀원 Q님,

사천성 게임의 파이썬 코드를 작성 완료했습니다. 기본 매칭 로직과 게임 오버 조건을 구현했으나, 게임의 세부 규칙에 따라 추가적인 수정이 필요할 수 있습니다.

아래의 주요 작업을 부탁드립니다:
1. 타일 매칭 규칙에 따른 추가 로직 구현 (필요한 경우)
2. 전체 게임 테스트 및 디버깅
3. 성능과 사용자 경험 개선

코드와 함께 게임의 진행을 최적화하고 사용자에게 더 나은 경험을 제공하는 데 필요한 모든 변경 사항을 적용해 주시길 바랍니다.

감사합니다!
팀원 C
---
코드를 여기에 넣어둔다
---
위 코드를 테스트할 수 있는 파이썬 코드를 작성해줘

  • from Q

    팀원 Q님, 제가 팀원 C로부터 사천성 게임의 일부 파이썬 코드를 받았습니다. `find_and_match_tiles`와 `check_game_over` 함수의 구현이 필요합니다. 아래에 구현과 테스트를 위한 지침을 제시하겠습니다.
    
    ### find_and_match_tiles 함수 구현
    이 함수는 게임 보드에서 같은 타일을 찾아 매칭하고 제거하는 로직을 구현해야 합니다.
    
    1. 보드를 순회하면서 비어 있지 않은 타일을 찾습니다.
    2. 일치하는 다른 타일을 찾아 두 타일을 제거합니다.
    3. 일치하는 타일이 없으면 계속 진행합니다.
    
    ### check_game_over 함수 구현
    이 함수는 게임이 종료되었는지 여부를 확인하는 로직을 구현해야 합니다.
    
    1. 보드를 순회하면서 비어 있지 않은 타일이 있는지 확인합니다.
    2. 비어 있지 않은 타일이 없으면 게임 종료로 판단합니다.
    3. 그렇지 않으면 계속 진행합니다.
    
    ### 테스트 작성
    위의 두 함수를 테스트하기 위한 테스트 코드를 작성해야 합니다. 테스트가 실패할 경우 어떻게 수정해야 하는지에 대한 지침을 포함해 주세요.
    
    ### 코드 수정
    필요한 수정 사항이 발견되면 팀원 C에게 알려줄 수 있는 프롬프트로 작성해 주세요.
    
    감사합니다, 팀원 Q님! 문제나 궁금한 점이 있으시면 언제든지 알려주십시오.
    
팀원 Q는 너의 역할이야. 내 질문에 Q의 입장이 되어서 대답해줘
  • from Q

    물론이죠, 팀원 Q로서 작업을 시작하겠습니다.
    
    ### find_and_match_tiles 함수 구현
    
    ```python
    def find_and_match_tiles(self):
        for y1 in range(10):
            for x1 in range(10):
                tile = self.board[y1][x1]
                if tile != ' ':
                    for y2 in range(10):
                        for x2 in range(10):
                            if (x1, y1) != (x2, y2) and self.board[y2][x2] == tile:
                                self.board[y1][x1] = ' '
                                self.board[y2][x2] = ' '
                                return
    

    check_game_over 함수 구현

    def check_game_over(self):
        for y in range(10):
            for x in range(10):
                if self.board[y][x] != ' ':
                    return False
        return True
    

    테스트 작성

    find_and_match_tiles 함수의 테스트는 다음과 같이 수행할 수 있습니다.

    def test_find_and_match_tiles():
        game = SichuanGame()
        game.initialize_board()
        game.find_and_match_tiles()
        # 여기서 게임 보드의 상태를 검사하여 매칭이 올바르게 이루어졌는지 확인
    

    check_game_over 함수는 다음과 같이 테스트할 수 있습니다.

    def test_check_game_over():
        game = SichuanGame()
        game.initialize_board()
        # 게임 보드의 상태를 특정 조건으로 설정
        assert game.check_game_over() == True  # 또는 False
    

    수정 사항

    • find_and_match_tiles 함수에서 매칭 로직이 복잡하면 더 간결하게 할 수

    
    
    

팀원 C가 코드를 미구현한 뒤 넘겨줬네요. 이를 다시 C에게 넘겨주면서 추가 수정을 요청함

to C

상수로 들어가 있는 부분은 전부 변수 처리로 해줘.
미구현된 코드를 추가로 구현해줘.
  • from C

    물론이죠! 상수를 변수로 변경하고 미구현된 코드를 추가로 작성하겠습니다.
    
    1. **board_size**: 보드의 크기 (10x10)
    2. **tile_types**: 타일 종류 (A, B, C)
    3. **pairs_count**: 쌍의 개수 (15)
    
    미구현된 코드에는 일치하는 타일의 찾기와 제거, 게임 오버 조건 확인 등의 로직이 포함됩니다.
    
    ```python
    import random
    import time
    import os
    
    class SichuanGame:
        def __init__(self, board_size=10, tile_types=["A", "B", "C"], pairs_count=15):
            self.board_size = board_size
            self.tile_types = tile_types
            self.pairs_count = pairs_count
    
        def initialize_board(self):
            self.board = [[' ' for _ in range(self.board_size)] for _ in range(self.board_size)]
            tiles = self.tile_types * self.pairs_count
            random.shuffle(tiles)
    
            for tile in tiles:
                x, y = random.randint(0, self.board_size - 1), random.randint(0, self.board_size - 1)
                while self.board[y][x] != ' ':
                    x, y = random.randint(0, self.board_size - 1), random.randint(0, self.board_size - 1)
                self.board[y][x] = tile
    
        def find_and_match_tiles(self):
            for y in range(self.board_size):
                for x in range(self.board_size):
                    if self.board[y][x] != ' ':
                        # Find matching pair logic
                        for match_y in range(self.board_size):
                            for match_x in range(self.board_size):
                                if (match_y != y or match_x != x) and self.board[match_y][match_x] == self.board[y][x]:
                                    # Matching pair found, remove them
                                    self.board[y][x] = ' '
                                    self.board[match_y][match_x] = ' '
    
        def check_game_over(self):
            for y in range(self.board_size):
                for x in range(self.board_size):
                    if self.board[y][x] != ' ':
                        return False # Tiles still remain, game continues
            return True # No tiles left, game over
    
        def draw_board(self):
            os.system('clear' if os.name == 'posix' else 'cls')
            for row in self.board:
                print(' '.join(row))
            print()
    
        def start_game(self):
            self.initialize_board()
            while True:
                self.draw_board()
                self.find_and_match_tiles()
                if self.check_game_over():
                    print("Game Over!")
                    break
                time.sleep(1)
    
    game = SichuanGame()
    game.start_game()
    

    위 코드는 게임의 기본 로직을 구현합니다. 더 복잡한 매칭 규칙이 필요하다면 추가적인 로직이 필요할 수 있습니다. 팀원 Q에게 테스트와 디버깅을 부탁드리면, 완벽한 코드를 만들 수 있을 것입니다.

    
    
    
Q에게 전달할 프롬프트도 작성해줘
  • from C

    물론이죠! 팀원 Q에게 전달할 프롬프트는 다음과 같습니다:
    
    

    팀원 Q님,

    사천성 게임의 파이썬 코드를 작성 완료했습니다. 기본 매칭 로직과 게임 오버 조건을 구현했으나, 게임의 세부 규칙에 따라 추가적인 수정이 필요할 수 있습니다.

    아래의 주요 작업을 부탁드립니다:

    1. 타일 매칭 규칙에 따른 추가 로직 구현 (필요한 경우)

    2. 전체 게임 테스트 및 디버깅

    3. 성능과 사용자 경험 개선

    코드와 함께 게임의 진행을 최적화하고 사용자에게 더 나은 경험을 제공하는 데 필요한 모든 변경 사항을 적용해 주시길 바랍니다.

    감사합니다! 팀원 C

to Q

팀원 Q님,

사천성 게임의 파이썬 코드를 작성 완료했습니다. 기본 매칭 로직과 게임 오버 조건을 구현했으나, 게임의 세부 규칙에 따라 추가적인 수정이 필요할 수 있습니다.

아래의 주요 작업을 부탁드립니다:
1. 타일 매칭 규칙에 따른 추가 로직 구현 (필요한 경우)
2. 전체 게임 테스트 및 디버깅
3. 성능과 사용자 경험 개선

코드와 함께 게임의 진행을 최적화하고 사용자에게 더 나은 경험을 제공하는 데 필요한 모든 변경 사항을 적용해 주시길 바랍니다.

감사합니다!
팀원 C
  • from Q

    팀원 C님,
    
    사천성 게임 코드를 확인했습니다. 지정된 작업에 따라 다음 단계를 진행하겠습니다.
    
    ### 1. 타일 매칭 규칙에 따른 추가 로직 구현
    현재 코드는 두 타일이 동일하면 즉시 매칭하고 제거하는 로직입니다. 실제 사천성 게임 규칙에 따라 타일이 서로 연결되어 있는지 확인하는 로직을 추가해야 할 수 있습니다. 이 부분은 게임의 세부 규칙에 따라 달라질 수 있으니, 구체적인 요구 사항을 제시해주시면 구현하겠습니다.
    
    ### 2. 전체 게임 테스트 및 디버깅
    전체 게임을 실행해 보고, 사용자 인터페이스, 타일 매칭, 게임 종료 로직 등이 올바르게 작동하는지 확인하겠습니다. 문제가 발생하면 해당 문제를 해결하고 수정 사항을 알려드리겠습니다.
    
    ### 3. 성능과 사용자 경험 개선
    게임 플레이 중 발견되는 성능 이슈나 사용자 경험을 향상시킬 수 있는 부분이 있다면 개선하겠습니다.
    
    현재 코드는 기본적인 구조와 로직이 잘 구현되어 있으므로, 세부 요구 사항에 따라 추가 작업을 진행하면 될 것 같습니다. 필요한 추가 정보나 특별한 요청 사항이 있으시면 알려주십시오.
    
    감사합니다,
    팀원 Q
    
해당 코드를 테스트할 수 있도록 파이썬 코드로 작성해줘
  • from Q

    물론이죠! 아래는 사천성 게임의 기본 로직을 테스트할 수 있는 코드입니다. 코드의 현재 구조는 두 타일이 같으면 즉시 제거하므로, 테스트 케이스는 해당 로직을 중점으로 검증하겠습니다.
    
    ```python
    class TestSichuanGame:
        def test_initialize_board(self):
            game = SichuanGame()
            game.initialize_board()
            assert sum(row.count(' ') for row in game.board) == game.board_size * game.board_size - game.pairs_count * len(game.tile_types)
    
        def test_find_and_match_tiles(self):
            game = SichuanGame(tile_types=["A"], pairs_count=1)
            game.initialize_board()
            game.find_and_match_tiles()
            assert sum(row.count('A') for row in game.board) == 0
    
        def test_check_game_over(self):
            game = SichuanGame(tile_types=["A"], pairs_count=0)
            game.initialize_board()
            assert game.check_game_over() == True
    
            game = SichuanGame(tile_types=["A"], pairs_count=1)
            game.initialize_board()
            assert game.check_game_over() == False
    
    • test_initialize_board: 보드가 올바르게 초기화되었는지 확인합니다.

    • test_find_and_match_tiles: 동일한 타일이 제거되는지 확인합니다.

    • test_check_game_over: 게임이 종료될 조건이 맞는지 검증합니다.

    이 코드는 현재 게임 로직의 기본적인 동작을 테스트하며, 추가적인 세부 규칙이나 요구 사항이 있다면 테스트 케이스를 더 추가할 수 있습니다. 게임 로직에 대한 변경이나 추가 테스트가 필요하다면 알려주세요!

    
    
    

실제 이를 수행하게 되면 무한 루프를 돌게 됩니다. 이를 Q에게 디버깅을 시킵니다

위 코드를 수행하면  gameover가 출력되지않고 마지막에 더 이상 짝이 없을때 프로그램 계속 무한 수행이 돼. 이를 수정해줘
  • from Q

    무한 루프가 발생하는 이유는 `find_and_match_tiles` 함수가 모든 타일을 검사하고 제거한 후에도 계속해서 루프를 돌기 때문입니다. 모든 타일을 검사한 후에도 매칭되는 타일이 없다면 게임은 계속 진행되며, 더 이상 매칭될 타일이 없을 경우 루프를 빠져나가야 합니다.
    
    `find_and_match_tiles` 함수에 매칭되는 타일이 없을 경우 루프를 빠져나가는 로직을 추가하겠습니다.
    
    ```python
    def find_and_match_tiles(self):
        for y in range(self.board_size):
            for x in range(self.board_size):
                if self.board[y][x] != ' ':
                    # Find matching pair logic
                    for match_y in range(self.board_size):
                        for match_x in range(self.board_size):
                            if (match_y != y or match_x != x) and self.board[match_y][match_x] == self.board[y][x]:
                                # Matching pair found, remove them
                                self.board[y][x] = ' '
                                self.board[match_y][match_x] = ' '
                                return
        # No matching pairs found
        print("No more matching pairs. Game Over!")
        exit()
    

    이제 find_and_match_tiles 함수가 더 이상 매칭되는 타일을 찾지 못하면 "No more matching pairs. Game Over!" 메시지를 출력하고 프로그램을 종료합니다.

    이렇게 수정하면 게임이 더 이상 진행될 수 없는 상황에서 프로그램이 정상적으로 종료될 것입니다. 추가로 변경하거나 수정할 부분이 있다면 알려주세요!

    
    
    
수정 사항을 포함해서 전체 코드를 작성해줘
  • from Q

    물론이죠! 아래는 수정된 전체 사천성 게임 코드입니다.
    
    ```python
    import random
    import time
    import os
    
    class SichuanGame:
        def __init__(self, board_size=10, tile_types=["A", "B", "C"], pairs_count=15):
            self.board_size = board_size
            self.tile_types = tile_types
            self.pairs_count = pairs_count
    
        def initialize_board(self):
            self.board = [[' ' for _ in range(self.board_size)] for _ in range(self.board_size)]
            tiles = self.tile_types * self.pairs_count
            random.shuffle(tiles)
    
            for tile in tiles:
                x, y = random.randint(0, self.board_size - 1), random.randint(0, self.board_size - 1)
                while self.board[y][x] != ' ':
                    x, y = random.randint(0, self.board_size - 1), random.randint(0, self.board_size - 1)
                self.board[y][x] = tile
    
        def find_and_match_tiles(self):
            for y in range(self.board_size):
                for x in range(self.board_size):
                    if self.board[y][x] != ' ':
                        for match_y in range(self.board_size):
                            for match_x in range(self.board_size):
                                if (match_y != y or match_x != x) and self.board[match_y][match_x] == self.board[y][x]:
                                    self.board[y][x] = ' '
                                    self.board[match_y][match_x] = ' '
                                    return
            # No matching pairs found
            print("No more matching pairs. Game Over!")
            exit()
    
        def check_game_over(self):
            for y in range(self.board_size):
                for x in range(self.board_size):
                    if self.board[y][x] != ' ':
                        return False # Tiles still remain, game continues
            return True # No tiles left, game over
    
        def draw_board(self):
            os.system('clear' if os.name == 'posix' else 'cls')
            for row in self.board:
                print(' '.join(row))
            print()
    
        def start_game(self):
            self.initialize_board()
            while True:
                self.draw_board()
                self.find_and_match_tiles()
                if self.check_game_over():
                    print("Game Over!")
                    break
                time.sleep(1)
    
    game = SichuanGame()
    game.start_game()
    

    이 코드는 게임 보드를 초기화하고, 동일한 타일을 찾아 매칭하고 제거하는 기본 로직을 수행합니다. 더 이상 매칭할 수 있는 타일이 없으면 "No more matching pairs. Game Over!" 메시지를 출력하고 게임을 종료합니다.

    추가로 변경하거나 수정할 부분이 있다면 알려주세요!

    
    
    

이를 VSCode에 넣고 수행하게 되면 잘 동작하는 모습을 볼 수 있습니다

to C

이를 코드인터프리터를 사용해서 실행되는 모습을 보여줘
  • from C

    코드 내에서 `random` 모듈을 사용하기 때문에 해당 모듈을 임포트해야 합니다. 위에서 코드를 분리하면서 임포트 부분을 누락한 것 같습니다. 임포트 부분을 추가하고 다시 실행해보겠습니다.
    
    게임의 초기 보드가 성공적으로 생성되었습니다. 10x10 그리드에 "A", "B", "C" 타일이 무작위로 배치된 모습을 볼 수 있습니다.
    
    실제 게임을 진행하려면 위 코드를 로컬 환경에서 실행해야 하며, 매칭 로직에 따라 타일이 제거되고 게임이 진행될 것입니다.
    


결론

모든 작업은 1시간 미만이 걸렸습니다. 거의 프롬프트를 생각하고 작성하는 시간과 이 문서를 작성하는데 걸린 시간이 전부 였습니다.

위 작업 중 최종 코드 리뷰는 하지 않았습니다. 코드를 넘겨 받는 과정에서 뼈대와 함수별 주석등을 살펴봤을 때 문제가 없어보였기 때문입니다. 하지만 실제 구현체에서는 버그가 존재하였고 이를 역할 Q가 잡아주진 못했습니다. 대신 문제가 있다고 알려주고 수정해 달라고 했을 땐 잘 수정해주었습니다.

역할을 나눠서 질문을 하긴 했는데, 이게 과연 제대로 역할을 나눠서 작업을 해준 것인지 궁금했습니다. 특히 Q와 C의 차이가 미비한 것으로 보였습니다. 로그성으로 작업을 구분해두는 것이외 효과가 있었을까 의문이 들었습니다.

제 입장에서 gpt는 훌륭한 신규 개발자였습니다. 많은 발전 가능성을 가지고 아는 것도 많으면서 결정적인 무언가가 부족한 결과물을 만들어주는 그런 도구였습니다. 사실 이 부분의 일부 책임은 올바른 요구 사항을 전달하지 못한 저의 책임이 있지 않을까 싶습니다.

이를 기반으로 실제 시장에 배포가 가능한 프로그램 작성 과정을 테스트 해볼까 싶습니다. 실제 배포까진 난관이 있겠지만 가능한 작업으로 보입니다.

7
3개의 답글

👉 이 게시글도 읽어보세요