코딩
섯다
찬이2
2022. 11. 3. 15:50
중간에 ==과 =의 어이없는 실수 때문에 한참을 애먹어서 완성까지 거의 10시간이 걸린 듯하다ㅠㅠ
입력하면서 점점 코드가 길어지니까 오류 한번 나면 어디서 나는지 찾는 게 쉽지 않았다;;
빌드하고 돌려보면서 느끼는 건데 삼팔광땡이 생각보다 잘 나온다. 이게 맞나?
#include<iostream>
#include<string>
#include<time.h>
using namespace std;
struct Player
{
string name;
int onecard;
int twocard;
int money = 10000;
int result;
};
//카드 출력 시 ~"광" 유무 판별 함수
void CardPrint(int card)
{
switch (card)
{
case 1:
cout << card << "광" << "\t";
break;
case 3:
cout << card << "광" << "\t";
break;
case 8:
cout << card << "광" << "\t";
break;
default:
cout << card << "\t";
break;
}
}
//결과값 출력 시 특정조합 판별 함수
void ResultPrint(int result, int onecard, int twocard)
{
if (result < 10)
{
cout << result << "끗" << endl;
}
else if (result < 31)
{
cout << onecard << "땡" << endl;
}
else if (result == 32)
{
if (onecard < twocard)
{
cout << onecard << twocard << "광땡" << endl;
}
else
{
cout << twocard << onecard << "광땡" << endl;
}
}
else
{
cout << "삼팔광땡" << endl;
}
}
int main()
{
srand(time(NULL));
int size, input = 1;
int card[10][2];
int totalPrice;
//카드 생성
for (int y = 0; y < 2; y++)
{
for (int x = 0; x < 10; x++)
{
card[x][y] = x + 1;
}
}
//플레이어 수 입력
while (true)
{
cout << "플레이어 수를 입력해주세요" << endl << "입력 : ";
cin >> size;
//플레이어 수 예외처리
if (size < 2 || size > 10)
cout << "정해진 플레이어 수에 맞지 않습니다." << endl << "다시 입력해주세요." << endl;
else
break;
}
//입력한 플레이어 수를 바탕으로 플레이어들 이름 입력
Player* players = new Player[size];
for (int i = 0; i < size; i++)
{
cout << i + 1 << "번째 플레이어 이름 : ";
cin >> players[i].name;
}
//입력된 플레이어 수를 바탕으로 판당 우승 시 받게될 상금저장
totalPrice = 500 * size;
while (input == 1)
{
int x = 0, y = 0;
//카드 섞기
for (int i = 0; i < 1000; i++)
{
int sour1 = rand() % 10;
int sour2 = rand() % 2;
int dest1 = rand() % 10;
int dest2 = rand() % 2;
int temp = card[sour1][sour2];
card[sour1][sour2] = card[dest1][dest2];
card[dest1][dest2] = temp;
}
//카드 분배 및 판돈내기
for (int i = 0; i < size; i++)
{
if (x == 10)
{
x = 0;
y++;
}
players[i].onecard = card[x++][y];
players[i].twocard = card[x++][y];
players[i].money -= 500;
}
//카드보고 결과값(result) 계산
for (int i = 0; i < size; i++)
{
int Onecard = players[i].onecard;
int Twocard = players[i].twocard;
//끗 값
players[i].result = (Onecard + Twocard) % 10;
//땡 값
if (Onecard == Twocard)
//같은 땡 중에서 높은값 계산을 위한 식
players[i].result = 21 + Onecard;
//광땡 값
if (Onecard == 1)
{
if (Twocard == 3 || Twocard == 8)
players[i].result = 32;
}
else if(Twocard == 1)
{
if (Onecard == 3 || Onecard == 8)
players[i].result = 32;
}
//삼팔광땡 값
if (Onecard == 3)
{
if (Twocard == 8)
players[i].result = 33;
}
else if (Twocard == 3)
{
if (Onecard == 8)
players[i].result = 33;
}
}
//나온 Player 결과값 중에서 가장 큰 값 winner변수에 저장
int winner = 0;
for (int i = 0; i < size; i++)
{
if (winner < players[i].result)
winner = players[i].result;
}
//추출한 winner값으로 승자 출력
int count = 0;
for (int i = 0; i < size; i++)
{
if (winner == players[i].result)
{
cout << players[i].name << "\t";
count++;
}
}
//승자 수(count값)에 따라서 상금 분배
for (int i = 0; i < size; i++)
{
if (winner == players[i].result)
players[i].money += totalPrice / count;
}
cout << "승리" << endl;
//Player들의 이름 카드 돈 결과값 출력부분
for (int i = 0; i < size; i++)
{
cout << players[i].name << "\t";
CardPrint(players[i].onecard);
CardPrint(players[i].twocard);
cout << players[i].money << "\t";
ResultPrint(players[i].result, players[i].onecard, players[i].twocard);
}
//계속 진행유무 확인
cout << "계속 진행하시곘습니까?" << endl << "1.예 / 2.아니오" << endl << "입력 : ";
cin >> input;
}
//동적 할당 해제
delete[] players;
}