石はさみ布-only code


//***Ifinity 묵찌빠 게임***
//
// ---순서도---
// 1. 임의로 상대의 가위 바위 보 중에서 하나를 지정한다.
// 2. 플레이어가 가위 바위 보 중에서 하나를 선택한다.
// 3. 같은 값일 경우 = 다시 / 다른 값일 경우 = 우세와 비우세에 대한 값을 저장하고 다음 단계로 넘어간다.
// 4. 다시 가위 바위 보를 한다. (안내 멘트를 달리한다.)
// 5. 값이 같을 경우 = 우세값에 의해 승패가 갈린다.	패배의 경우 최종 스코어를 출력하고 프로그램 종료
//	  값이 다를 경우 = 두 값을 비교하여 우세값을 변경한다. 다시 5번으로 돌아간다.
// 
// ---점수 획득 조건---
// 승리 - 30점
// 패배 - 모든 점수 소진
// 2페이즈에서 유지: -5점
//
// ---변수 목록---
// int player, enemy: 가위 바위 보을 저장할 값		0->가위, 1->바위, 2->보 / 0->묵, 1->찌, 2->빠
// bool superiority: 우세값 참->플레이어 우세 / 거짓->상대 우세
// int score: 점수를 저장할 값
//
// ---함수 목록---
// void enemy_chat(int _situation);									: 상대(ai)의 대사를 관리하는 함수 _situation 0-승리 1-우세전환 2-열세전환 3-패배
// int result_p1(int _player, int _enemy, bool& _superiority);		: 페이즈1의 승부 결과를 판가름해주고 우세값을 변경하는 함수
// int result_p2(int _player, int _enemy, bool& _superiority);		: 페이즈2의 승부 결과를 판가름해주고 우세값을 변경하며 점수를 반환하는 함수
// int suffle_rand(int _maxNum);									: num보다 작은 임의 수를 반환하는 함수
// void screen_title();												: 타이틀 화면을 출력하는 함수
// void screen_HTP();												: 게임 규칙을 설명하는 창을 출력하는 함수


#include <stdio.h>
#include <random>
#include <time.h>
#include <stdlib.h>
#include <Windows.h>		//cmd 명령어를 사용하기 위한 헤더파일

void screen_HTP()
{
	system("cls");
	printf("일반적인 묵찌빠 게임과 규칙은 동일합니다.\n");
	printf("게임 목적: 연승을 해서 최대 점수를 쌓기.\n");
	printf("패배 조건: 묵찌빠 게임에서 패배 or 점수 소진.\n");
	printf("점수 규칙: 승리=30점 / 묵찌빠에서 공격권을 뺏길 때 = -5점\n");
	Sleep(5000);
}

void screen_title()
{
	int tmp = 0;			//커서 변수

	while (1)
	{
		//title screen
		system("cls");			//cmd 창을 정리하는 명령어 (windows.h)
		printf("┌────────────────────────────────────────┐\n");
		printf("│                                        │\n");
		printf("             Infinity 묵찌빠               \n");
		printf("│                                        │\n");
		printf("└────────────────────────────────────────┘\n\n");
		printf("1. Start game\n");
		printf("2. How to play\n\n");
		printf("Select menu: ");
		scanf_s("%d", &tmp);

		if (tmp == 1)
		{
			break;
		}
		else if (tmp == 2)
		{
			screen_HTP();
		}
		else
		{
			system("cls");
			printf("Error: 잘못된 메뉴 번호를 입력했습니다. 다시 입력해주세요.");
			Sleep(2000);												//cmd 2초동안 일시정지
		}
	}
}

int suffle_rand(int _maxNum)
{
	srand((unsigned int)time(NULL));
	int output = rand() % _maxNum;

	return output;
}

void enemy_chat(int _situation)
{
	int rand = suffle_rand(4);

	//_situation 0-승리 1-우세전환 2-열세전환 3-패배
	if (_situation == 0)
	{
		switch(rand)
		{
		case 0:
			printf("상대: 크윽.. 다음판엔 내가 이겨주마!\n");
			break;
		case 1:
			printf("상대: 운이 나빴을 뿐이야, 다시해!\n");
			break;
		case 2:
			printf("상대: 보기완 달리 좀 하는군..\n");
			break;
		}
	}
	else if (_situation == 1)
	{
		switch (rand)
		{
		case 0:
			printf("상대: 이런이런.. 너가 공격할 차례로군.\n");
			break;
		case 1:
			printf("상대: 어라? 이게 아닌데..\n");
			break;
		case 2:
			printf("상대: 네녀석 꽤나 하는군\n");
			break;
		}
	}
	else if (_situation == 2)
	{
		switch (rand)
		{
		case 0:
			printf("상대: 하하! 네 녀석의 패배가 뻔히 보이는군.\n");
			break;
		case 1:
			printf("상대: 어이 잘 좀 해보라고~\n");
			break;
		case 2:
			printf("상대: 승기는 내가 잡았다. 이제 끝이다!\n");
			break;
		}
	}
	else if (_situation == 3)
	{
		switch (rand)
		{
		case 0:
			printf("상대: So easy\n");
			break;
		case 1:
			printf("상대: 우는거 아니지?ㅋㅋ\n");
			break;
		case 2:
			printf("상대: 이기는 것도 지겹다 지겨워~\n");
			break;
		}
	}
	Sleep(2000);
}

//_player, _enemy의 값에 대한 정보 -> 0=가위 1=바위 2=보
void result_p1(int _player, int _enemy, int& _superiority)
{
	system("cls");
	switch (_player)
	{
	case 0:
		printf("플레이어: 가위\n");
		if (_enemy == 0)
		{
			printf(" 상 대 : 가위\n");
			printf("다시~\n");
		}
		else if (_enemy == 1)
		{
			printf(" 상 대 : 바위\n");
			printf("플레이어 수비!\n");
			_superiority = 2;
		}
		else
		{
			printf(" 상 대 : 보\n");
			printf("플레이어 공격!\n");
			_superiority = 1;
		}
		break;

	case 1:
		printf("플레이어: 바위\n");
		if (_enemy == 0)
		{
			printf(" 상 대 : 가위\n");
			printf("플레이어 공격!\n");
			_superiority = 1;
		}
		else if (_enemy == 1)
		{
			printf(" 상 대 : 바위\n");
			printf("다시~\n");
		}
		else
		{
			printf(" 상 대 : 보\n");
			printf("플레이어 수비!\n");
			_superiority = 2;
		}
		break;

	case 2:
		printf("플레이어: 보\n");
		if (_enemy == 0)
		{
			printf(" 상 대 : 가위\n");
			printf("플레이어 수비!\n");
			_superiority = 2;
		}
		else if (_enemy == 1)
		{
			printf(" 상 대 : 바위\n");
			printf("플레이어 공격!\n");
			_superiority = 1;
		}
		else
		{
			printf(" 상 대 : 보\n");
			printf("다시~\n");
		}
		break;
	}
	Sleep(2000);

}

//_player, _enemy의 값에 대한 정보 -> 0=묵 1=찌 2=빠
int result_p2(int _player, int _enemy, int& _superiority)
{
	int win = 0;
	int output = 0;

	system("cls");
	switch (_player)
	{
	case 0:
		printf("플레이어: 묵\n");
		if (_enemy == 0)
		{
			printf(" 상 대 : 묵\n");
			win = _superiority;
			_superiority = 0;
		}
		else if (_enemy == 1)
		{
			printf(" 상 대 : 찌\n");
			_superiority = 1;
		}
		else
		{
			printf(" 상 대 : 빠\n");
			_superiority = 2;
		}
		break;

	case 1:
		printf("플레이어: 찌\n");
		if (_enemy == 0)
		{
			printf(" 상 대 : 묵\n");
			_superiority = 2;
		}
		else if (_enemy == 1)
		{
			printf(" 상 대 : 찌\n");
			win = _superiority;
			_superiority = 0;
		}
		else
		{
			printf(" 상 대 : 빠\n");
			_superiority = 1;
		}
		break;

	case 2:
		printf("플레이어: 빠\n");
		if (_enemy == 0)
		{
			printf(" 상 대 : 묵\n");
			_superiority = 1;
		}
		else if (_enemy == 1)
		{
			printf(" 상 대 : 찌\n");
			_superiority = 2;
		}
		else
		{
			printf(" 상 대 : 빠\n");
			win = _superiority;
			_superiority = 0;
		}
		break;
	}

	if (_superiority == 1)
	{
		printf("플레이어 공격!\n");
		enemy_chat(1);
	}
	else if (_superiority == 2)
	{
		printf("플레이어 수비!\n");
		printf("5점 차감되었습니다.\n");
		output = -5;
		enemy_chat(2);
	}
	else
	{
		if (win == 1)
		{
			printf("플레이어 승리~!!!\n");
			output = 30;
			enemy_chat(0);
		}
		else if (win == 2)
		{
			printf("플레이어 패배...ㅜㅜ\n");
			output = -2147483648;
			enemy_chat(3);
		}
	}
	Sleep(2000);

	return output;
}

int main()
{
	int player, enemy;
	int superiority = 0;
	int score = 15;
	int num_win = 0;

	screen_title();

	while (score > 0)
	{
		//1페이즈
		while (superiority == 0)
		{
			system("cls");
			enemy = suffle_rand(4);
			printf("0 - 가위 / 1 - 바위 / 2 - 보\n선택: ");
			scanf_s("%d", &player);
			system("cls");
			char tmp[] = "안내면~ 진거~";
			for (int i = 0; i < sizeof(tmp); i++)
			{
				printf("%c", tmp[i]);
				Sleep(250);
			}
			system("cls");
			system("color 0c");
			printf("가위!");
			Sleep(750);
			system("cls");
			system("color 06");
			printf("바위!");
			Sleep(750);
			system("cls");
			system("color 0a");
			printf("보!");
			Sleep(750);

			system("color 07");

			superiority = 0;
			result_p1(player, enemy, superiority);
		}

		while (score > 0 && superiority != 0)
		{
			system("cls");
			printf("남은 점수: %d\n", score);
			enemy = suffle_rand(4);
			printf("0 - 묵 / 1 - 찌 / 2 - 빠\n선택: ");
			scanf_s("%d", &player);
			system("cls");
			system("color 0c");
			printf("묵!");
			Sleep(750);
			system("cls");
			system("color 06");
			printf("찌!");
			Sleep(750);
			system("cls");
			system("color 0a");
			printf("빠!");
			Sleep(750);

			system("color 07");

			score += result_p2(player, enemy, superiority);

		}
		if (score > 0)
		{
			system("cls");
			printf("현재 점수: %d\n", score);
			system("pause");
			system("cls");
		}
		else
		{
			system("cls");
			printf("YOU LOSE!\n");
		}
	}

	return 0;
}