되는대로 살자

[C언어 프로젝트] 섯다 본문

2009~2014/Proejct

[C언어 프로젝트] 섯다

malu 2010. 11. 5. 16:45

01234567

음... 이게 아마 자잘한 것을 제외하고 지금 남아 있는 프로그램 중 가장 오래 된 프로그램일 거 같다. 한 6학년 중순 쯤에 만든 것 같다.
규칙은 피망이나, 넷마블, 등의 섯다게임을 참고하기를 바란다.

다음은 캡쳐 화면

다음은 소스코드

//섯다게임
#include <turboc.h>  // 전처리기 정의

enum{BLACK,BRUE,GREEN,OC,RED,JAJU,YELLOW,WHITE,GRAY};       //색상 정의 ex)system("color BRUE");


static int unsigned i,j,Choose;// 루프이용 입시변수
long BettingMoney;        //베팅최소 금액
long AllMoney,UserMoney,ComMoney,UseBetMoney;   //자산과 총 돈이  60000이 넘을수 있으므로 long int 데이터형을 쓴다.
static char ComCard[3],UserCard[3];
static int jukbo[25][3] = { // 족보
  {3,8,26},
  {8,3,26},
  {10,10,25},
  {9,9,24},
  {8,8,23},
  {7,7,22},
  {6,6,21},
  {5,5,20},
  {4,4,19},
  {3,3,18},
  {2,2,17},
  {1,1,16},
  {1,2,15},
  {2,1,15},
  {1,4,14},
  {4,1,14},
  {1,9,13},
  {9,1,13},
  {1,10,12},
  {10,1,12},
  {10,4,11},
  {4,10,11},
  {4,6,10},
  {6,4,10}};
void Mix();             // 카드를 섞는 함수
void retry();            // 끝났을때 다시할지안할지 결정 한다 .
int Betting();            //베팅 함수
int CheckWinner();           //승자 가리는 함수            

void retry()             // 게임을 다시할지 결정
{
 if(UserMoney>0)           // 돈이 없을 때
 {
  puts("retry? y=1 n=2");
  scanf("%d",&Choose);
  switch(Choose)
  {
  case 1:
   Betting();          // yes 일떄 다시 게임 시작
   break;
  case 2:
   puts("good bye!!");        // NO 일떄 리턴한다
   delay(3000);
   system("exit");
   break;
  }
 }
}
int Betting() // 주요 함수
{
 int ComBetrand,ComBetMoney,CallCount=0;     //베팅할금액을입력받는변수,컴퓨터의베팅을결정하는변수,게임이끝났을때 y n 결정
 UserMoney=1000000;          //변수 초기화 (유저의 초기 자본 )
 ComMoney=1000000;          // 컴퓨터 초기 자본
 AllMoney=0;               // 판에 들어 잇는 총 돈
 BettingMoney=0;           // 베팅하는 최소의 금액
 system("color 3");          //색상을 바꾼다.
  Mix();             // 카드를 섞는다
 clrscr(); puts("게임시작!!");      
 for(;1;)   
 {
  if(Choose==2)
   return 0;
  delay(1000); clrscr();        //보는 시간 1초를 주고 화면을 다시 깨끗하게 한다.
  gotoxy(33,0); printf("현재  자산:%d\n",UserMoney); //여기부터
  gotoxy(33,1); printf("컴퓨터자산:%d\n",ComMoney); 
  gotoxy(33,2); printf("전체총판돈:%d\n",AllMoney);
  gotoxy(33,3); printf("현재배팅액:%d\n",BettingMoney);
  gotoxy(33,4); printf("your card1:%d\n",UserCard[0]);
  gotoxy(33,5); printf("your card2:%d\n",UserCard[1]);//여기까지 게임 기본 정보들
  ComBetrand=rand()%2+1;        //컴퓨터의 콜 맥스를 랜덤으로 돌린다.
  system("color 6");         // 생상을 노란색으로 바꾼다.
  puts("┏━━━━┓\n");
  puts("┃섯다게임┃\n");
  puts("┗━━━━┛\n");           //글자 색상을 노란색으로 바꾼다.
  for(;;)
  {
   printf("베팅액이상(die:0)\n");
   printf("입력>>");
   scanf("%d",&UseBetMoney);      //베팅할 금액을 입력받는다.
   if(UseBetMoney==0)        // 만약 die 일떄
    CheckWinner();                              // 게임 승자를 가림 
   if(UseBetMoney<BettingMoney)                    // 베팅한 금액이 최소금액보다 작을 때
    puts("베팅액보다 작습니다.");
   else                                            //위의 것들을 통과하면 다음으로
    break;
  }  
  AllMoney=AllMoney+UseBetMoney;      //들어있는 돈 + 걸은 돈
  UserMoney=UserMoney-UseBetMoney;     //내 자산에서 베팅한 만큼 뺀다 .
  BettingMoney=BettingMoney+UseBetMoney;    //베팅 금액이 올라간다.
  puts("컴퓨터결정중..."); delay(3000); clrscr();
  if(ComBetrand==1)         //1일때 콜
  {
   puts("컴퓨터:콜!");
   ComBetMoney=UseBetMoney;                        // 위의 것과 중복
   AllMoney=AllMoney+ComBetMoney;
   ComMoney=ComMoney-ComBetMoney;
   BettingMoney=BettingMoney+ComBetMoney;
   CallCount++;
  }
  if(ComBetrand==2)         //2일때 맥스
  {
   puts("컴퓨터:맥스!");
   ComBetMoney=UseBetMoney;
   AllMoney=AllMoney+ComBetMoney*2;
   ComMoney=ComMoney-ComBetMoney*2;
   BettingMoney=BettingMoney+ComBetMoney;
   CallCount=0;
  }
  delay(1000);
  clrscr();                         
  if(UserMoney<=BettingMoney)// 유저가 돈이 없을떄
  {
   puts("유저가거지라게임이끝납니다.");
   delay(1000);
   CheckWinner();
  }
  else if(ComMoney<=BettingMoney)       // 컴퓨터가 돈이 없을 때
  {
   puts("컴퓨터가거지라게임이끝납니다.");
   delay(1000);
   CheckWinner();
  }
  if(CallCount>=3||UseBetMoney==0)
   CheckWinner();
 }
}

int CheckWinner()
{
 system("color 4");
 printf("승자결정!!");
 delay(2000);
 clrscr();
 system("color 2");
 printf("컴퓨터 의카드:%d %d\n",ComCard[0],ComCard[1]); // 최종 서로의 카드 확인
 printf("유  저 의카드:%d %d\n",UserCard[0],UserCard[1]);
 if(ComCard[2]>UserCard[2])
  printf("Lose!!");
 if(ComCard[2]<UserCard[2])
 {
  printf("Win!!");
  UserMoney=+AllMoney;                    // 이겼을떄 판에 있는 돈을 전부 가진다.
 }
 delay(2000);
 retry();
 return 0;
}

void Mix()//카드를 섞는 함수
{
 int randCom,randUser;
 srand((unsigned)time(NULL));//난수발생기
 randCom=rand()%29+1;//족보의 수 만큼 랜덤으로 돌린
 randUser=rand()%29+1;//''
 for(i=0;i<2;)
 {
  ComCard[i]  =  rand()%10+1;         // 카드를 10장중 랜덤으로 생성
  UserCard[i] =  rand()%10+1;
  i++;
 }
 ComCard[2]=0;
 for(i=0;i<25;i++)          // 족보배열을 돌며 ComCard 와 같은것을 찾는다.
 {
  if(ComCard[0]==jukbo[i][0]&&ComCard[1]==jukbo[i][1])    // 같은게 나올때 ComCard[2]에 값 저장   
   ComCard[2]=jukbo[i][2];        // jukbo[i][2]는 높은 족보를 판단하기 위한 정수
  else if(UserCard[0]==jukbo[i][j]&&UserCard[1]==jukbo[i][j])
   ComCard[2]=jukbo[i][2];
 }  
 if(UserCard[2]==0)
  UserCard[2]=UserCard[2]+(UserCard[0]+UserCard[1])%10;
 if(ComCard[2]==0)
  ComCard[2]=ComCard[2]+(UserCard[0]+UserCard[1])%10;
 if(ComCard[2]==UserCard[2])
  puts("draw!!");
}
int main()
{
 system("mode con: lines=20 cols=30"); // 콘솔 도스를 가로세로 20씩으로 맞춘다.
 Betting();
 return 0;
}
오 내가 이 시절에 주석을 아주 잘 달아놨군 ㅋ