실전 프로젝트 2 : 숫자야구 숫자 야구를 구현해보자.

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

1 ‘ 우리나라의 주요공업 ’ - 정도웅, 주민혁, 안수진, 백경민, 엄다운, 박경찬 -.
명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제3장선택과 반복.
명품 C++ 프로그래밍 3장. 클래스와 객체.
명품 C++ 8장 상속.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
공부할 내용 조상들이 살던 곳 자연과 잘 어울리는 한옥 지방에 따라 서로 다른 집의 모양 섬 지방의 집
사랑, 데이트와 성적 자율성 :데이트 성폭력!!! 성폭력예방교육 전문강사 / 여성학 전공 신 순 옥.
2장 닷넷 프레임워크.
C++ Espresso 제1장 기초 사항.
퇴계와 율곡의 사회사상 비교 남 일 재 동서대학교 교수/ 정치학 박사 1. 퇴계 이황과 율곡 이이의 약전(略傳)
C++ Espresso 제2장 제어문과 함수.
501. 군인들의 세상 502. 민정 이양과 한일회담 이선용.
쌍용차 회생계획안을 통한 투기자본(=먹튀자본) 수강과목: 회 계 학 원론 담당교수: 박 성 환 교수님
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
8. 객체와 클래스 (기본).
C++ Espresso 제9장 다형성.
게임 엔진 : 프로젝트 PPT_1 참참참 김 현 원.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
7 스택.
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
명품 C++ 8장 상속.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
서울 메트로 노조파업 수강과목 : 노사 관계론 담당교수 : 정형진 교수님
7장 클래스.
명품 C++ 7장 프렌드와 연산자 중복.
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
C ++ 프로그래밍 시작.
This, static, final 지정 예약어 자바 4대 중첩 클래스
주소록 프로그램.
스택(Stack) 김진수
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
12 검색.
5 FLOWCHAT 순서도 순서도의 기호 익히기.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Chapter 3 클래스. 최호성.
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
DataScience Lab. 박사과정 김희찬 (월)
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
가상함수와 추상 클래스.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
제 12장. 사용자 정의형으로서의 클래스 학기 프로그래밍언어및실습 (C++).
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
정치개혁의 가능성 논의 권력구조 개편을 통하여 본 -개헌을 통한 정부형태의 변화를 중심으로 [한국정치론] 윤성이 교수님
자바 5.0 프로그래밍.
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
노년기 발달 장안대 행정법률과 세류반 정 오 손
3장,4장 발표 서정우.
C# 10장. 참조형.
태국 문학 욜라다 왓짜니 싸란차나 팟차라와라이 끼따야펀 르앙다우 타니다.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
새로운 타입 정의하기 Defining new types
경영학의 상황학파에 대해서… 경제학과 3학년 최준용 회계학과 4학년 진현빈
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
워밍업 실뭉치 전달게임.
음파성명학 최종욱.
배열, 포인터, 함수 Review & 과제 1, 2.
Presentation transcript:

실전 프로젝트 2 : 숫자야구 숫자 야구를 구현해보자

이 장에서 다룰 내용 게임 개요 1 2 게임 구현 3 실행 결과

숫자 야구 01_게임 개요 2명의 player ( 1 유저, 1 컴퓨터) 로 구성 숫자를 정확하게 먼저 맞추는 사람이 이김 숫자가 맞고 위치까지 정확하면 S(스트라이크) 숫자는 맞고 위치가 틀린다면 B(볼) ‘O S O B’의 힌트를 상대방에게 제공하고, 서로의 숫자를 맞추는 게임.

고려 사항 02_게임 구현 Console로(텍스트 화면으로) 입출력을 표현한다. 매 턴마다 사용자로부터 정답을 입력 받는다. 정답의 구분은‘,’문자로 하면 될 것이다. 사용자와 Bot이 서로 번갈아 가며, 게임을 진행한다. 입력 받으면 즉시 결과를 화면으로 출력한다. 정확히 정답을 맞추면 메시지를 출력하고 게임을 종료한다.

[소스 설명 17-1] main함수 358 void main() 359 { 360 cout << "======================" << endl; 361 cout << "The game is setting..." << endl; 362 cout << "======================" << endl; 363 364 BaseBallGame* bbgame = new BaseBallGame(); 365 bbgame->setGame(); 366 bbgame->start(); 367 } 게임 셋팅 로고를 출력한다. 게임 자체를 의미하는 BaseBallGame 객체를 생성하고, 각자 정답을 입력하도록 setGame() 함수를 호출한 후, 정답이 입력되면 start() 함수를 호출해서 게임을 시작한다.

[소스 설명 17-2] 야구 게임 클래스 284 class BaseBallGame 285 { 286 287 private: 288 BallCount* ballcount; 289 Player* players[2]; 290 291 public: 292 BaseBallGame() 293 { 294 players[0] = new Human(); 295 players[1] = new Bot(); 296 ballcount = new BallCount(); 297 } 298 299 void setGame() 300 { 301 players[0]->setAnswer(); 302 players[1]->setAnswer(); 303 } 307 void start() 308 { … 생성자에서는 2명의 플레이어를 생성하는데, 하나는 사람이고, 다른 하나는 봇으로 생성을 한다. setGame 함수에서는 각 player에게 정답을 셋팅할 것을 지시한다. start 함수는 실제 게임을 진행하는 함수로서, 310행~312행에 게임의 진행을 알리고, 정답이 나올 때까지 각각의 플레이어에게 정답이라고 생각되는 답을 입력할 것을 요청하고(320행, 334행), 이를 실제 상대방의 정답과 비교함으로써(321행, 340행) 게임을 진행한다.

[소스 설명 17-3] 정답 클래스 addAnswer 함수는 플레이어들로부터 받은 031 class Answer 032 { 033 034 private: 035 Ball* mBalls; 036 int mIndex; 037 038 public: 039 Answer() 040 :mIndex(0) 041 { 042 mBalls = new Ball[MAX_BALL]; 043 } 044 045 bool addAnswer(int agAns) 046 { 047 for(int i = 0; i < mIndex; i++) 048 { 049 if (mBalls[i].getNumber() == agAns) return false; 050 } 051 052 if (mIndex < MAX_BALL) 053 { 054 mBalls[mIndex].setNumber(agAns); 055 mIndex++; 056 } 057 return true; 058 } 059 060 Ball* getAnswer() 061 { 062 return mBalls; 063 } 064 065 int getNumberofBalls() 066 { 067 return mIndex; 068 } 069 }; addAnswer 함수는 플레이어들로부터 받은 숫자를 우리의 정답, 즉 Ball로 하나씩 저장하 는 부분이다. 게임의 룰에 따라서 겹치는 숫자는 정답이 될 수 없기 때문에 그것을 체크하는 부분이다.

[소스 설명 17-4] 볼 클래스 009 class Ball 010 { 011 012 private: 013 int mNumber; 014 015 public: 016 Ball() 017 : mNumber(0) {}; 018 019 public: 020 int getNumber() 021 { 022 return mNumber; 023 } 024 void setNumber(int agNumber) 025 { 026 mNumber = agNumber; 027 } 028 029 }; 030

[소스 설명 17-5] 볼 카운트 클래스 - 1 126 class BallCount 127 { 128 129 private: 130 int mCountofStrike; 131 int mCountofBall; 132 133 public: 134 BallCount() 135 { 136 clear(); 137 } 138 139 bool is3Out() 140 { 141 return ( mCountofStrike == MAX_BALL ); 142 } 143 144 void clear() 145 { 146 mCountofBall = 0; 147 mCountofStrike = 0; 148 } i3Out 함수는 점수를 계산했을 때, 3 스트라이크인지를 검사하는 루틴이다.

[소스 설명 17-5] 볼 카운트 클래스 - 2 149 150 void checkResult(Player* agPlayer, Answer* agAttacker, Answer* agDefender) 151 { 152 clear(); 153 for(int i = 0; i < MAX_BALL; i++) 154 { 155 if (agAttacker->getAnswer()[i].getNumber() == agDefender-> getAnswer()[i].getNumber()) 156 mCountofStrike++; 157 else 158 { 159 for(int j = 0; j < MAX_BALL; j++) 160 { 161 162 if (j != i && agAttacker->getAnswer()[i].getNumber() == agDefender-> getAnswer()[j].getNumber()) 163 mCountofBall++; 164 } 165 } 166 } 167 } 168 i3Out checkResult 함수가 바로 예비 정답과 실제 정답들을 비교해서 Strike가 몇 개고, Ball이몇 개인지를 계산해 주는 함수다.

[소스 설명 17-6] 사용자 클래스 - 1 237 class Human : public Player 238 { 239 242 : Player("Human") 243 {} 244 245 void setAnswer() 246 { 247 Player::setAnswer(getGuessAnswer()); 248 } 249 250 Answer* getGuessAnswer() 251 { 252 253 char oneline[50]; 254 string oneNumber; 255 char* token; 256 char seps[] = ", "; 257 Answer* answer = new Answer(); 258 setAnser 함수는 사용자에게서 답을 입력받아, 플레이어 클래스의 검증을 거쳐 플레이어 클래스에 답을 저장하는 루틴이다. getGuessAnswer 함수는 필수 함수로서, 사용자에게서 직접 입력을 받아 입력받은 숫자들로 답(answer)을 구성하는 역할을 한다.

[소스 설명 17-6] 사용자 클래스 - 2 259 cout << "Insert the answer.. (ex. 1,3,5)" << endl; 260 cin >> oneline; 261 262 if ( strcmp(oneline, "cheat") == 0 ) 263 { 264 Bot::CheatOn(); 265 cout << "CHEAT MODE ON " << endl; 266 267 cout << "Insert the answer.. (ex. 1,3,5)" << endl; 268 cin >> oneline; 269 } 270 271 272 token = strtok(oneline, seps); 273 while(token != NULL) 274 { 275 answer->addAnswer(atoi(token)); 276 token = strtok(NULL, seps); 277 } 278 279 return answer; 280 } 281 }; 282 283 사용자 입력 때,‘cheat’을 입력하면, bot이 정한 답을 볼 수 있도록 bot 클래스에 CHEAT_MODE를ON 할 수 있게 한다. “1,3,5”식으로 입력 받은 사용자 입력을‘,’를 기준으로 하나의 숫자로 쪼개어 각각을 답 으로 만드는 부분이다.

[소스 설명 17-7] 봇 클래스 190 class Bot : public Player 191 { 192 private: 193 static bool isCheatMode; 194 195 public: 196 Bot() 197 :Player("Bot") 198 {} 199 200 void setAnswer() 201 { 202 Player::setAnswer(getGuessAnswer()); 203 } 204 205 Answer* getGuessAnswer() 206 { 207 Answer* answer = new Answer(); 208 209 srand((unsigned)time(NULL)); 210 211 for (int i = 0; i < 3; i++) 212 { 213 int temp = rand() % 10; 214 215 while(!(answer->addAnswer(temp))) 216 { 217 temp = rand() % 10; 218 } 219 220 if (isCheatMode) 사용자 입력 때,‘cheat’을 입력하면, bot이 정한 답을 볼 수 있도록 bot 클래스에 CHEAT_MODE를ON 할 수 있게 한다. getGuessAnswer 함수는 사용자처럼 입력을 직접 받을 수가 없으므로, 랜덤하게 값을 생성하여 답을 만드는 역할을 한다. 지금은 단순히 랜덤값을 만들지만, 혹시 지능을 좀더 높이 고 싶다면 이 함수를 수정하면 된다.

03_실행 결과 실행 결과

IT CookBook for Beginner, C++ 기초 17장 끝 www.themegallery.com Thank You ! IT CookBook for Beginner, C++ 기초 17장 끝