Home [파이썬 프로그래밍 기초] 13강 - 실전 프로그래밍
Post
Cancel

[파이썬 프로그래밍 기초] 13강 - 실전 프로그래밍

💡해당 게시글은 방송통신대학교 정재화 교수님의 '파이썬 프로그래밍 기초' 강의를 개인 공부 목적으로 메모하였습니다.



학습 목표


  • 소프트웨어 개발 라이프사이클의 진행 단계를 나열할 수 있음
  • 배치 프로그램과 이벤트 기반 프로그램의 구조적 차이를 설명할 수 있음
  • 소프트웨어 개발 라이프사이클을 적용할 수 있음



주요 용어


  • 소프트웨어 개발 라이프사이클
    • 소프트웨어 개발 계획 수립부터 폐기까지 신뢰도 높은 소프트웨어 결과물 구현을 위한 체계화 된 소프트웨어 개발 체계
  • 배치 프로세스
    • 일괄적으로 모아 놓은 대량의 데이터를 지정한 처리 방법에 따라 처리하는 과정 또는 프로그램
  • 이벤트
    • 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건



강의록


게임 개발 준비

소프트웨어 개발 과정

  • 대규모 소프트웨어 개발에 자원을 투입하여 초기에 예상한 결과물 구현을 목적
  • 소프트웨어 개발 계획 수립부터 폐기까지 전체적인 흐름을 체계화하여 고품질의 소프트웨어 생산을 위한 체계
  • 공장에서 제품을 생산하듯 소프트웨어 전체 개발 과정을 하나의 프로세스로 정의
    • 소프트웨어 개발 라이프사이클(SDLC)

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

image.png

  1. PLANNING (계획 수립)
    • 비용, 기간, 자원 계획 수립
  2. ANALYSIS (분석)
    • SW 기능/비 기능 요구 정의 및 자료 수집
  3. DESIGN (설계)
    • 구조, 데이터, 인터페이스, UI 정의
  4. IMPLEMENTATION (구현)
    • 언어 선택, 코딩 규칙 정의, 프로그램 작성
  5. TESTING & INTEGRATION (테스트 및 통합)
    • 요구 반영, 예상 결과 유사 검증 및 오류 파악
  6. MAINTENANCE (유지 보수)
    • 프로그램 오류 수정, 새로운 요구 추가
    • 사용 환경 변화 반영

프로그램의 진행 과정

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

    image.png

컴퓨터 게임의 진행 과정

image.png

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

이벤트 기반 프로그래밍

  • EDP(Event Driven Programming)
    • 실행의 흐름을 예측하는 프로그래밍 기법이 무의미한 GUI 환경에서 사용
    • 입력 장치, 타이머, 프로그램 등으로부터 발생하는 이벤트 관점에서 생각하는 방식
  • 이벤트(event)란 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건
    • 컴퓨터 프로그램이 대기하고 있다가 이벤트가 들어올 때 그 이벤트에 맞게 구동
  • 게임 이외에도 GUI 기반 프로그램에서 대다수 활용 되는 EDP

EDP 프로그램 구동 구조

image.png

  • 이벤트 발생 장치
    • 이벤트 유형에 따른 이벤트 생성
  • 이벤트 큐
    • 이벤트 저장 구조
  • 이벤트 루프
    • 이벤트 생성 여부 확인 및 전달
    • get (이벤트 큐에서 가져오기)
    • check (이벤트 저장 구조 확인)
  • 이벤트 핸들러
    • 이벤트 발생에 따른 실행 코드
    • 이벤트를 처리하는 하나의 메소드

게임의 진행 과정

image.png

  • 게임 초기화
  • 게임 루프 (무한 반복)
    • 이벤트 검사
    • 이벤트 처리
    • 게임 업데이트
    • 화면 생성
    • 화면 업데이트
  • 게임 종료 (exit)

게임 정의 및 설계

게임 정의

  • 틱택토(Tic Tac Toe)
    • 두 명의 플레이어가 3×3 판에 번갈아가며 O와 X를 기록
    • 같은 표시를 가로, 세로, 또는 대각선 상에 일직선으로 놓이도록 하는 게임

      image.png

틱택토 규칙

  1. 한 플레이어가 아직 기록되지 않은 빈 칸에 자신의 기호로 표시한다.
  2. 다른 플레이어가 아직 기록되지 않은 빈 칸에 자신의 기호로 표시한다.
  3. 둘 중 한 플레이어가 가로, 세로, 또는 대각선을 자신의 기호만으로 채우면 승리한다.
  4. 게임은 한 플레이어가 승리하거나 빈 칸이 남지 않아 비길 때까지 계속된다.

게임 승리 상황

  • 전체 8가지의 승리 상황

    image.png

틱택토 요구 사항

  • 게임 시작 시 무작위로 시작할 플레이어가 선택
  • 플레이어는 사용자와 컴퓨터이고 각각 OX 기호를 사용
  • 빈 칸의 행, 열 좌표를 입력하여 기호를 표시
    • 사용자는 사용자 입력, 컴퓨터는 랜덤 선택
  • 승리, 무승부 또는 종료 요청이면 게임이 종료
    • 종료 요청은 사용자가 “0 0” 입력 시 발생
  • 게임 판을 텍스트로 출력하여 게임 진행

틱택토 설계 1/4

  • 2차원 리스트를 사용하여 게임 판을 생성하고 각각의 칸을 빈칸으로 초기화
    • 빈칸에 대한 지정한 기호(*)를 사용
  • 게임 판에 빈칸이 남아있는지 확인
    • 게임 판 전체를 확인하고 True/False 반환
  • 둘 중 한 플레이어가 승리했는지 확인
    • 8가지의 승리 상황에 따른 가능성을 확인
    • 각각의 행, 열과 두 개의 대각선 방향을 확인

틱택토 설계 2/4

  • 게임 판의 현재 상태를 출력
  • 게임을 시작
    • 무작위로 선공할 플레이어를 선택
  • 게임 루프를 기동(1/3)
    • 게임판의 현재 상태를 출력하고 다음 플레이어가 빈칸을 선택
    • 사용자 또는 컴퓨터가 다음 말의 위치결정해줄 때까지 계속 대기

틱택토 설계 3/4

  • 게임 루프를 기동(2/3)
    • 플레이어가 선택할 빈칸의 위치(행과 열 번호)를 입력 받음
      • 사용자일 경우 사용자 입력을 통해 행과 열 번호를 입력 받음
      • 컴퓨터일 경우 무작위로 행과 열 번호를 선택
    • 플레이어가 선택한 위치에 기호를 표시하고 게임 판을 업데이트

틱택토 설계 4/4

  • 게임 루프를 기동(3/3)
    • 현재 플레이어가 승리했는지 확인
      • 승리 상황인 경우, 승리한 플레이어에 대한 메시지를 출력하고 게임 루프를 종료
    • 게임 판에 빈칸이 남아있는지 확인
      • 게임 판이 가득 찬 경우, 무승부 메시지를 출력하고 게임 루프를 종료
    • 게임이 종료될 때까지 게임 루프를 무한 반복

틱택토 게임 설계

  1. 2차원 리스트를 사용하여 게임판을 생성하고 각각의 칸을 빈칸으로 초기화
    • 빈칸에 대한 지정한 기호(*)를 사용
  2. 게임판에 빈칸이 남아있는지 확인
    • 게임판 전체를 확인하고 True/False 반환
  3. 둘 중 한 플레이어가 승리했는지 확인
    • 8가지의 승리 상황에 따른 가능성을 확인
    • 각각의 행, 열과 두 개의 대각선 방향을 확인
  4. 게임판의 현재 상태를 출력
  5. 게임 시작
    • 무작위로 선공할 플레이어를 선택
    • 게임 루프를 기동
    • 게임 판의 현재 상태를 출력하고 다음 플레이어가 빈칸을 선택
    • 플레이어가 선택할 빈칸의 위치(행과 열 번호)를 입력 받음
      • 사용자일 경우 사용자 입력을 통해 행과 열 번호를 입력 받음
      • 컴퓨터일 경우 무작위로 행과 열 번호를 선택
    • 플레이어가 선택한 위치에 기호를 표시하고 게임 판을 업데이트
    • 현재 플레이어가 승리했는지 확인
      • 승리 상황인 경우, 승리한 플레이어에 대한 메시지를 출력하고 게임 루프를 종료
    • 게임 판에 빈칸이 남아있는지 확인
      • 게임 판이 가득찬 경우, 무승부 메시지를 출력하고 게임 루프를 종료
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class Tic_Tac_Toe:

    # 게임판 생성
    def __init__(self): # 게임이 실행되자마자 생성되어야 하는 부분
        pass
    # 게임판 초기화
    def create_board(self):
        pass
    # 첫 플레이어 선택
    def select_first_player(self):
        pass

    # 기호 표시
    def mark_spot(self, row, col, player):
        pass
    # 승리 상태 확인
    def is_win(self, player):
        pass
        # 행 확인
        # 열 확인 
        # 대각선 확인

    # 잔여 빈칸 여부 확인
    def is_board_full(self):
        pass

    # 플레이어 변경
    def next_player(self, player):
        pass

    # 현재 게임판 상태 츌력
    def show_board(self): # 지금까지 입력 된 게임 판의 상태를 보여 주는 것
        pass

    # 게임 루프 시작
    def start(self):
        pass

        # 새 게임판 생성

        # 첫 플레이어 선택

        # 게임 루프 시작
        while True:
            # 다음 플레이어 안내
            pass

            # 현재 게임판 상태 출력

            # 사용자 입력 대기, 컴퓨터일 경우 랜덤 위치 반환

            # row, col 입력값이 0, 0인 경우 게임 종료
            
            # 입력된 위치 표시

            # 현재 플레이어가 이겼는지 확인 

            # 게임판 가득참 확인

            # 플레이어 변경

        # 최종 게임판 출력

# 게임 생성
TTT = Tic_Tac_Toe()

# 게임 시작
TTT.start()
  • __init__
    • 클래스에서 객체가 만들어질 때 자동적으로 호출, 초기화
    • 항상 __init__으로 명명
  • is로 시작하는 메소드
    • 대체로 무언가를 물을 때 자주 쓰임
    • 결과는 주로 True / False



연습 문제


  1. 소프트웨어 개발 라이프사이클의 순서가 올바르게 나열 된 것은?

    a. 계획, 분석, 설계, 구현, 테스트, 유지 보수

  2. 다음의 EDP 구동 구조에서 이벤트 발생 장치에 발생 된 이벤트가 처리 되기 전까지 저장 되는 저장 구조는?

    image.png

    a. 이벤트 큐

  3. 일괄적으로 모아 놓은 대량의 데이터를 특정 시간에 지정한 처리 방법에 따라 처리하는 프로그램은?

    a. 배치 프로그램



학습 정리


  • 소프트웨어 개발 라이프사이클이란 소프트웨어 개발 계획 수립부터 폐기까지 전체적인 흐름을 체계화하여 고품질의 소프트웨어 생산을 위한 체계를 말함
  • 소프트웨어 개발 라이프사이클은 대규모 소프트웨어 개발 시 자원을 투입하여 초기에 예상한 대로 결과물 구현을 목적으로 함
  • 소프트웨어 개발 라이프사이클은 계획, 분석, 설계, 구현, 테스트, 유지 보수의 순서로 진행 됨
  • 배치 프로세스란 일괄적으로 모아 놓은 대량의 데이터를 특정 시간에 지정한 처리 방법에 따라 처리하는 과정 또는 프로그램을 말함
  • 게임은 입력 장치, 타이머, 프로그램 등으로부터 발생하는 이벤트를 처리하는 이벤트 기반 프로그램임
  • 이벤트란 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건임
  • 게임은 게임 초기화 후, 이벤트 검사, 이벤트 처리, 게임 업데이트, 화면 생성, 화면 업데이트 과정을 무한히 반복하는 게임 루프로 구성 됨
  • 틱택토는 두 명의 플레이어가 3×3 판에 번갈아가며 O와 X 표시를 기록하여 같은 표시를 가로, 세로, 또는 대각선 상에 일직선으로 먼저 놓이도록 하는 게임임

[파이썬 프로그래밍 기초] 12강 - 파일

[파이썬 프로그래밍 기초] 14강 - 실전 프로그래밍