배꼽파지 않도록 잘 개발해요

방송대 파이썬 프로그래밍 기초 - 13강. 실전 프로그래밍 1 본문

방송대 컴퓨터과학과/파이썬 프로그래밍 기초

방송대 파이썬 프로그래밍 기초 - 13강. 실전 프로그래밍 1

꼽파 2023. 5. 23. 00:09


  • 1. 게임 개발 준비

  • 2. 게임 정의 및 설계

  • 1. 게임 개발 준비

    소프트웨어 개발 과정

    - 대규모 소프트웨어 개발에 자원을 투입하여 초기에 예상한 결과물 구현을 목적

    - 소프트웨어 개발 계획 수립부터 폐기까지 전체적인 흐름을 체계화하여 고품질의 소프트웨어 생산을 위한 체계

    - 공장에서 제품을 생산하듯 소프트웨어 전체 개발 과정을 하나의 프로세스로 정의

    소프트웨어 개발 라이프사이클(SDLC)


    소프트웨어 개발 라이프사이클

    대규모 소프트웨어 개발에 자원을 투입하여 초기에 예상한 결과물 구현을 목적으로 소프트웨어 전체 개발 과정을 하나의 프로세스로 정의한 것

    1) Planning : 비용, 기간, 자원 계획 수립

    2) Analysis : SW 기능/비기능 요구 정의 및 자료수집

    3) Design : 구조, 데이터, 인터페이스, UI 정의

    4) Implementation : 언어 선택, 코딩 규칙 정의, 프로그램 작성

    5) Testing & Integration : 예상 결과 유사 검증 및 오류 파악

    6) Maintenance : 프로그램 오류 수정, 새로운 요구 추가, 사용환경 변화 반영


    프로그램의 진행과정

    프로그램의 대다수는 데이터 파일을 처리 및 가공하여 정보 파일을 만들어서 가공됨.

    배치(batch) 프로세스 : 일괄적으로 모아놓은 대량의 데이터를 특정시간에 지정한 처리 방법에 따라 처리


    컴퓨터 게임 진행 과정

    게임 시작 후 가만히 있음 → 사용자가 버튼을 누르면 그 때 캐릭터가 Jump

    사용자의 행위에 따라 프로그램 내부에서 함께 반응

    즉, 게임은 컴퓨터 프로그램이 대기하고 있다가 이벤트가 들어올 때 그 이벤트에 맞게 구동됨.


    이벤트 기반 프로그래밍

    EDP(Event Driven Programming)

    - 실행의 흐름을 예측하는 프로그래밍 기법이 무의미한 GUI 환경에서 사용함.

    - 입력장치, 타이머, 프로그램 등으로부터 발생하는 이벤트 관점에서 생각하는 방식

    - 이벤트(event)란 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건


    EDP 프로그램 구동 구조

    · 이벤트 루프 : 이벤트 생성 여부 확인 및 전달

    · 이벤트 발생 장치 : 이벤트 유형에 따른 이벤트 생성

    · 이벤트 큐 : 이벤트 저장 구조

    · 이벤트 핸들러 : 이벤트 발생에 따른 실행코드


    게임의 진행과정


    2. 게임 정의 및 설계

    게임 정의

    틱택토(Tic Tac Toe)

    두명의 플레이어가 3x3 판에 번갈아가며 O와 X를 기록

    같은 표시를 가로, 세로, 또는 대각선 상에 일직선으로 놓이도록 하는 게임


    틱택토 규칙

    1. 한 플레이어가 아직 기록되지 않은 빈 카에 자신의 기호로 표시한다.

    2. 다른 플레이어가 아직 기록되지 않은 빈 칸에 자신의 기호로 표시한다.

    3. 둘 중 한 플레이어가 가로, 세로 또는 대각선을 자신의 기호만으로 채우면 승리한다.

    4. 게임은 한 플레이어가 승리하거나 빈 칸이 남지 않아 비길 때까지 계속된다.


    게임 승리 상황

    전체 8가지의 승리 상황


    틱택토 요구사항

    게임 시작 시 무작위로 시작할 플레이어가 선택 (사용자 or 컴퓨터)

    플레이어는 사용자와 컴퓨터이고 각각 O와 X 기호를 사용

    빈칸의 행, 열 좌표를 입력하여 기호를 표시

    - 사용자는 사용자입력, 컴퓨터는 랜덤 선택

    승리, 무승부 또는 종료 요청이면 게임이 종료

    - 종료 요청은 사용자가 "OO" 입력 시 발생

    게임판을 텍스트로 출력하여 게임 진행


    틱택토 설계

    2차원 리스트를 사용하여 게임판을 생성하고 각각의 칸을 빈칸으로 초기화

    - 빈칸에 대한 지정한 기호(*)를 사용

     

    게임판에 빈칸이 남아있는지 확인

    - 게임판 전체를 확인하고 True/False 반환

     

    둘 중 한 플레이어가 승리했는지 확인

    - 8가지의 승리 상황에 따른 가능성을 확인

    - 각각의 행, 열과 두 개의 대각선 방향을 확인

     

    게임판의 현재 상태를 출력

     

    게임을 시작

    - 무작위로 선공할 플레이어를 선택

     

    게임 루프를 기동(1/3)

    - 게임판의 현재 상태를 출력하고 다음 플레이어가 빈칸을 선택

    - 사용자 또는 컴퓨터가 다음 말의 위치를 결정해줄 때까지 계속 대기

     

    게임 루프를 기동(2/3)

    - 플레이어가 선택할 빈칸의 위치(행과 열 번호)를 입력받음

    • 사용자일 경우 사용자 입력을 통해 행과 열 번호를 입력받음
    • 컴퓨터일 경우 무작위로 행과 열 번호를 선택

    - 플레이어가 선택한 위치에 기호를 표시하고 게임판을 업데이트

     

    게임 루프를 기동(3/3)

    - 현재 플레이어가 승리했는지 확인

    • 승리 상황인 경우, 승리한 플레이어에 대한 메시지를 출력하고 게임 루프를 종료

    - 게임판에 빈칸이 남아있는지 확인

    • 게임판이 가득찬 경우, 무승부 메시지를 출력하고 게임 루프를 종료

    - 게임이 종료될 떄까지 게임 루프를 무한 반복


    실전 프로그래밍

     

    1. 설계 관점에서 게임에 활용할 메소드 정의

    class Tic_Tac_Toe:
    
        # 게임판 생성
    # 게임이 실행되자마자 생성되어야 하는 부분
    # 클래스에서 객체가 만들어질 때 자동적으로 호출, 초기화
    # → 항상 __init__으로 명명
        def __init__(self) : 
    
        # 게임판 초기화
        def creat_board(self) :
    
        # 첫 플레이어 선택
        def select_first_player(self) :
    
        # 기호 표시
        def mark_spot(self, row, col, player)    
    
        # 승리 상태 확인
        def is_win(self, player)
    
           # 행 확인
           # 열 확인 
           # 대각선 확인
    
        # 잔여 빈칸 여부 확인
        def is_board_full(self) :
    
        # 플레이어 변경
        def next_player(self, player) :
    
        # 현재 게임판 상태 츌력
        def show_board(self) : 
    
        # 게임 루프 시작
        def start(self) :
    
            # 새 게임판 생성
    
            # 첫 플레이어 선택
    
            # 게임 루프 시작
            while True :
    
                # 다음 플레이어 안내
    
                # 현재 게임판 상태 출력
    
                # 사용자 입력 대기, 컴퓨터일 경우 랜덤 위치 반환
    
                # row, col 입력값이 0, 0인 경우 게임 종료
                
                # 입력된 위치 표시
    
                # 현재 플레이어가 이겼는지 확인 
    
                # 게임판 가득참 확인
    
                # 플레이어 변경
    
            # 최종 게임판 출력
    
    
    # 게임 생성
    TTT = Tic_Tac_Toe() :
    
    # 게임 시작
    TTT.start() :

     

    무언가를 물을 때 자주 쓰이는 메소드 이름 : is~

    → 결과도 주로 True/False

    728x90