#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <conio.h>
using namespace std;
int WinOrLose(int a, int b, int c, int d, int e, int pno); //승패를 결정하는 함수
int Logic(int a, int b); //카드의 조합을 계산
int main(void)
{
int BM = 0, PM[5] = { 10000, 10000, 10000, 10000, 10000 }, CallM, tempM; //판돈, 플레이어머니, 컴퓨터머니, 콜한머니, 빈공간머니
int index[20]; //실질적으로 셔플이 되어줄 숫자들
int jumsu[5] = { 0, 0, 0, 0, 0 }, jumtemp[5]; //플레이어들의 점수
int card[20] = { 1, 11, 2, 12, 3, 13, 4, 14, 5, 15, 6, 16, 7, 17, 8, 18, 9, 19, 10, 20 }; //1월은 1과 11 이런식으로 카드생성.
int winner; //승자를 입력받기 위한 변수
int yes, CallOrDie, CallOrDie2; //if문에서 쓰일 변수들
bool flag = true;
int pno; //플레이어숫자
int tempwin;
string jokbo[32] = { "망통", "일끗", "이끗", "삼끗", "사끗", "오끗", "육끗", "칠끗", "팔끗", "갑오", //족보를 생성해준다.
"세륙", "장사", "장삥", "구삥", "독사", "알리", "구사", "삥땡", "이땡", "삼땡", "사땡", "오땡", "육땡",
"칠땡", "팔땡", "구땡", "땡잡이", "장땡", "멍구사", "광땡", "암행어사", "삼팔광땡" };
srand(time(NULL)); //시간을 초기화 해주어 rand함수를 사용할 수 있게 도와줌
for (int i = 0; i<20; ++i) //배열에 값을 넣어줌
index[i] = i;
for (int i = 0, a, temp; i<20; ++i) { //셔플
a = rand() % 20;
temp = index[a];
index[a] = index[i];
index[i] = temp;
}
cout << "섯다 게임 프로그램\n" << endl;
cout << "게임을 시작하려면 숫자키를 눌러주시고, 종료하시려면 0 을 눌러주세요/ ";
cin >> yes;
cout << "플레이어는 몇 명으로 하시겠습니까? (최소 2명, 최대 5명)";
cin >> pno;
for (; ; ) {
if ((pno<2 || pno >5)) {
cout << "다시입력하시요.";
cin >> pno;
}
else
break;
}
cout << pno << "명의 플레이어가 참여합니다.\n";
if (yes != 0) { //게임의 실행여부를 결정
cout << "첫 카드를 돌리겠습니다. " << endl;
cout << "\nPlayer1의 카드 : " << card[index[0]] << endl;
cout << "콜을 하려면 아무숫자, 다이를 할꺼면 0을 눌러주세요.";
cin >> CallOrDie;
if (CallOrDie != 0) { //0이 아니면 실행
cout << "\n얼마를 배팅 하실건가요?";
cin >> tempM;
CallM = tempM;
for (int i = 0; i<pno; ++i) {
PM[i] -= tempM;
}
BM += (tempM*pno);
cout << "\nPlayer1의 카드 : " << card[index[0]] << " " << card[index[0 + pno]] << endl;
cout << "콜을 하려면 아무숫자, 다이를 할꺼면 0을 눌러주세요." << endl;;
cin >> CallOrDie2;
if (PM[0] < CallM) {
cout << "콜을 할 수 없어서 졌습니다.\n";
exit(0);
}
if (CallOrDie2 != 0) { //0이 아니면 실행
cout << "\n 얼마를 배팅 하실건가요?";
cin >> tempM;
while (flag) {
if (tempM<CallM) {
cout << "\n돈이 작습니다.\n다시 입력하세요 : ";
cin >> tempM;
}
else
flag = false;
}
for (int i = 0; i<pno; ++i) {
PM[i] -= tempM;
}
BM += (tempM*pno);
for (int i = 0; i<pno; ++i) {
cout << "\nPlayer" << i + 1 << "의 카드 : " << card[index[i]] << " " << card[index[i + pno]] << endl;
jumsu[i] = Logic(card[index[i]], card[index[i + pno]]);
}
for (int i = 0; i<pno; ++i) {
jumtemp[i] = jumsu[i];
}
for (int i = 0; i<pno; ++i)
cout << "\nPlayer" << i + 1 << "의 점수 : " << jokbo[jumsu[i]] << " " << jumsu[i] << endl;
winner = WinOrLose(jumsu[0], jumsu[1], jumsu[2], jumsu[3], jumsu[4], pno);
cout << "승자는 Player" << winner << " 입니다.\nPlayer6은 다시하란뜻\n";
for (int i = 0; i<pno; ++i) {
if (winner == i + 1) {
PM[i] += BM;
BM = 0;
for (int i = 0; i<pno; ++i)
cout << "Player" << i + 1 << " " << PM[i] << " ";
cout << " 판돈" << BM << endl;
_getch();
}
else if (winner == 6) {
cout << "판돈 : " << BM;
_getch();
}
}
}
else if (CallOrDie2 == 0) { //0일 때 실행
cout << "당신은 죽었습니다." << endl;
exit(0);
}
}
else if (CallOrDie == 0) { //0일 때 실행
cout << "당신은 죽었습니다.\n" << endl;;
exit(0);
}
}
else
exit(0);
}
int WinOrLose(int a, int b, int c, int d, int e, int pno)
{
int value[5] = { a, b, c, d, e };
int result;
int Player[6] = { 1,2,3,4,5,6 };
int valtemp[5] = { a, b, c, d, e };
if (a == 30 || b == 30 || c == 30 || d == 30 || e == 30) { //암행어사
if (a>30 || b>30 || c>30 || d>30 || e>30) {
for (int i = 0; i<(pno - 1); ++i) {
if (value[i] > value[i + 1])
value[i + 1] = value[i];
}
for (int i = 0; i<pno; ++i) {
if (value[pno - 1] == valtemp[i])
result = Player[i];
}
}
else if (a == 29 || b == 29 || c == 29 || d == 29 || e == 29) {
for (int i = 0; i<(pno - 1); ++i) {
if (value[i] > value[i + 1])
value[i + 1] = value[i];
}
for (int i = 0; i<pno; ++i) {
if (value[pno - 1] == valtemp[i])
result = Player[i];
}
}
else {
for (int i = 0; i<pno; ++i)
if (value[i] == 30)
value[i] = 1;
for (int i = 0; i<(pno - 1); ++i) {
if (value[i] > value[i + 1])
value[i + 1] = value[i];
}
for (int i = 0; i<pno; ++i) {
if (value[pno - 1] == valtemp[i])
result = Player[i];
}
}
}
else if (a == 28 || b == 28 || c == 28 || d == 28 || e == 28) { //멍구사
if (a>28 || b>28 || c>28 || d>28 || e>28) {
for (int i = 0; i<(pno - 1); ++i) {
if (value[i] > value[i + 1])
value[i + 1] = value[i];
}
for (int i = 0; i<pno; ++i) {
if (value[pno - 1] == valtemp[i])
result = Player[i];
}
}
else
result = Player[5];
}
else if (a == 26 || b == 26 || c == 26 || d == 26 || e == 26) { //땡잡이
if (a>26 || b>26 || c>26 || d>26 || e>26) {
for (int i = 0; i<(pno - 1); ++i) {
if (value[i] > value[i + 1])
value[i + 1] = value[i];
}
for (int i = 0; i<pno; ++i) {
if (value[pno - 1] == valtemp[i])
result = Player[i];
}
}
else if ((26>a && a >= 17) || (26>b && b >= 17) || (26>c && c >= 17) || (26>d && d >= 17) || (26>e && e >= 17)) {
for (int i = 0; i<(pno - 1); ++i) {
if (value[i] > value[i + 1])
value[i + 1] = value[i];
}
for (int i = 0; i<pno; ++i) {
if (value[pno - 1] == valtemp[i])
result = Player[i];
}
}
else {
for (int i = 0; i<pno; ++i) {
if (value[i] == 26)
value[i] = 0;
for (int i = 0; i<(pno - 1); ++i) {
if (value[i] > value[i + 1])
value[i + 1] = value[i];
}
for (int i = 0; i<pno; ++i) {
if (value[pno - 1] == valtemp[i])
result = Player[i];
}
}
}
}
else if (a == 16 || b == 16 || c == 16 || d == 16 || e == 16) { //구사
if (a>16 || b>16 || c>16 || d>16 || e>16) {
for (int i = 0; i<(pno - 1); ++i) {
if (value[i] > value[i + 1])
value[i + 1] = value[i];
}
for (int i = 0; i<pno; ++i) {
if (value[pno - 1] == valtemp[i])
result = Player[i];
}
}
else
result = Player[5];
}
else {
for (int i = 0; i<(pno - 1); ++i) {
if (value[i] > value[i + 1])
value[i + 1] = value[i];
}
for (int i = 0; i<pno; ++i) {
if (value[pno - 1] == valtemp[i])
result = Player[i];
}
}
return result;
}
int Logic(int a, int b) //카드의 조합을 계산
{
int i, temp1;
int result, temp[2], realresult;
for (i = 0; i<2; ++i) { //a와 b를 바꿔서 다시한번 계산
if ((a == 3) && (b == 8)) //삼팔광땡
result = 31;
else if (((a == 4) && (b == 7))) //암행어사
result = 30;
else if (((a == 1) && (b == 3)) || ((a == 1) && (b == 8))) //광땡
result = 29;
else if (((a == 4) && (b == 9))) //멍텅구리 구사
result = 28;
else if (((a == 10) && (b == 20))) //장땡
result = 27;
else if (((a == 3) && (b == 7))) //땡잡이
result = 26;
else if (((a == 9) && (b == 19))) //구땡
result = 25;
else if (((a == 8) && (b == 18))) //팔땡
result = 24;
else if (((a == 7) && (b == 17))) //칠땡
result = 23;
else if (((a == 6) && (b == 16))) //육땡
result = 22;
else if (((a == 5) && (b == 15))) //오땡
result = 21;
else if (((a == 4) && (b == 14))) //사땡
result = 20;
else if (((a == 3) && (b == 13))) //삼땡
result = 19;
else if (((a == 2) && (b == 12))) //이땡
result = 18;
else if (((a == 1) && (b == 11))) //삥땡
result = 17;
else if (((a == 4) && (b == 19)) || ((a == 14) && (b == 9)) || ((a == 14) && (b == 19))) //구사
result = 16;
else if (((a == 1) && (b == 2)) || ((a == 1) && (b == 12)) || ((a == 11) && (b == 2)) || ((a == 11) && (b == 12))) //알리
result = 15;
else if (((a == 1) && (b == 4)) || ((a == 1) && (b == 14)) || ((a == 11) && (b == 4)) || ((a == 11) && (b == 14))) //독사
result = 14;
else if (((a == 1) && (b == 9)) || ((a == 1) && (b == 19)) || ((a == 11) && (b == 9)) || ((a == 11) && (b == 19))) //구삥
result = 13;
else if (((a == 1) && (b == 10)) || ((a == 1) && (b == 20)) || ((a == 11) && (b == 10)) || ((a == 11) && (b == 20))) //장삥
result = 12;
else if (((a == 4) && (b == 10)) || ((a == 4) && (b == 20)) || ((a == 14) && (b == 10)) || ((a == 14) && (b == 20))) //장사
result = 11;
else if (((a == 4) && (b == 6)) || ((a == 4) && (b == 16)) || ((a == 14) && (b == 6)) || ((a == 14) && (b == 16))) //세륙
result = 10;
else if (((a + b) % 10) == 9) //갑오
result = 9;
else if (((a + b) % 10) == 8) //팔끗
result = 8;
else if (((a + b) % 10) == 7) //칠끗
result = 7;
else if (((a + b) % 10) == 6) //육끗
result = 6;
else if (((a + b) % 10) == 5) //오끗
result = 5;
else if (((a + b) % 10) == 4) //사끗
result = 4;
else if (((a + b) % 10) == 3) //삼끗
result = 3;
else if (((a + b) % 10) == 2) //이끗
result = 2;
else if (((a + b) % 10) == 1) //일끗
result = 1;
else if (((a + b) % 10) == 0) //망통
result = 0;
else
result = 0;
temp[i] = result;
temp1 = a; //swap
a = b;
b = temp1;
}
return realresult = temp[0] > temp[1] ? temp[0] : temp[1];
}
이걸 컴퓨터랑 게임을하고 끝나지않고 다시 처음부분으로 돌아가서 하고싶은데.. 어떻게해야해요?
return 정지조건 ? main() : 0;
무슨말이에요..ㅜㅜ
정지조건을 저기다 너고 그대로 복붙하셈
넣고