반응형
빙고게임 만들기입니다.
배열과, 난수 등 모든걸 다양하게 사용해서 만들었습니다.
+ 난수로의 빙고판 생성
+ 숫자 매칭시 카운터 공격수 적용함
+ 없는 숫자 입력시 Error 표시를 내며 다시 입력하라고 설정
+ 한줄 완성시 ☆가 ★로 변함
+ ★★★★★개가 되면 게임이 끝나게 설정
사용되는 헤더 파일
헤더 | 설명 | 함수 |
studio.h | 표준 입출력 라이브러리 함수 정의 | printf, scanf, fopen,getc 등 |
stdlib.h | 정수형의 범위를 나타내는 상수들을 정의 | int atol, rand, malloc 등 |
time.h | 난수를 사용하기 위한 헤더파일 | time_t time, ctime 등 |
windows.h | text 색깔또는 헤더파일 | SetConsoleTextAttribute 등 |
빙고게임 C 코드
+ bingo.c
#include <stdio.h> // 입,출력 함수를 사용하기 위한 헤더파일
#include <stdlib.h> // EXIT_SUCCESS를 사용하기 위한 헤더파일
#include <time.h> //난수를 사용하기 위한 헤더파일
#include <windows.h> //text 색깔 넣는 헤더파일
void textcolor(int color_number); // 텍스트에 색 입히는 함수
void bingomake(int bingo[5][5]); // 빙고 판을 만드는 함수
void play(int bingo[5][5]); // 빙고 게임 실행 함수
int sumbingo(int bingo[5][5], int sum[12]); // 빙고 확인 함수
main()
{
int bingo[5][5];
//게임 규칙 및 진행 방법
textcolor(14);
printf("===== 보성 Bingo게임방법 =====\n");
printf("1. 1~25까지 정수만 입력하세요\n");
printf("2. 같은 숫자 입력시도 공격인정\n");
printf("3. 문자입력시 에러가 생깁니다.\n");
printf("4. 빙고가 5개가 되면 승리\n");
printf("5. 게임에서 지면 음료수사세요\n");
system("pause"); //키입력시 진행
system("cls"); //화면을 지운
textcolor(27);
printf(" Are you Ready? \n");
bingomake(bingo); //빙고판을 만듬
play(bingo); //게임 실행
return EXIT_SUCCESS; //정상 종료
}
/*******빙고 판을 만드는 함수*******/
void bingomake(int bingo[5][5])
{
long seed;
int i=0,j=0;
int temp[50];
int tem;
seed = time(NULL) ;
srand(seed) ; //난수 발생
//빙고판 0으로 초기화
for(i = 0 ; i<5; i++)
{
for(j = 0 ; j<5; j++)
bingo[i][j] = 0 ;
}
//temp 0으로 초기화
for(i = 0 ; i <50 ; i++)
temp[i] = 0 ;
//빙고판 1-25 까지 난수 발생
for(i = 0 ; i<5; i++)
{
for(j = 0 ; j<5; j++)
{
while(1)
{
tem = rand()%25+1;
if(temp[tem] == 0 )
{
bingo[i][j] = tem;
temp[tem] = 1;
break ;
}
}
}
}
//빙고판 출력
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
textcolor(14);
printf("%5d",bingo[i][j]);
}
printf("\n");
}
}
/*******빙고 게임 실행 함수*******/
void play(int bingo[5][5])
{
int count=0,st=1 ;
int data ;
int i, j ;
int sum[12];
//count가 5가 될때까지 무한루프
while(1)
{
//사용자의 입력을 받음
textcolor(27);
printf(" Bingo Game \n");
textcolor(47);
printf(" 1-25 까지 정수 선택 \n");
textcolor(7);
printf(">");
scanf("%d", &data) ;
system("cls");
//1-25중 정수 입력시 그 값을 가진 bingo[i][j]을 초기화 시킴
if(data>=1 && data<=25)
{
textcolor(27);
printf(" %d번째 공격 \n",st);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(bingo[i][j]==data) // 입력한 값과 이중배열값이 같으면
{
bingo[i][j] =0 ; //0으로 초기화
break ;
}
}
}
st++; //공격 순서를 센다
}
else //1-25중 정수를 입력하지 않을시
{
textcolor(27);
printf(" Error 재입력 \n",st);
}
count = sumbingo(bingo,sum); //빙고의 수를 센다
for(i = 0 ; i<5; i++) //모든 작업을 마친 빙고판을 출력한다
{
for(j = 0 ; j<5; j++)
{
textcolor(14);
printf("%5d", bingo[i][j]) ;
}
putchar('\n') ;
}
//현재 빙고 개수를 보여준다
if(count==0){ printf("빙고수: ☆ ☆ ☆ ☆ ☆\n");}
else if(count==1) printf("빙고수: ★ ☆ ☆ ☆ ☆\n");
else if(count==2) printf("빙고수: ★ ★ ☆ ☆ ☆\n");
else if(count==3) printf("빙고수: ★ ★ ★ ☆ ☆\n");
else if(count==4) printf("빙고수: ★ ★ ★ ★ ☆\n");
else if(count==5) printf("빙고수: ★ ★ ★ ★ ★\n");
if(count==5) //빙고수가 5개가 되면 승리
{
textcolor(27);
printf(" ☞ (/^▽^)/ You Win ☜ \n");
textcolor(2);
exit(0); //게임종료
}
}
}
/*******빙고확인 함수*******/
int sumbingo(int bingo[5][5], int sum[12])
{
int i,j, count=0 ;
// 가로합
sum[0] = bingo[0][0] + bingo[0][1] + bingo[0][2] + bingo[0][3] + bingo[0][4] ;
sum[1] = bingo[1][0] + bingo[1][1] + bingo[1][2] + bingo[1][3] + bingo[1][4] ;
sum[2] = bingo[2][0] + bingo[2][1] + bingo[2][2] + bingo[2][3] + bingo[2][4] ;
sum[3] = bingo[3][0] + bingo[3][1] + bingo[3][2] + bingo[3][3] + bingo[3][4] ;
sum[4] = bingo[4][0] + bingo[4][1] + bingo[4][2] + bingo[4][3] + bingo[4][4] ;
// 세로합
sum[5] = bingo[0][0] + bingo[1][0] + bingo[2][0] + bingo[3][0] + bingo[4][0] ;
sum[6] = bingo[0][1] + bingo[1][1] + bingo[2][1] + bingo[3][1] + bingo[4][1] ;
sum[7] = bingo[0][2] + bingo[1][2] + bingo[2][2] + bingo[3][2] + bingo[4][2] ;
sum[8] = bingo[0][3] + bingo[1][3] + bingo[2][3] + bingo[3][3] + bingo[4][3] ;
sum[9] = bingo[0][4] + bingo[1][4] + bingo[2][4] + bingo[3][4] + bingo[4][4] ;
// 대각선 합
sum[10] = bingo[0][4] + bingo[1][3] + bingo[2][2] + bingo[3][1] + bingo[4][0] ;
sum[11] = bingo[0][0] + bingo[1][1] + bingo[2][2] + bingo[3][3] + bingo[4][4] ;
for(i = 0 ; i<12 ; i++) sum[i] = 0; // 0으로 다 초기화
for(i = 0 ; i< 5 ; i++)
{
for(j = 0 ; j < 5 ; j++)
{
sum[i]=sum[i]+bingo[i][j];
sum[i+5]=sum[i+5]+bingo[j][i];
}
sum[10] += bingo[i][4-i] ; //왼쪽 대각선의 합
sum[11] += bingo[i][i] ; //오른쪽 대각선의 합
}
for(i = 0 ; i<12 ; i++) //위에서 sum[i]이 0인 갯수만큼 count를 +1한다 (빙고수)
if( sum[i] == 0) count ++ ;
return count ; //count를 반환한다
}
/*******색깔을 입히기 위한 함수 (데코레이션 용)*******/
void textcolor(int color_number)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color_number);
}
실행 결과
반응형
'IT STUDY > Language' 카테고리의 다른 글
[python] 파이참(PyCharm) 설치 및 설정 방법 (2) | 2020.04.14 |
---|---|
[C 응용] fopen을 이용한 txt에서의 연산 (0) | 2013.08.20 |
[C 기초] fopen,fprintf,fclose를 이용한 txt에 data담기 (0) | 2013.08.20 |
[C 활용] 야구게임 만들기 (0) | 2013.08.20 |
[C 기초] 근의 공식을 이용한 이차방정식 구하기 (0) | 2013.08.20 |