#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];
}


이걸 컴퓨터랑 게임을하고 끝나지않고 다시 처음부분으로 돌아가서 하고싶은데.. 어떻게해야해요?