연습문제 (2)

단국대학교 멀티미디어공학전공 HCI프로그래밍 II (2010년 가을학기) 연습

□ 단원 : C# 기초

□ 목표 : C# 프로그램 기초

□ 주요 연습 내용 : array, foreach, class, recursive call 사용 연습

□ 준비자료 : TicTacToe.cs

연습문제 Ex2 (Due by 10/12 화 24시까지)

-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC# file, 보고서를 학번_이름_Ex2.zip으로 묶어서 낼 것. 보고서 (30%)

[연습문제]

0. 3목 (Tic-Tac-Toe) 게임 프로그램을 작성하라. 3목 게임은 게임판의 지정된 행/열에 사람은 'X' 수를 두고 컴퓨터는 'O' 수를 번갈아 둔다. 행, 열, 대각선으로 3개의 'X'나 'O'가 존재하면 승자가 된다.

1. Board 클래스에는 보드를 표현하는 2차원 배열 matrix가 데이터 멤버로 포함되어야 한다. (50%)

- char[,] matrix;

- Board() 기본 생성자

- void InitBoard() 메소드는 matrix 보드에 값을 ' '으로 초기화

- bool IsFullBoard() 메소드는 matrix 보드에 빈값이 없으면 true를 반환

- bool IsEmpty(int i, int j) 메소드는 matrix 보드 (i,j) 위치에 빈값이 있으면 true 반환 - void Mark(int i, int j, char c) 메소드는 matrix 보드 (i,j) 위치에 ‘X' 또는 ’O'를 표시

- void Unmark(int i, int j) 메소드는 matrix 보드 (i,j) 위치에 ‘ '로 표시

- char GetMarked(int i, int j) 메소드는 matrix 보드 (i,j) 위치에 있는 값을 반환

- char CheckThree() 메소드는 matrix 보드에 행, 열, 대각선으로 3개가 되는 것이 있는지 확인하고 어느 것인지를 반환. 만약 전체가 3개로 된 것이 없이 보드가 차면 ‘T' 반환

- void DisplayBoard() 메소드는 matrix 보드를 화면에 표시

- void MoveByKeyboard(char c) 메소드는 화면에서 키보드 사용자의 입력을 받아서 원하는 matrix 보드 (i,j) 위치에 ‘X' 또는 ’O' 표시

- void MoveSimple(char c) 메소드는 matrix 보드에서 빈칸이 있으면 ‘X' 또는 ’O' 표시

2. Main 메소드에서는 게임 행동을 지정한다. (10%)

- 보드를 초기화한다.

- while 문을 사용하여 게임이 종료되기 전까지 'X'나 'O' 수를 번갈아 두게 한다.

이때 사람은 MoveByKeyboard('X') 키보드 사용자 입력을 받아서 ‘X' 수를 둔다.

컴퓨터는 MoveSimple('O') 보드의 빈칸 위치에 'O' 수를 둔다.

- 만약 승자가 결정되었으면 누구인지 화면에 출력한다.

- 수를 둘 때마다 게임판을 화면에 출력한다.

3. Board 클래스에 MoveBest(int depth, char c) 메소드는 컴퓨터가 사람이 둔 수를 보고 Minimax 알고리즘 또는 Alpha Beta Pruning 알고리즘을 사용하여 최상의 조건에 ‘O'를 표시하는 이 메소드를 추가하라. 그리고 Main에서 MoveSimple 대신 MoveBest를 사용하여 테스트해본다. (10%)

4. 프로그램에 본인이 더 테스트해보고 싶은 Method나 routine을 추가하라. (10%)