본문 바로가기
카테고리 없음

HI-LOW Seven Game by C++

by ByteBridge 2013. 2. 20.
반응형
52장의 트럼프 카드중 4장을 오픈하고 5번째에 나올카드를 맞추는 게임 
7을 기준으로 낮으면 로우 높으면 하이 같으면 세븐으로 처리한다.
로우와 하이는 2배의 배당금을 지급하고 
세븐은 10배의 배당금을 지급한다.
 
게임은 무한으로 반복되며 중복되는 카드는 나올수 없다.
한번의 덱이 모두 소진되면 모두 섞어서 다시 게임을 진행한다.
 
#include <iostream>

using namespace std;

//< 카드 개수
const int MAX_CARD = 52;
//< 오픈할 카드 개수
const int OPEN_CARD = 4;
//< 최대플레이 횟수
const int MAX_PLAY_COUNT = MAX_CARD - OPEN_CARD;
//< 섞을 횟수
const int MAX_SHUFFLE_COUNT = 100;

int main(void)
{
    //< 카드정보
    int nArrayCard[MAX_CARD];
    //< 유저의 선택 정보 ( 로우 / 하이 / 세븐 )
    int nSelectUserCommand = -1;
    //< 유저의 베팅 정보
    int nUserBetting = 0;
    //< 유저의 현재 머니 정보
    int nUserMoney = 10000;

    //< 카드 번호 입력
    for (int i = 0; i < MAX_CARD; i++)
    {
        nArrayCard[i] = i;
    }

    while (true)
    {
        //< 메뉴
        cout << "1 : 게임 시작" << endl;
        cout << "2 : 끝내기" << endl;
        cout << "선택 : " << endl;
        cin >> nSelectUserCommand;

        if (nSelectUserCommand == 2)
        {
            cout << "꺼져라!!" << endl;
            break;
        }
        //< 카드를 섞는다. //< 스왑을 해주면서
        int nDest, nSrc;
        for (int i = 0; i < MAX_SHUFFLE_COUNT; i++)
        {
            nDest = rand() % MAX_CARD;
            nSrc = rand() % MAX_CARD;

            //< 교체
            int nTemp = nArrayCard[nDest];
            nArrayCard[nDest] = nArrayCard[nSrc];
            nArrayCard[nSrc] = nTemp;
        }

        int nNowPlayCount = 0;
        //< 플레이 카운트가 조건에 찰때까지 플레이 한다.
        //< 카드가 모두 소진될때까지 반복한다. 4장의 카드를 먼저 오픈하기 때문에
        //< 게임은 최대 한덱당 48판까지만 가능하다.
        int nCardHistory = 0;
        while (nNowPlayCount < MAX_PLAY_COUNT)
        {
            //< 카드의 히스토릴 보여준다.
            for (int i = nCardHistory; i < nCardHistory + OPEN_CARD; i++)
            {
                //< 모양 판별
                int nShape = nArrayCard[i] / 13;
                int nNumber = nArrayCard[i] % 13;
                // ♠ ◆ ♥ ♣
                switch (nShape)
                {
                case 0:
                {
                    cout << "♠";
                }
                break;
                case 1:
                {
                    cout << "◆";
                }
                break;
                case 2:
                {
                    cout << "♥";
                }
                break;
                case 3:
                {
                    cout << "♣";
                }
                break;
                default:
                {
                    cout << "먼소리???" << endl;
                }
                break;
                }

                //< 숫자 판별
                switch (nNumber)
                {
                case 0:
                {
                    cout << "A";
                }
                break;
                case 10:
                {
                    cout << "J";
                }
                break;
                case 11:
                {
                    cout << "Q";
                }
                break;
                case 12:
                {
                    cout << "K";
                }
                break;
                default:
                {
                    cout << nNumber + 1;
                }
                break;
                }

                cout << "\t";
                //cout << nArrayCard[i] << " , ";
            }

            cout << "?????" << endl;
            //< 돈걸기
            cout << "돈걸어 : ";
            cin >> nUserBetting;

            //< 덱의 숫자를 선택하게 메뉴 출력 및 선택
            cout << "1:하이" << endl;
            cout << "2:로우" << endl;
            cout << "3:세븐" << endl;
            cin >> nSelectUserCommand;

            //< 맞춤 여부 판단.
            int nCheckNumber = nArrayCard[OPEN_CARD + nCardHistory] % 13 + 1;
            int nWin = -1;

            //< 모양 판별
            int nShape = nArrayCard[OPEN_CARD + nCardHistory] / 13;
            int nNumber = nArrayCard[OPEN_CARD + nCardHistory] % 13;
            // ♠ ◆ ♥ ♣
            switch (nShape)
            {
            case 0:
            {
                cout << "♠";
            }
            break;
            case 1:
            {
                cout << "◆";
            }
            break;
            case 2:
            {
                cout << "♥";
            }
            break;
            case 3:
            {
                cout << "♣";
            }
            break;
            default:
            {
                cout << "먼소리???" << endl;
            }
            break;
            }

            //< 숫자 판별
            switch (nNumber)
            {
            case 0:
            {
                cout << "A";
            }
            break;
            case 10:
            {
                cout << "J";
            }
            break;
            case 11:
            {
                cout << "Q";
            }
            break;
            case 12:
            {
                cout << "K";
            }
            break;
            default:
            {
                cout << nNumber + 1;
            }
            break;
            }
            cout << endl;

            if (nSelectUserCommand == 1)
            {
                if (7 < nCheckNumber)
                {
                    cout << "맞췄다." << endl;
                    nWin = 0;
                }
                else
                {
                    cout << "틀렸다." << endl;
                }
            }
            else if (nSelectUserCommand == 2)
            {
                if (nCheckNumber < 7)
                {
                    cout << "맞췄다." << endl;
                    nWin = 1;
                }
                else
                {
                    cout << "틀렸다." << endl;
                }
            }
            else
            {
                if (7 == nCheckNumber)
                {
                    cout << "맞췄다." << endl;
                    nWin = 2;
                }
                else
                {
                    cout << "틀렸다." << endl;
                }
            }
            //< 돈지급
            if (nWin == 0 || nWin == 1)
            {
                cout << nUserBetting * 2 << "만큼 따셨네" << endl;
            }
            else if (nWin == 2)
            {
                cout << nUserBetting * 10 << "만큼 따셨네!! ..세븐!!...드런넘" << endl;
            }
            //< 계속 여부 확인
            cout << "1 : 계속" << endl;
            cout << "2 : 끝" << endl;
            cout << "선택 :";
            cin >> nSelectUserCommand;
            if (nSelectUserCommand == 2)
            {
                break;
            }

            //< 플레이 횟수 증가
            nNowPlayCount++;
            //< 히스토리 증가
            nCardHistory++;
            cout << endl;
            //cout << nNowPlayCount << endl;
        }
    }
    return 0;
}
반응형