예전 카페에서 폐지 공지가 와서 자료를 옮겨 놓습니다.
다른 여러 언어로 제어문 연습하기 좋은 간단한 로직이라 생각되네요
예제코드만 남아있었네요. 코드를 보고 읽는 것도 연습이 되니 문제가 코드에서 잘 나왔는지 확인해보시고, 거꾸로 문제를 보고 코드를 만들어 보는 것도 추천합니다.
코드에서 문제 추출 내용
2~4 자리의 입력받아서 갯수만큼 임의의 정수(1~9 사이 수 생성)를 생성하고 해당 갯수의 수을 9번까지 입력받아서 같은 자리에 숫자가 맞으면 스트라익, 다른 자리에 나오면 볼, 다른수면 아웃처리해서 알려준다.
C로 구현코드
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void main()
{
// 자릿수 변수 cc
// 카운터 변수 : 스트라익 cs, 볼 cb, 아웃 co
int a[5]={0},b[5]={0};
int cc, cs, cb, co;
int i, j, k; //for문 i,j 게임진행으로 인한 횟수 k
char Yn=1;
StartGame:
//게임 시작
printf("\t********************\n");
printf("\t****숫자야구게임****\n");
printf("\t********************\n\n\n");
printf("게임규칙 : 9회 이전에 3진을 ^^\n\n\n");
// 숫자 갯수 입력
while(1){
printf("숫자갯수 선택(2~4):");
scanf("%d",&cc);
// 자릿수 검정 :유효값 확인및 재입력 요청
if(cc>=2&&cc<=4) break;
else printf("\n -.-;; 2~4 사이의 숫자를 입력하세요\n");
}
//***** 게임 시작 숫자 입력과 카운터*****
printf("\n\t PLAY BALL\n");
// 임의의 수 생성
srand( (unsigned) time (NULL)); //rand 초기화
for(i=1; i<=cc; i++)
{
a[i]=rand()%10; //1~9 사이 수 생성
}
// 유효값 확인
while(1){
Yn=0;
for(i=1;i<=cc;i++)
{
for(j=i+1;j<=cc;j++)
{
if(a[i]==a[j])a[j]=rand()%10;
if(a[i]!=a[j])Yn++;
}
// printf("%d 번째 수 : %d \t\n", i, a[i]); //버그 수정용 출력
}
if(Yn>=(cc-1))break;
}
//1회부터 9회까지
for(k=1;k<10;k++)
{
//초기화
cs=0; cb=0; co=0;
// 숫자 입력
printf("%d 개의 수를 입력해주세요\n",cc);
for(i=1;i<=cc;i++)
{
scanf("%d",&b[i]);
}
// 입력 숫자 처리
for(i=1;i<=cc;i++)
{
for(j=1;j<=cc;j++)
{
if(a[i]==b[j])
{
if(i==j){cs++;}else {cb++;}
}
}
}
co=cc-cs-cb;
// 처리 결과 출력
printf("\n %d 회\n",k );
if(cs!=0)
printf("\t %d 스트라이크",cs);
if(cb!=0)
printf("\t %d 볼",cb);
if(co!=0)
printf("\t %d 아웃",co);
printf("\n");
// 게임 종료 규칙 확인 후 종료
if(cs==cc) break;
if(k==9) printf("\n 9회까지 끝났습니다.");
}
// 새게임 확인후 재시작 또는 게임종료
printf("\n재시작 하시겠습니까?%(재시작=3%)");
scanf("%d",&Yn);
if(Yn==3) goto StartGame;
}