#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
void bingo_rand(int (*ptr)[5]); // 빙고판 입력
void bingo_print(int (*ptr)[5], int user); // 빙고판 출력
void bingo_game(int (*ptr)[5], int (*ptr2)[5]); // 빙고 게임 시작
int bingo_check(int (*ptr)[5]); // 빙고 확인
void bingo_sign(int (*ptr)[5], int (*ptr2)[5], int user); // 빙고 숫자 체크
int bingo_win(int user, int bingo, int win); // 빙고 승자 판별
/*--메인------------------------------------------------------*/
void main()
{
int user1[5][5], user2[5][5], menu, flag=0;
char prt;
srand((unsigned)time(NULL));
do {
system("cls");
printf("\n\t< Bingo Game >\n\n");
printf(" 1. 빙고판 입력\n 2. 빙고판 출력\n 3. 게임 시작\n 4. 나가기\n -> [ ]\b\b");
scanf("%d", &menu);
fflush(stdin);
switch(menu)
{
case 1 : // 빙고판 입력
bingo_rand(user1);
bingo_rand(user2);
flag = 1;
printf("\n\n\t\tuser1과 user2의 빙고판 입력이 완료 되었습니다!\n\n\n\t\t아무키나 누르면 메뉴로 돌아갑니다.\n");
getchar();
break;
case 2 : // 빙고판 출력
if(flag==0)
printf("\n\n\t\t아직 빙고판 입력을 안하셨습니다.\n");
else {
system("cls");
printf("\n 어떤 사용자의 빙고판을 출력 하시겠습니까?\n\n");
printf(" A. user1\n B. user2\n -> [ ]\b\b");
scanf("%c", &prt);
fflush(stdin);
if(prt=='a' || prt=='A')
bingo_print(user1, 1);
else if(prt=='b' || prt=='B')
bingo_print(user2, 2);
else
printf("\n\n\t\t잘못 입력 하셨습니다.\n");
}
printf("\n\n\t\t아무키나 누르면 메뉴로 돌아갑니다.\n");
getchar();
break;
case 3 : // 게임 시작
if(flag==0) {
printf("\n\n\t\t아직 빙고판 입력을 안하셨습니다.\n\n\n\t\t아무키나 누르면 메뉴로 돌아갑니다.\n");
getchar();
}
else if(flag==1) {
bingo_game(user1, user2);
flag = 2;
}
else if(flag==2) {
printf("\n\n\t\t이미 게임을 하셨습니다.\n\n\n\t\t빙고판을 새로 입력하시고 시작하세요.\n");
printf("\n\n\t\t아무키나 누르면 메뉴로 돌아갑니다.\n");
getchar();
}
break;
default : break;
}
} while(menu!=4);
}
/*--빙고판 입력-----------------------------------------------*/
void bingo_rand(int (*ptr)[5])
{
int temp[25];
int i, j, cnt=0, flag=0;
for(i=0; i<5; i++) {
for(j=0; j<5; j++) {
cnt = i * 5 + j; // temp[]에 들어갈 위치
ptr[i][j] = rand() % 50 + 1; // 랜덤 숫자
temp[cnt] = ptr[i][j]; // 복사
while(cnt) // 중복 값 확인
if(ptr[i][j] == temp[--cnt])
flag++;
}
if(flag) i--; // 중복 값 존재
flag = 0;
}
}
/*--빙고판 출력-----------------------------------------------*/
void bingo_print(int (*ptr)[5], int user)
{
int i, j;
system("cls");
printf("\n\n\t <user%d>\n", user);
printf("\n --------------------------\n");
for(i=0; i<5; i++) {
printf(" |");
for(j=0; j<5; j++) {
if(ptr[i][j] == 0) // 선택한 칸은 '*' 출력
printf(" * |");
else
printf("%3d |", ptr[i][j]);
}
printf("\n --------------------------\n");
}
}
/*--빙고 게임 시작--------------------------------------------*/
void bingo_game(int (*ptr)[5], int (*ptr2)[5])
{
int bingo1=0, bingo2=0, win1=0, win2=0;
while(1) { // 승리한 사람이 있을 때까지
//--------------------------------------------- user1 //
system("cls");
bingo_print(ptr, 1); // 현재 빙고판 출력
bingo_sign(ptr, ptr2, 1); // 숫자 선택
bingo1 = bingo_check(ptr); // 빙고 확인
win1 = bingo_win(1, bingo1, win1); // 승리 확인
if(win1) break;
printf("\n\n\t\t아무키나 누르면 상대방의 순서로 넘어갑니다.\n");
getchar();
//--------------------------------------------- user2 //
system("cls");
bingo_print(ptr2, 2); // 현재 빙고판 출력
bingo_sign(ptr2, ptr, 2); // 숫자 선택
bingo2 = bingo_check(ptr2); // 빙고 확인
win2 = bingo_win(2, bingo2, win2); // 승리 확인
if(win2) break;
printf("\n\n\t\t아무키나 누르면 상대방의 순서로 넘어갑니다.\n");
getchar();
}
}
/*--빙고 확인-------------------------------------------------*/
int bingo_check(int (*ptr)[5])
{
int i, j, cnt1=0, cnt2=0, cnt3=0, cnt4=0, bingo=0, line=0;
for(i=0; i<5; i++) {
for(j=0; j<5; j++) {
if(ptr[i][j]==0) // 가로 빙고
cnt1++;
if(ptr[j][i]==0) // 세로 빙고
cnt2++;
}
if(cnt1==5) bingo++;
if(cnt2==5) bingo++;
cnt1=0; cnt2=0;
}
for(i=0; i<5; i++) {
if(ptr[i][i]==0) // 대각선 빙고 (왼쪽->오른쪽)
cnt3++;
if(ptr[i][4-i]==0) // 대각선 빙고 (오른쪽->왼쪽)
cnt4++;
}
if(cnt3==5) bingo++;
if(cnt4==5) bingo++;
printf("\n\n\t\t현재 빙고 [%d] 입니다.", bingo);
return bingo;
}
/*--빙고 숫자 체크--------------------------------------------*/
void bingo_sign(int (*ptr)[5], int (*ptr2)[5], int user)
{
int i, j, num, flag=0;
while(1) {
printf("\n 숫자를 선택 하세요 -> [ ]\b\b\b");
scanf("%d", &num);
fflush(stdin);
if(num) { // 숫자 0은 제외
for(i=0; i<5; i++) { // 선택한 숫자 '*' 표시
for(j=0; j<5; j++) {
if(ptr[i][j] == num) { // 현재 user
ptr[i][j] = 0;
flag = 1;
}
}
}
}
if(!flag)
printf("\n 빙고판에 없는 숫자입니다. 다시 입력하세요!\n");
else { // 현재 user에게 있는 숫자일때만 '*' 표시
for(i=0; i<5; i++) {
for(j=0; j<5; j++) {
if(ptr2[i][j] == num) // 상대 user
ptr2[i][j] = 0;
}
}
break;
}
}
bingo_print(ptr, user); // '*' 체크 된 빙고판 출력
}
/*--빙고 승자 판별--------------------------------------------*/
int bingo_win(int user, int bingo, int win)
{
if(bingo>=5) {
win = 1;
printf("\n\n\t\t<user%d> 승리 !!!!!!!!!!!!!!!", user);
printf("\n\n\t\t아무키나 누르면 메뉴로 돌아갑니다.\n");
getchar();
}
return win;
}
'삽질 > Com' 카테고리의 다른 글
트리 (0) | 2009.12.06 |
---|---|
이중연결리스트 (0) | 2009.12.06 |
주석 삭제 프로그램 (0) | 2009.12.06 |
행맨게임 (0) | 2009.10.24 |
프로그래밍 전문가가 되기 위한 Dicajohn의 7가지 방법 (0) | 2009.10.24 |
댓글