石はさみ布-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;
}
Reference
この問題について(石はさみ布-only code), 我々は、より多くの情報をここで見つけました https://velog.io/@hksdods/묵찌빠-only-codeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol