22020, 1/1101 회원가입  로그인  
   kjh00114
   c언어를 이용한 화투게임 (섯다)

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Board&no=13055 [복사]


#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  
#include <conio.h>  
#include <string.h>  
  
void Register(char*, int*);  
void DisplayFrame(char*, int, int,int, int, int, int, int*, int*, int);  
void Shuffle(int*);  
void SetOrder(int**, int*, int*, int);  
void CompareTable(int*, int*);  
bool betting(int*, int*,int*);  
  
  
enum {PLAYER, COMPUTER};  
  
void main()  
{  
    // User information.  
    char name[20];  
    int age;  
  
    // Game information.  
    char askContinue;  
    int cntGame = 0;  
    int bettingAmount;  
    int firstGetter = PLAYER;   // 0 - player, 1 - computer.  
    int shuffledCards[20];  
    int* order[2];  
  
    // Com. information.  
    int comMoney;  
    int comBetting = 0;  
    int comCards[2] = {0};  
    int comResult;  
    char comResultName[20];  
  
    // Player information.  
    int playerMoney;  
    int playerBetting = 0;  
    int playerCards[2] = {0};  
    int playerResult;  
    char playerResultName[20];  
  
    // Game setting.  
    int defaultMoney = 1000;  
  
    playerMoney = comMoney = defaultMoney;  
    srand(time(NULL));  
  
    // User Register.  
    Register(name, &age);      
  
    while(1)  
    {      
        // Initialize.  
        cntGame++;  
        bettingAmount = 0;  
  
        comCards[0] = 0;  
        comCards[1] = 0;  
        playerCards[0] = 0;  
        playerCards[1] = 0;  
  
        // Shuffle all card.  
        Shuffle(shuffledCards);    
  
        // Decide first turn.  
        SetOrder(order, playerCards, comCards, firstGetter);  
  
        // Show default information.  
        DisplayFrame(name, age, cntGame, firstGetter, bettingAmount, comMoney, playerMoney, comCards, playerCards, 0);  
  
        // Loop for dealing and betting.  
        bool die = false;  
        for(int i=0; i<4; i++)  
        {  
            // Dealing.  
            *(order[i%2]+i/2) = shuffledCards[i];  
  
            if(i%2==1)  
            {                  
                printf("카드를 받으시려면 아무키나 누르세요.\n");  
                getch();  
  
                // Show dealing information.  
                DisplayFrame(name, age, cntGame, firstGetter, bettingAmount, comMoney, playerMoney, comCards, playerCards, 0);  
  
                if(!betting(&comMoney, &playerMoney, &bettingAmount))  
                {  
                    die = true;  
                    break;  
                }                  
            }  
        }  
  
        if(die)  
        {  
            printf("Computer의 승리입니다.%d %d\n", comResult, playerResult);  
            comMoney += bettingAmount*2;  
            firstGetter = COMPUTER; // Set first getter to computer.  
  
            continue;  
        }  
  
        // Show final stats.          
        DisplayFrame(name, age, cntGame, firstGetter, bettingAmount, comMoney, playerMoney, comCards, playerCards, 1);  
  
        printf("승패를 확인하시려면 아무키나 눌러주세요.\n");  
        getch();  
  
        // Show result.  
        DisplayFrame(name, age, cntGame, firstGetter, bettingAmount, comMoney, playerMoney, comCards, playerCards, 1);  
  
        // Compare to point table and get the point.  
        CompareTable(comCards, &comResult);  
        CompareTable(playerCards, &playerResult);  
  
        // Decide winner.  
        if(comResult>playerResult)  
        {  
            printf("Computer의 승리입니다.%d %d\n", comResult, playerResult);  
            comMoney += bettingAmount*2;  
            firstGetter = COMPUTER; // Set first getter to computer.  
              
        }  
        else if(comResult<playerResult)  
        {  
            printf("Player의 승리입니다.%d %d\n", comResult, playerResult);  
            playerMoney += bettingAmount*2;  
            firstGetter = PLAYER;   // Set first getter to player.  
        }  
        else  
        {  
            printf("무승부입니다.%d %d\n", comResult, playerResult);  
            playerMoney += bettingAmount;  
            comMoney += bettingAmount;  
        }  
  
        // Notify Ending of the game.  
        if(comMoney<=0)  
        {  
            printf("Computer가 거지가 되어 더 이상 게임을 할 수가 없습니다. 다시 실행해 주세요.\n");  
            break;  
        }  
  
        if(playerMoney<=0)  
        {  
            printf("Player가 거지가 되어 더 이상 게임을 할 수가 없습니다. 다시 실행해 주세요.\n");  
            break;  
        }  
  
        // Ask continuation.  
        fflush(stdin);  
        printf("계속하시겠습니까?(y/n): ");  
        scanf("%c", &askContinue);  
  
        if(askContinue=='n')  
            break;        
    }  
}  
  
void Register(char* name, int* age)  
{  
    printf("섯다입니다. 어서오세요.\n");  
    printf("이름을 입력해주세요: ");  
    scanf("%s", name);  
    printf("나이를 입력해주세요: ");  
    scanf("%d", age);  
}  
  
void DisplayFrame(char* name, int age, int cntGame, int firstGetter, int bettingAmount, int comMoney, int playerMoney, int* comCards, int* playerCards, int open)  
{  
    char strFirst[10];    
  
    if(firstGetter==PLAYER)  
        strcpy(strFirst, "Player");  
    else if(firstGetter==COMPUTER)  
        strcpy(strFirst, "Computer");  
  
    system("cls");  
    printf("                                                         이름: %s 나이: %d 세\n", name, age);  
    printf(" [ %d ] 번째 게임 (선): %s, 배팅금액: %d원, Computer: %d 원, Player %d 원\n", cntGame, strFirst, bettingAmount*2, comMoney, playerMoney);  
  
    if(comCards[0]!=0 && comCards[1]==0)  
    {  
        printf("%15s %15s\n", "Computer 카드", "Player 카드");  
        printf("#######              #######\n");  
        printf("#     #              #     #\n");  
  
        if(open==1)  
            printf("# %3d #              # %3d #\n", comCards[0], playerCards[0]);  
        else  
            printf("#  *  #              # %3d #\n", playerCards[0]);  
  
        printf("#     #              #     #\n");  
        printf("#######              #######\n");  
    }else if(comCards[0]!=0 && comCards[1]!=0)  
    {  
        printf("%15s %15s\n", "Computer 카드", "Player 카드");  
        printf("####### #######      ####### #######\n");  
        printf("#     # #     #      #     # #     #\n");  
  
        if(open==1)  
            printf("# %3d # # %3d #      # %3d # # %3d #\n", comCards[0], comCards[1], playerCards[0], playerCards[1]);  
        else  
            printf("#  *  # #  *  #      # %3d # # %3d #\n", playerCards[0], playerCards[1]);  
  
        printf("#     # #     #      #     # #     #\n");  
        printf("####### #######      ####### #######\n");  
    }  
}  
  
void Shuffle(int* shuffledCards)  
{  
    printf("카드를 섞습니다...\n");      
    bool swCards[20] = {0};  
  
    int i=0;  
    int r;  
  
    while(i<20)  
    {  
        r = rand()%20;  
          
        if(swCards[r] == false)  
        {  
            swCards[r] = true;  
            shuffledCards[i] = r>9 ? r-10+1: r+1;  
            i++;  
        }  
    }  
}  
  
void SetOrder(int* order[], int* playerCards, int* comCards, int player)  
{  
    if(player==0)  
    {  
        order[0] = playerCards;  
        order[1] = comCards;  
    }else if(player==1)  
    {  
        order[0] = comCards;  
        order[1] = playerCards;  
    }      
}  
  
void CompareTable(int* cards, int* result)  
{  
    int table[][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},  
        {4, 10, 11},  
        {10, 4, 11},          
        {4, 6, 10},  
        {6, 4, 10}  
    };  
  
    int plag = 0;  
      
    for(int j=0; j<22; j++)  
    {              
        if(cards[0]==table[j][0] && cards[1]==table[j][1])  
        {  
            *result = table[j][2];            
            plag = 1;  
            break;  
        }          
    }  
  
    if(plag==0)    
        *result = (cards[0]+cards[1])%10;  
          
          
}  
  
bool betting(int* comMoney, int* playerMoney, int* bettingAmount)  
{  
    int bet;  
  
    printf("배팅 금액을 입력하세요(-1:Die, 0~%d): ", *playerMoney);  
    scanf("%d", &bet);  
  
    // For die.  
    if(bet==-1)  
        return false;      
  
    // For all-in.  
    if(bet>*playerMoney)  
        bet = *playerMoney;  
    else if(bet>*comMoney)  
        bet = *comMoney;  
  
    // Betting.  
    *bettingAmount += bet;                
  
    *comMoney -= bet;  
    *playerMoney -= bet;  
  
    return true;  
}  

  Hit : 12386     Date : 2009/06/28 04:23



    
syh4209 오류 118개.... 2009/06/29  
thdtjq22 ㅋㅋ 저는 잘만되는데 2009/06/30  
crashgun 한번 컴파일 해서 해보고 싶네여.. ㅋㅋ 2009/07/02  
yjkk80 컴파일 오류 59개 뜨는데요 2009/07/09  
Slayer-1 저도 오류가 쩌는데..ㅋㅋ 36개 워닝 3개 ㅋㅋ 2009/07/09  
     [공지]해커스쿨 이용수칙 2021/04/11 수정판 [55] 한승재 01/05 12823
22019   해커구함     k1230
10/04 28
22018   카타고 AI[1]     해킹잘하고싶다
10/01 51
22017   시스코 라우터랑 스위치 케이블 장비 질문이에요.[1]     해킹잘하고싶다
09/22 115
22016   ㅇㅅㅇ     해킹잘하고싶다
08/15 297
22015   요즘 하고 있는 거     해킹잘하고싶다
07/13 504
22014   2위 ㅇㅅㅇ     해킹잘하고싶다
07/13 442
22013   ...     해킹잘하고싶다
03/31 833
22012   ...     해킹잘하고싶다
03/25 814
22011   15년전쯤 이 사이트 보고 꿈을 정했었는데~~~[1]     ambition65
03/20 1216
22010   으앙!!![1]     해킹잘하고싶다
02/05 957
22009   오랜만~     DarkSlayer
12/11 1156
22008   해커스쿨 옛날 BGM[1]     wkfhddl4041
11/07 1257
22007   히잉...     해킹잘하고싶다
11/02 1081
22006   바둑과 장기     해킹잘하고싶다
10/30 1168
22005   나는 언제 애인이 생기나욤...     해킹잘하고싶다
10/27 1246
22004   전국 1위     해킹잘하고싶다
10/27 1190
22003   담배 ㅋㅋ[1]     해킹잘하고싶다
10/27 1194
22002   매트릭스의 파란약을 아십니까..?     해킹잘하고싶다
10/27 1148
22001   ㅇㅇ[1]     해킹잘하고싶다
10/20 1117
1 [2][3][4][5][6][7][8][9][10]..[1101]

Copyright 1999-2026 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org