월레스와 그로밋: 코딩의 날

rsp_game(묵찌빠 게임) 본문

Etc/C

rsp_game(묵찌빠 게임)

구운 감자 2025. 1. 26. 18:48

main.c

#include "rsp.h"

int main()
{
	main_rsp();

	return 0;
}

rps.h

#define _CRT_SECURE_NO_WARNINGS
#define LINE printf("--------------------------------------------------------------\n");

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int input_num();
int randnum_computer();
void main_rsp();
void repeat(player_num, computer_num);
void main_repeat(int* player_num, int* computer_num);
int player_winrsp(player_num, computer_num);
void computer_winrsp(computer_num, player_num);
void show_rsp();

 

rsp.c

#include "rsp.h"

char str[4][10] = {"종료", "가위", "바위", "보"};

// 0: 종료 1: 가위 2: 바위 3: 보
void show_rsp()
{
	for (int i = 0; i < 4; i++)
		printf("%d. %s\t", i, str[i]);
}

// 입력
int input_num()
{
	int input_playernum;
	scanf("%d", &input_playernum);

	return input_playernum;
}

// 컴퓨터 랜덤함수 1,2,3
int randnum_computer()
{
	srand(time(NULL));
	int input_computernum;
	input_computernum = rand() % 3 + 1;

	return input_computernum;
}

// 구문반복
void repeat(player_num, computer_num)
{
	if (player_num == 1 || computer_num == 1)
		printf("찌에 찌에 . . .\n");
	else if (player_num == 2 || computer_num == 2)
		printf("묵에 묵에 . . .\n");
	else if (player_num == 3 || computer_num == 3)
		printf("빠에 빠에 . . .\n");
}

// 컴퓨터 우선권
void computer_winrsp(computer_num, player_num)
{
	do
	{
		repeat(computer_num);
		main_repeat(&player_num, &computer_num);
		if (computer_num == player_num)
		{
			printf("컴퓨터 승리!\n\n");
			break;
		}
		else if (player_num - computer_num == 1 || player_num - computer_num == -2)
			break;
	} while (1);
	if (player_num - computer_num == 1 || player_num - computer_num == -2)
		player_winrsp(player_num, computer_num);
}

// 플레이어 우선권
int player_winrsp(player_num, computer_num, win_count)
{
	do
	{
		repeat(player_num);
		main_repeat(&player_num, &computer_num);
		if (computer_num == player_num)
		{
			win_count++;
			printf("플레이어 승리!\n\n");
			break;
		}
		else if (computer_num - player_num == 1 || computer_num - player_num == -2)
			break;
	} while (1);

	if (computer_num - player_num == 1 || computer_num - player_num == -2)
		computer_winrsp(computer_num, player_num);

	return win_count;
}

// 반복
void main_repeat(int* player_num, int* computer_num)
{
	printf("무엇을 내시겠습니까? >> ");
	*player_num = input_num();
	*computer_num = randnum_computer();
	
	if (*player_num == 0)
		printf("\n종료하겠습니다.\n");
	else
		printf("컴퓨터 : %s!\t플레이어 : %s!\n\n", str[*computer_num], str[*player_num]);
}


// 메인 틀 반복
void main_rsp()
{
	int player_num, computer_num;
	show_rsp();
	printf("\n\n");

	int game_count = 1;
	int win_count = 0;
	double win_percentage;

	// 묵찌빠 게임 계속 반복
	do
	{
		printf("%d번째 판 시작 하겠습니다.\n", game_count);
		LINE;

		//가위바위보 비길 시 반복
		do
		{
			printf("안내면 진다 가위바위 . . .\n");
			main_repeat(&player_num, &computer_num);
			if (player_num == 0)
				break;
		} while (player_num == computer_num);
		if (player_num == 0)
			break;
		//1<2, 2<3, 3<1
		// 플레이어 우선
		if (player_num - computer_num == 1 || player_num - computer_num == -2)
			win_count = player_winrsp(player_num, computer_num, win_count);
		// 컴퓨터 우선
		else if (computer_num - player_num == 1 || computer_num - player_num == -2)
			computer_winrsp(computer_num, player_num);

		game_count++;

	} while (1);

	game_count -= 1;

	win_percentage = ((double)win_count / game_count) * 100;

	LINE;
	printf("총 %d판을 하였고 승률은 %.2f%%입니다.\n", game_count, win_percentage);
}

 


output

0. 종료 1. 가위 2. 바위 3. 보

1번째 판 시작 하겠습니다.
--------------------------------------------------------------
안내면 진다 가위바위 . . .
무엇을 내시겠습니까? >> 1 
컴퓨터 : 바위!  플레이어 : 가위!

묵에 묵에 . . .
무엇을 내시겠습니까? >> 1
컴퓨터 : 바위!  플레이어 : 가위!

묵에 묵에 . . .
무엇을 내시겠습니까? >> 1
컴퓨터 : 보!    플레이어 : 가위!

찌에 찌에 . . .
무엇을 내시겠습니까? >> 3
컴퓨터 : 가위!  플레이어 : 보!

찌에 찌에 . . .
무엇을 내시겠습니까? >> 3
컴퓨터 : 바위!  플레이어 : 보!

빠에 빠에 . . .
무엇을 내시겠습니까? >> 2
컴퓨터 : 보!    플레이어 : 바위!

빠에 빠에 . . .
무엇을 내시겠습니까? >> 2
컴퓨터 : 가위!  플레이어 : 바위!

묵에 묵에 . . .
무엇을 내시겠습니까? >> 1
컴퓨터 : 바위!  플레이어 : 가위!

묵에 묵에 . . .
무엇을 내시겠습니까? >> 1
컴퓨터 : 가위!  플레이어 : 가위!

컴퓨터 승리!

2번째 판 시작 하겠습니다.
--------------------------------------------------------------
안내면 진다 가위바위 . . .
무엇을 내시겠습니까? >> 3
컴퓨터 : 보!    플레이어 : 보!

안내면 진다 가위바위 . . .
무엇을 내시겠습니까? >> 3
컴퓨터 : 보!    플레이어 : 보!

안내면 진다 가위바위 . . .
무엇을 내시겠습니까? >> 2
컴퓨터 : 가위!  플레이어 : 바위!

묵에 묵에 . . .
무엇을 내시겠습니까? >> 2
컴퓨터 : 바위!  플레이어 : 바위!

플레이어 승리!

3번째 판 시작 하겠습니다.
--------------------------------------------------------------
안내면 진다 가위바위 . . .
무엇을 내시겠습니까? >> 0

종료하겠습니다.
--------------------------------------------------------------
총 2판을 하였고 승률은 50.00%입니다.

'Etc > C' 카테고리의 다른 글

kiosk(카페 키오스크)  (0) 2025.01.26
hourglass(모래시계)  (0) 2025.01.26
369  (0) 2025.01.26
스택(stack)  (0) 2023.07.31
이중연결리스트 사용 예시 (대기자명단)  (0) 2023.07.27