본문 바로가기

C.O.M.P.U.T.E.R/O.b.j.e.c.t.i.v.e.-.C

[0] |Objective-C| 블랙잭 프로그램 .m 파일 (2/2)

#import "cBlackJack.h"

 

@implementation cBlackJack

- (id)init

{

    self = [super init];

    if (self) {

        NSString *cardPic[CARDPICTURE_MAX] = { @"♠", @"♦", @"♥", @"♣" };

        NSString *cardNum[CARDNUMBER_MAX] = { @"A", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"10", @"J", @"Q", @"K" };

        for( int x = 0 ; x < CARDNUMBER_MAX ; x++)

        {

            for( int y = 0 ; y < CARDPICTURE_MAX ; y++)

            {

                Card[(y*CARDNUMBER_MAX)+x].cardIndex = (y*CARDNUMBER_MAX)+x;

                Card[(y*CARDNUMBER_MAX)+x].cardPicture = (char *) cardPic[y];

                Card[(y*CARDNUMBER_MAX)+x].cardNumber = (char *) cardNum[x];       

                Card[(y*CARDNUMBER_MAX)+x].cardSwitch = 0;       

            }

        }

        for( int i = 0 ; i < CARD_MAX ; i++ )

        { 

            Card[i].cardPower = (i % 13) + 1;

            if(Card[i].cardPower >= 10)     Card[i].cardPower = 10;

        }

        for( int i = 0 ; i < CARD_MAX ; i++ )    tempCardShuffleData[i] = 0;

        GameTurn = 0; //CARDBASE_MAX;

        GameClear = -1;

        CardOpen = -1;

        CardPowerChangePlayer = 0;

        CardPowerChangeTakeDealer = 0;

        PlayerCardSum = 0;

        DealerCardSum = 0;

        tempPlayerCardSum = 0;

        tempDealerCardSum = 0;

        PlayerCard = (int *)malloc(sizeof(int)*(CARD_MAX));

        DealerCard = (int *)malloc(sizeof(int)*(CARD_MAX));

    }

    return self;

}

-(void)_GameTurn

{

    GameTurn++;

}

-(void)_Loop

{

    [self _CardShuffle];

    

    while (GameTurn < CARDFIRST_SET)

    {

        [self _CardSharePlayer];

        [self _GameTurn];

        [self _CardShareDealer];

        [self _GameTurn];

    }

    [self _CardPowerChangePlayer];

    [self _CardPrintAllPlayer];    

    [self _CardPrintDealer];

    while (CardOpen != 1) {        

        [self _CardPowerChangePlayer];

        NSLog(@"Player Score : %d", PlayerCardSum);

        if(PlayerCardSum > DEATHLINE * 2)

        {

            [self _Result];

            break;

        }

        [self _CardTakePlayer];        

        [self _CardTakeDealer];

    }

}

-(void)_CardShuffle

{

    srand((unsigned)time(NULL));

    int CardShuffleSwitch[CARD_MAX] = { 0 };

    int CardShuffleRandom = 0;

    int CardShuffleLoop = 0;

    while(CardShuffleLoop < CARD_MAX)

    {

        CardShuffleRandom = rand()%CARD_MAX;

        if(CardShuffleSwitch[CardShuffleRandom] == 0)

        {

            CardShuffleSwitch[CardShuffleRandom] = 1;

            tempCardShuffleData[CardShuffleLoop] = CardShuffleRandom;

            CardShuffleLoop++;

        }

    }

}

-(void)_CardSharePlayer

{

    if(Card[tempCardShuffleData[GameTurn]].cardSwitch == 0)

    {

        PlayerCard[GameTurn] = Card[tempCardShuffleData[GameTurn]].cardIndex;

        Card[tempCardShuffleData[GameTurn]].cardSwitch = PLAYER_NUMBER;

    }

}

-(void)_CardShareDealer

{

    if(Card[tempCardShuffleData[GameTurn]].cardSwitch == 0)

    {

        DealerCard[GameTurn] = Card[tempCardShuffleData[GameTurn]].cardIndex;

        Card[tempCardShuffleData[GameTurn]].cardSwitch = DEALER_NUMBER

    }

}

-(void)_CardPrintPlayer

{

    if(Card[tempCardShuffleData[GameTurn]].cardSwitch == PLAYER_NUMBER)

        NSLog(@"Player Card[%@%@]", Card[PlayerCard[GameTurn]].cardPicture, Card[PlayerCard[GameTurn]].cardNumber);

}

-(void)_CardPrintAllPlayer

{

    for( int i = 0 ; i < CARD_MAX ; i++ )

    {

        if(Card[tempCardShuffleData[i]].cardSwitch == PLAYER_NUMBER)

            NSLog(@"Player Card[%@%@]", Card[PlayerCard[i]].cardPicture, Card[PlayerCard[i]].cardNumber);

    }

}

-(void)_CardPrintDealer

{

    NSLog(@"Dealer Open Card[%@%@]", Card[DealerCard[DEALEROPENCARD_SET]].cardPicture, Card[DealerCard[DEALEROPENCARD_SET]].cardNumber);

}

-(void)_CardPrintAllDealer

{

    for( int i = 0 ; i < CARD_MAX ; i++ )

    {

        if(Card[tempCardShuffleData[i]].cardSwitch == DEALER_NUMBER)

            NSLog(@"Dealer Card[%@%@]", Card[DealerCard[i]].cardPicture, Card[DealerCard[i]].cardNumber);

    }

}

-(void)_CardTakePlayer

{

    if(CardOpen == -1)

    {

        NSLog(@"[카드받기(1)] [카드보기(2)] [승리선언(7)] : ");

        scanf("%d", &CardTakePlayer);

        

        switch (CardTakePlayer)

        {

            case 1:

                [self _CardSharePlayer];

                [self _CardPrintPlayer];

                [self _GameTurn];

                

                [self _CardPowerChangePlayer];

                break;

            case 2:

                [self _CardPowerChangePlayer];

                NSLog(@"================");

                [self _CardPrintAllPlayer];

                NSLog(@"================");

                [self _CardPrintDealer];

                NSLog(@"================");

                [self _CardTakePlayer];

                break;

            case 7:

                CardOpen = 1;

                break;

            default:

                [self _CardTakePlayer];

                break;

        }        

    }

}

-(void)_CardTakeDealer

{

    NSLog(@"딜러가 카드를 받을지 결정 합니다.");

    NSLog(@"생각중...");

    CardTakeDealer = rand()%2;

    [self _CardPowerChangeDealer];

    [self _CardSumDealer];

    if(DealerCardSum <= DEALERCARDNUMBER_MAX)

    {

        for( int i = GameTurn ; i < GameTurn + 1 ; i++)

        {

            DealerCard[i] = Card[tempCardShuffleData[i]].cardIndex;

            Card[tempCardShuffleData[i]].cardSwitch = DEALER_NUMBER;

            //NSLog(@"%d 번째 카드 - DealerCard[%@%@]", GameTurn+1, Card[DealerCard[i]].cardPicture, Card[DealerCard[i]].cardNumber);

        }

        NSLog(@"딜러가 카드를 받았습니다.");

        [self _GameTurn];

        if(CardOpen == 1)

            [self _CardTakeDealer];

    }

    else

        NSLog(@"딜러가 카드를 받지 않았습니다.");

    if(DealerCardSum > DEALERCARDNUMBER_MAX && CardOpen == 1 && GameClear == -1)

        [self _Result];

}

-(void)_CardSumPlayer

{

    PlayerCardSum = 0;

    for( int i = 0 ; i < GameTurn; i++)

        if(Card[tempCardShuffleData[i]].cardSwitch == PLAYER_NUMBER)

            PlayerCardSum += Card[tempCardShuffleData[i]].cardPower;

}

-(void)_CardSumDealer

{

    DealerCardSum = 0;

 

    for( int i = 0 ; i < GameTurn; i++)

        if(Card[tempCardShuffleData[i]].cardSwitch == DEALER_NUMBER)

            DealerCardSum += Card[tempCardShuffleData[i]].cardPower;

}

-(void)_CardPowerChangePlayer

{

    if(PlayerCardSum <= BLACKJACK)

    {

        for( int i = 0 ; i < GameTurn; i++)

            if(Card[tempCardShuffleData[i]].cardSwitch == PLAYER_NUMBER)

                if(Card[tempCardShuffleData[i]].cardPower == 1)

                    Card[tempCardShuffleData[i]].cardPower = 11;

    }

    else if (PlayerCardSum > BLACKJACK)

    {

        for( int i = 0 ; i < GameTurn ; i++)

            if(Card[tempCardShuffleData[i]].cardSwitch == PLAYER_NUMBER)

                if(Card[tempCardShuffleData[i]].cardPower == 11)

                    Card[tempCardShuffleData[i]].cardPower = 1;

    }

    [self _CardSumPlayer];

}

-(void)_CardPowerChangeDealer

{

    if(DealerCardSum <= BLACKJACK)

    {

        for( int i = 0 ; i < GameTurn; i++ )

            if(Card[tempCardShuffleData[i]].cardSwitch == DEALER_NUMBER)

                if(Card[tempCardShuffleData[i]].cardPower == 1)

                    Card[tempCardShuffleData[i]].cardPower = 11;

    }

    else if (DealerCardSum > BLACKJACK)

    {

        for( int i = 0 ; i < GameTurn ; i++ )

            if(Card[tempCardShuffleData[i]].cardSwitch == DEALER_NUMBER)

                if(Card[tempCardShuffleData[i]].cardPower == 11)

                    Card[tempCardShuffleData[i]].cardPower = 1;

    }

    [self _CardSumDealer];

}

-(void)_Result

{

    char *tempJack = "Black Jack!";

    int tempCardCountPlayer = 0;

    int tempCardCountDealer = 0;

    NSLog(@"================");

    [self _CardPrintAllPlayer];

    NSLog(@"================");

    [self _CardPrintAllDealer];

    NSLog(@"================");

    if((BLACKJACK - PlayerCardSum) < (BLACKJACK - DealerCardSum))

        GameClear = 0;

    else if((BLACKJACK - PlayerCardSum) > (BLACKJACK - DealerCardSum))

        GameClear = 1;

    else if((BLACKJACK - PlayerCardSum) == (BLACKJACK - DealerCardSum))

    {

        for( int i = 0 ; i < GameTurn; i++ )

            if(Card[tempCardShuffleData[i]].cardSwitch == PLAYER_NUMBER)

                tempCardCountPlayer++;

        for( int i = 0 ; i < GameTurn; i++ )

            if(Card[tempCardShuffleData[i]].cardSwitch == DEALER_NUMBER)

                tempCardCountDealer++;

        

        if(tempCardCountPlayer >= tempCardCountDealer)

            GameClear = 0;

        else if(tempCardCountPlayer < tempCardCountDealer)

            GameClear = 1;

    }

    if(ABS(BLACKJACK - PlayerCardSum) > ABS(BLACKJACK - DealerCardSum))

        GameClear = 0;

    else if(ABS(BLACKJACK - PlayerCardSum) < ABS(BLACKJACK - DealerCardSum))

        GameClear = 1;

    if(PlayerCardSum >= DEATHLINE)

    {

        for( int i = 0 ; i < GameTurn; i++ )

            if(Card[tempCardShuffleData[i]].cardSwitch == PLAYER_NUMBER)

                tempCardCountPlayer++;

        for( int i = 0 ; i < GameTurn; i++ )

            if(Card[tempCardShuffleData[i]].cardSwitch == DEALER_NUMBER)

                tempCardCountDealer++;

        if(tempCardCountPlayer < tempCardCountDealer)

            GameClear = 0;

        else if(tempCardCountPlayer >= tempCardCountDealer)

            GameClear = 1;        

    }

    if(PlayerCardSum == BLACKJACK)

        NSLog(@"%s Player Win", tempJack);

//    else   

//        NSLog(@"Player Score : %d", PlayerCardSum);

    if(DealerCardSum == BLACKJACK)

        NSLog(@"%s Dealer Win", tempJack);

//    else   

//        NSLog(@"Dealer Score : %d", DealerCardSum);

    switch (GameClear) {

        case 0:

            NSLog(@"Win!");

            break;

        case 1:

            NSLog(@"Lose!");

            break;

        default:

            break;

    }

}

- (void)dealloc

{

    [super dealloc];

}

@end


12시간 이상 프로그램 만들었습니다.「블랙잭」에서 A의 점수를 1과 11로 어떻게 나누냐? 라는 프로세서에서 고생좀 햇네요.「XCODE」에서「Objective-C」로 만들면서 전혀 다른 기법으로 프로그램을 만들고 있네요...「포인터」너무 싫네요...