ABOUT ME

포소니는 나의 하루이자 누군가의 공감입니다. 조용히 머물러도 좋고, 가볍게 이야기를 남겨도 좋아요. 당신의 일상도, 이곳에 스며들길 바랍니다.

Today
Yesterday
Total
  • 로우하이세븐(함수) 2Ver
    카테고리 없음 2013. 2. 20. 01:49
    반응형

    #include <iostream>
    #include <windows.h>
    #include <ctime>

    using namespace std;

    // 셔플
    void Shuffle( int nCard[], int nCardMax );

    // 지난 카드 보기
    void PrevCardOutput( int nCard[], int nNowCardPos, int nViewCount );

    // 메뉴 출력
    void MenuOutput(void);

    // 입력
    int Input( const char *pMent );

    // 카드 출력
    void CardOutput( int nCard );

    // 판별
    bool CheckCard( int nInput, int nNumber, int *pMoney, int nBettingMoney, int nBetting_Percent );

    // 결과 출력
    bool ResultOutput( bool bIsWin );


    int main(void)
    {
    srand( (unsigned int)time(NULL) );
    //////////////////////////////////////////////////////////////////////////
    // 상수 

    // 카드 갯수
    const int CARDMAX = 52;

    // 기본 소지금
    const int BASEMONEY = 100;

    // 지난 카드 보여주는 개수
    const int VIEW_PREVCARD = 5;

    // 하이로우배율
    const int BETTING_PERCENT = 2;

    //////////////////////////////////////////////////////////////////////////
    // 변수

    // 카드 배열
    int nCard[CARDMAX] = {};
    // 소지금
    int nMoney = BASEMONEY;

    // 베팅머니
    int nBettingMoney = 0;

    // 입력변수
    int nInput = 0;

    // 판별 변수
    bool bIsWin = false;

    // 지난 카드 확인 변수
    int nNowCardPos = 0;

    // 게임 플레이 여부
    bool bIsPlay = true;

    //////////////////////////////////////////////////////////////////////////

    //////////////////////////////////////////////////////////////////////////
    // 소스

    // 셔플
    Shuffle( nCard, CARDMAX );

    // 게임시작
    while( bIsPlay )
    {
    system("cls");

    // 지난 카드 보기
    PrevCardOutput( nCard, nNowCardPos, VIEW_PREVCARD );
    cout << "현재 소지금 : " << nMoney << endl;
    cout << "=====================================" << endl;

    // 메뉴출력
    MenuOutput();
    // 베팅입력
    nInput = Input( "입력 : " );

    // 나가기
    if( nInput == 4 )
    {
    break;
    }

    // 베팅금액입력
    nBettingMoney = Input( "베팅 금액 입력 : " );

    // 베팅금 차감
    nMoney -= nBettingMoney;

    // 카드 보여주기
    cout << "결과 발표!!" << endl;
    cout << "카드 : ";

    // 카드 출력
    CardOutput( nCard[nNowCardPos] );
    int nNumber = nCard[nNowCardPos] % 13;

    // 결과 판별
    bIsWin = CheckCard( nInput, nNumber, &nMoney, nBettingMoney, BETTING_PERCENT );

    // 결과 체크
    bIsWin = ResultOutput(bIsWin);

    // 확인 카드 증가
    nNowCardPos++;

    Sleep(1000);

    // 게임 종료 여부
    if( nMoney <= 0 )
    {
    cout << "노숙자" << endl;
    break;
    }
    }
    //////////////////////////////////////////////////////////////////////////
    return 0;
    }

    // 셔플
    void Shuffle( int nCard[], int nCardMax )
    {
    // 카드값 대입
    for( int i = 0; i < nCardMax; i++ )
    {
    nCard[i] = i;
    }

    // 카드 섞기
    for( int i = 0; i < nCardMax * 3; i++ )
    {
    int nDev = rand()%nCardMax;
    int nSrc = rand()%nCardMax;

    int nTemp = nCard[nDev];
    nCard[nDev] = nCard[nSrc];
    nCard[nSrc] = nTemp;
    }
    }

    // 지난 카드 보기
    void PrevCardOutput( int nCard[], int nNowCardPos, int nViewCount )
    {
    cout << "=====================================" << endl;

    // 지난 카드 보여주기
    for( int i = 0; i < nViewCount; i++ )
    {
    int nPrevCard_Index = nNowCardPos - i - 1;

    if( nPrevCard_Index < 0 )
    {
    break;
    }

    // 카드 출력
    cout << i + 1 << "회전 카드 : ";

    // 카드 출력
    CardOutput( nCard[nPrevCard_Index] );
    }

    cout << "=====================================" << endl;
    }

    // 메뉴 출력
    void MenuOutput(void)
    {
    cout << "하이로우세븐" << endl;
    cout << "1. 하이" << endl;
    cout << "2. 로우" << endl;
    cout << "3. 세븐" << endl;
    cout << "4. 나가기" << endl;
    }

    // 입력
    int Input( const char *pMent )
    {
    int nInput = 0;

    cout << pMent;
    cin >> nInput;

    return nInput;
    }

    // 카드 출력
    void CardOutput( int nCard )
    {
    // 문양
    int nMark = nCard / 13;
    int nNumber = nCard % 13;

    switch( nMark )
    {
    case 0:
    {
    cout << "♠";
    }
    break;

    case 1:
    {
    cout << "◇";
    }
    break;

    case 2:
    {
    cout << "♡";
    }
    break;

    case 3:
    {
    cout << "♣";
    }
    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;
    }
    }
    cout << endl;
    }

    // 판별
    bool CheckCard( int nInput, int nNumber, int *pMoney, int nBettingMoney, int nBetting_Percent )
    {
    // 판별
    switch( nInput )
    {
    // 하이
    case 1:
    {
    if( nNumber > 6 )
    {
    *pMoney += nBettingMoney * nBetting_Percent;
    return true;
    }
    }
    break;

    // 로우
    case 2:
    {
    if( nNumber < 6 )
    {
    *pMoney += nBettingMoney * nBetting_Percent;
    return true;
    }
    }
    break;

    // 세븐
    case 3:
    {
    if( nNumber == 6 )
    {
    *pMoney += nBettingMoney * nBetting_Percent * 2;
    return true;
    }
    }
    break;
    }

    return false;
    }

    // 결과 출력
    bool ResultOutput( bool bIsWin )
    {
    if( bIsWin == true )
    {
    cout << "이겼다" << endl;
    }

    else
    {
    cout << "졌다" << endl;
    }

    return false;
    }

    반응형
Designed by Tistory.