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

하이로세븐_함수버전

by ByteBridge 2013. 2. 20.
반응형

#include<iostream>
#include<windows.h>
using namespace std;
const int MAX_CARD=52;
const int MAX_CARD_OPEN=4;
const int MAX_SHUFFLE = 100;
const int MAX_PLAY = MAX_CARD-MAX_CARD_OPEN;

//메뉴 함수
void ShowMenu();
//선택입력 함수
int UserSelect();
//셔플함수
void CardShuffle(int*Card);
//범위선택함수
int UserSelectScope(void);
//범위 메뉴출력 함수
void ShowScopeMenu(void);
//카드 모양출력함수
void ShowCardShape(int *Card);
//카드 숫자 출력함수
void ShowCardNumber(int *Card);
//카드 히스토리 출력함수
void ShowCardHistory(int *Card,int cardhistory);
//베팅함수
int Betting(void);
//숨겨진 카드 출력함수
void ShowHiddenCard(int *Card,int cardhistory);
///유저의 선택여부에 따라 판단하고 돈지급하는 함수
bool UserSelectNumberCheckMoney(int checknumber,int userselect,int bettingmoney,int usermoney);

//계속여부확인함수
int ContinueCheck(void);
int main(void)
{
int Card[MAX_CARD];
int nUserSelect=-1;
int UserMoney = 100000;  
int BettingMoney=0;
bool win=false;
//int Win=-1;//맞춤여부판단변수
while (true)
{
int nSelectMenu = -1;
int CardHistory=0,NowPlay=0;//카드의 히스토리와 카드플레이횟수를 저장할 변수
system("cls");
ShowMenu();//메뉴보여주기
nSelectMenu= UserSelect();//유저가 선택한 번호를 호출
if (nSelectMenu==2)
{
cout<<"게임을 종료합니다.";
break;
}
cout<<"카드를 섞는 중입니다..."<<endl;
Sleep(2000);
CardShuffle(Card);//카드를 섞는 함수
while (NowPlay<MAX_PLAY)//남은카드장수만큼 플레이하기
{
int nUserSelectScope=-1;
int nContinueSelect=-1;//계속여부 
ShowCardHistory(Card,CardHistory);//카드히스토리 보여주기
cout<<"[?]"<<endl;
BettingMoney=Betting();//배팅금액입력
nUserSelectScope=UserSelectScope();//유저 하이로우세븐 선택
//숨겨진 카드 출력
ShowHiddenCard(Card,CardHistory);
//< 맞춤 여부 판단.
int nCheckNumber = Card[MAX_CARD_OPEN + CardHistory] % 13 + 1;
win=UserSelectNumberCheckMoney(nCheckNumber,nUserSelectScope,BettingMoney,UserMoney);//유저가 선택한 숫자를 체크하여 그에 맞는 돈지급하고,돈이없는경우 끝내기
nContinueSelect=ContinueCheck();//계속여부확인
if (nContinueSelect==2)
{
break;
}
if (win ==true)
{
system("cls");
cout<<"돈없다...게임종료하고 다시 시작한다..."<<endl;
Sleep(2000);
break;
}
NowPlay++;//
CardHistory++;
}
}
return 0;
}
//메뉴출력함수
void ShowMenu()
{
cout<<"1. 게임시작 2. 게임 종료"<<endl;
cout<<"선택 :";
}
//유저메뉴선택함수
int UserSelect()
{
int nSelect;
cin>>nSelect;
return nSelect;
}
//카드 셔플 함수
void CardShuffle(int*Card)
{
if (Card==NULL)
{
return;
}
int Dest,Src;
for (int i=0;i<MAX_CARD;i++)
{
Card[i]=i+1;
}
for (int i=0;i<MAX_SHUFFLE;i++)
{
Dest = rand()%MAX_CARD;
Src = rand()%MAX_CARD;
swap(Card[Dest],Card[Src]);
}

}
//범위 선택함수
int UserSelectScope(void)
{
int nSelectScope;
ShowScopeMenu();//범위선택메뉴함수 호출
cin>>nSelectScope;
return nSelectScope;
}
//범위 메뉴 출력함수
void ShowScopeMenu(void)
{
cout<<"1. 하이 2. 로우 3. 세븐"<<endl;
cout<<"범위 선택 : ";
}
//카드 모양 출력함수
void ShowCardShape(int *Card)
{
//널포인터 체크 
if (Card==NULL)
{
return;
}
int nShape = *Card/13;
// ♠ ◆ ♥ ♣
switch( nShape )
{
case 0:
{
cout << "♠";
}
break;
case 1:
{
cout << "◆";
}
break;
case 2:
{
cout << "♥";
}
break;
case 3:
{
cout << "♣";
}
break;
default:
{
cout << "먼소리???" << endl;
}
break;
}
}
//카드 숫자 출력
void ShowCardNumber(int *Card)
{
if (Card==NULL)
{
return;
}
int nNumber = *Card%13;
//
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;
}
}
//카드 히스토리 출력
void ShowCardHistory(int *Card,int cardhistory)
{
if (Card==NULL)
{
return;
}
for (int i=cardhistory;i<cardhistory+MAX_CARD_OPEN;i++)
{
ShowCardShape(&Card[i]);
ShowCardNumber(&Card[i]);
cout<<" "<<endl;
}
}
//배팅함수
int Betting(void)
{
int nBettingMoney=0;
cout<<"배팅금액 입력 :";
cin>>nBettingMoney;
return nBettingMoney;
}
void ShowHiddenCard(int *Card,int cardhistory)
{
if (Card==NULL)
{
return;
}
int nHiddenShape = Card[cardhistory+MAX_CARD_OPEN]/13;
int nHiddenNumber = Card[cardhistory+MAX_CARD_OPEN]%13;
cout<<"숨김카드 :";
switch( nHiddenShape )
{
case 0:
{
cout << "♠";
}
break;
case 1:
{
cout << "◆";
}
break;
case 2:
{
cout << "♥";
}
break;
case 3:
{
cout << "♣";
}
break;
default:
{
cout << "먼소리???" << endl;
}
break;
}
switch( nHiddenNumber )
{
case 0:
{
cout << "A";
}
break;
case 10:
{
cout << "J";
}
break;
case 11:
{
cout << "Q";
}
break;
case 12:
{
cout << "K";
}
break;
default:
{
cout << nHiddenNumber+1;
}
break;
}
cout<<endl;
}
//계속여부확인함수
int ContinueCheck(void)
{
int nContinueSelect=-1;
cout<<"1. 계속 2. 끝내기"<<endl;
cout<<"계속? :";
cin>>nContinueSelect;
return nContinueSelect;
}
///유저의 선택여부에 따라 판단하고 돈지급하는 함수
bool UserSelectNumberCheckMoney(int checknumber,int userselect,int bettingmoney,int usermoney)
{
bool nWin = false;
if( userselect == 1 )
{
if( 7 < checknumber )
{
cout <<"맞췄다."<< endl;
cout<<"지급금액:"<<bettingmoney*2<<endl;
}
else
{
cout <<"틀렸다."<< endl;
usermoney=usermoney-bettingmoney*2;
cout<<"차감금액:"<<bettingmoney*2<<endl;
if (usermoney<0)
{
return true;
}
}
}
else if( userselect == 2 )
{
if( checknumber < 7 )
{
cout <<"맞췄다."<< endl;
cout<<"지급금액:"<<bettingmoney*2<<endl;
}
else
{
cout <<"틀렸다."<< endl;
usermoney=usermoney-bettingmoney*2;
if (usermoney<0)
{
return true;
}
cout<<"차감금액:"<<bettingmoney*2<<endl;
}
}
else
{
if( 7 == checknumber )
{
cout <<"맞췄다."<< endl;
cout<<"지급금액:"<<bettingmoney*5<<endl;
}
else
{
cout <<"틀렸다."<< endl;
usermoney=usermoney-bettingmoney*5;
if (usermoney<0)
{
return true;
}
cout<<"차감금액:"<<bettingmoney*5<<endl;
}
}

return false;
}

반응형