/*
다음과 같은 숫자판이 있다고 가정하고, 2명이 번갈아 숫자 판 위에 동전을 던져서
위치한 숫자만큼의 배수로 금액을 누적하는 게임 프로그램을 작성하시오.
동전의 위치는 난수로 결정하며, 숫자판의 숫자는 매 시행마다 임의로 배치하시오
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <Windows.h>
void instruction(void);
void gotoxy(int x, int y);
void draw_check02(int c, int r);
int *random_number(int *arr);
int throw_coin(int *arr);
void game_play(void);
void show_money(int *player[2][20], int player_money[2]);
void conclusion(int *player[2][20], int player_money[2]);
int main(void)
{
srand((unsigned)time(NULL));
instruction();
game_play();
return 0;
}
void instruction(void)
{
printf("숫자판 게임\n\n");
printf("3*3 숫자판에 동전을 던져 나온 숫자만큼의 배수로 금액을 누적하는 게임\n");
printf("2명이 번갈아가면서 5번 던진 결과 더 높은 금액을 보유한 사람이 승리!\n");
printf("동전을 던질 때마다 숫자판은 랜덤으로 생성됩니다\n");
printf("인지하셨다면 키보드를 누르세요\n");
getch();
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
/*
확장된 바둑판 그리기 함수 draw_check02
*/
void draw_check02(int c, int r)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[12];
for (i = 1; i < 12; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c - 1; i++)
{
printf("%c%c", a, b[1]);
printf("%c%c", a, b[8]);
}
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r - 1; i++)
{
printf("%c%c", a, b[2]);;
for (j = 0; j < c; j++)
{
printf(" ");
printf("%c%c", a, b[2]);
}
printf("\n");
printf("%c%c", a, b[7]);
for (j = 0; j < c - 1; j++)
{
printf("%c%c", a, b[1]);
printf("%c%c", a, b[11]);
}
printf("%c%c", a, b[1]);
printf("%c%c", a, b[9]);
printf("\n");
}
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
{
printf(" ");
printf("%c%c", a, b[2]);
}
printf("\n");
printf("%c%c", a, b[6]);
for (i = 0; i < c - 1; i++)
{
printf("%c%c", a, b[1]);
printf("%c%c", a, b[10]);
}
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
/*
숫자판에 랜덤으로 숫자 생성
*/
int *random_number(int *arr)
{
int number[10] = { 0 }; //숫자가 만들어졌는지 여부
int random; //랜덤으로 생성된 숫자
int col = 3;
int count = 0;
for (int i = 0; i < 9; i++)
{
do
{
random = rand() % 9 + 1;
} while (number[random]);
gotoxy(4 * ((i % 3) + 1) - 1, col);
printf("%d", random);
number[random] ++;
arr[count++] = random;
if (i % 3 == 2) //3*3
col += 2;
}
return arr;
}
/*
숫자판에 동전 던지고 해당 숫자 리턴
*/
int throw_coin(int *arr)
{
int rand1 = rand() % 3, rand2 = rand() % 3;
gotoxy(4 * (rand1 + 1) - 1, (rand2 + 1) * 2 + 1);
printf("●");
switch (rand1)
{
case 0:
if (rand2 == 0)
return arr[0];
else if (rand2 == 1)
return arr[1];
else if (rand2 == 2)
return arr[2];
case 1:
if (rand2 == 0)
return arr[3];
else if (rand2 == 1)
return arr[4];
else if (rand2 == 2)
return arr[5];
case 2:
if (rand2 == 0)
return arr[6];
else if (rand2 == 1)
return arr[7];
else if (rand2 == 2)
return arr[8];
}
}
/*
게임 진행
*/
void game_play(void)
{
char *player[2][20]; //사용자 두명
int player_money[2] = { 10000, 10000 }; //둘다 만원씩 갖고 있었음
int count = 0;
int turn = 0; //사용자 순서
int *arr=(int*)malloc(sizeof(int)*9); //생성된 숫자의 순서 저장하는 배열
for (int i = 0; i < 2; i++)
{
printf("%d번째 선수 이름 입력: ", i + 1);
scanf("%s", player[i]);
}
while (count < 5)
{
system("cls");
printf("%s 순서\n", player[turn]);
draw_check02(3, 3);
arr = random_number(arr); //숫자판 순서 저장
show_money(player, player_money);
gotoxy(1, 10);
printf("동전 던지려면 키보드를 누르세요");
getch();
gotoxy(1, 10);
printf(" ");
int multiply = throw_coin(arr);
gotoxy(1, 10);
printf("동전이 놓인 숫자: %d", multiply);
Sleep(1000); //delay
player_money[turn] *= multiply; //돈 계산
show_money(player, player_money);
if (turn == 1)
count++;
turn = 1 - turn;
}
conclusion(player, player_money);
free(arr);
}
/*
현재 가지고 있는 돈 출력
*/
void show_money(int *player[2][20], int player_money[2])
{
gotoxy(20, 3);
printf("보유하고 있는 돈");
gotoxy(20, 4);
printf("%s: %d원", player[0], player_money[0]);
gotoxy(20, 5);
printf("%s: %d원", player[1], player_money[1]);
}
/*
게임 승패 여부
*/
void conclusion(int *player[2][20], int player_money[2])
{
gotoxy(1, 10);
if (player_money[0] == player_money[1])
printf("%s와 %s는 동일한 돈을 가지고 있습니다. 비겼습니다\n", player[0], player[1]);
else if (player_money[0] > player_money[1])
printf("%s가 %s보다 많은 돈을 가지고 있습니다. %s가 이겼습니다\n", player[0], player[1], player[0]);
else
printf("%s가 %s보다 많은 돈을 가지고 있습니다. %s가 이겼습니다\n", player[1], player[0], player[1]);
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 명품 C언어 프로젝트 안기수 저
'C > 명품 C언어 프로젝트(안기수 저)' 카테고리의 다른 글
명품 C언어 프로젝트 8.9장 주사위로 과자먹기 게임 응용문제 (9) | 2017.09.13 |
---|---|
명품 C언어 프로젝트 8.9장 주사위로 과자먹기 게임 (0) | 2017.09.13 |
명품 C언어 프로젝트 8.8장 슬롯 머신 응용문제 (7) | 2017.09.12 |
명품 C언어 프로젝트 8.8장 슬롯 머신 (0) | 2017.09.11 |
명품 C언어 프로젝트 8.7장 보물찾기 프로그램 응용 (2) | 2017.09.08 |