게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c로 야구게임을 만드는데요
게시물ID : jisik_111041짧은주소 복사하기
작성자 : ★☆
추천 : 1
조회수 : 595회
댓글수 : 4개
등록시간 : 2011/10/21 01:12:22
// baseball.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <stdlib.h>
#include <time.h>
#include <math.h>

void makeSecret(int* nSecretNum);
int CheckYourNum(int* nSecretNum , int* nYourNum);


int main(int argc, char* argv[])
{
int  nSecretNum[3] = {0} ,    // 컴퓨터가 생성할 secret 넘버를 저장할 변수배열 
 nYourNum[3]   = {0} ,    // 사용자가 입력할 변수 
 nResult       = 0   ,    // secret 넘버와 사용자 입력변수의 비교결과를 저장할 변수 , CheckYourNum 함수의 리턴값을 저장함 
 nGaemCount    = 1   ;    // 사용자가 한번 맞추기 시도할때 마다 count값이 증가하여 , 몇번만에 secret 넘버를 맞추는지 나타낸다.

char cGaemPlay ='Y';          // 게임이 끝나후 계속 여부를 확인할때 사용하는 변수 

srand(time(0));


while(cGaemPlay == 'Y')
{
nGaemCount = 1 ;
makeSecret(nSecretNum) ;     // 게임 시작과 동시에 컴퓨터는 3자리 secret 넘버를 생성한다. 
while(1)
{
printf("Input Secret Number(ex:4 5 6):");
scanf("%d %d %d", &nYourNum[0] , &nYourNum[1] ,&nYourNum[2] );                           // 사용자는 3자리 숫자를 입력하여 
                                                               // 컴퓨터의 secret 넘버를 맞춘다. 


nResult= CheckYourNum(nSecretNum ,nYourNum);       // 사용자가 입력한 숫자와 컴퓨터의 secret 넘버를 
                                                   // 비교하여 strike와 ball의 갯수를 리턴한다.   
                                                   // 1s1b => return 11 ,   3s0s => return 30 , 
                                                   // 즉 strike는 10자리수 ball은 1의자리수로 조합하여 int 형으로 리턴한다. 

printf("[%02d] %d Strike %d ball\n\n", nGaemCount++, nResult /10 , nResult %10 ); // nGameCount는 사용자 몇번의 입력만에 secret 넘버를 맞추는지 세는 count 변수이다. 

if(nResult == 30)  //  CheckYourNum 함수의 리턴값이 30 이면 3strike 0 ball 이므로  사용자가 컴퓨터 secret 넘버를 맞추었으므로 게임이 종료된다. 
{
puts("축하합니다. 시크릿넘버를 맞추셨습니다");
break;
}
}
puts("게임을 계속하시겠습니까?(Y/N)");
cGaemPlay = getchar();

}



return 0;
}

int CheckYourNum(int* nSecretNum , int* nYourNum)
{
  // nSecretNum 포인터는 main함수에서 컴퓨터가 생성해서 저장한 int형 배열변수를 가리키는 포인터변수
  // nYourNum 포인터변수는 main함수에서 사용자가 입력한 숫자 3개를 저장한 배열변수를 가리키는 포인터변수
  // 두개의 배열을 각각 가리키는 포인터변수를 통해 상호비교하여 strike 와 ball의 갯수를 리턴한다.
 
 int check = 0;
  int i, j;
  for(i = 0; i < 3; i++)
  {
   for(j = 0; j < 3; j++)
   {
    if(nSecretNum[i] == nYourNum[j])
    {
     if(i == j)
      check += 10;
     else
      check += 1;
 
    break;
    }
   }
  } 
  // return 값은  strike , ball 의 갯수를 십단위 숫자로 리턴한다.
  // 1Strike 1Ball -> return 11 ;
  // 3Strike 0Ball -> return 30 ;
  // 2Strike 1Ball -> return 21 ;  // 숫자는 당연히 변수에 할당해서 변수를 리턴한다.
  return check;
 }
 
까지 했는데 실행은 되는데 하면은 정답은안되고 2스트라이크까지만 되네요 ;ㅁ;...
어디가 잘못됬는지 찾을수가없에요 ㅜㅜ....

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호