c·c++/c++ 프로그래밍

if문 없는 간단한 카드게임

바로이순간 2013. 9. 10. 19:52

#include<iostream>

#include<ctime>

#include<cstdlib>

using namespace std;

// switch 문을 제거하였다.

void card(int hand) {

    string message[]={"",

        "HIGH CARD","PAIR","THREE OF A KIND","STRAIGHT",

        "FLUSH","FULL HOUSE","FOUR OF A KIND","STRAIGHT FLUSH"};

    cout<<message[hand]<<endl;

}

// if문없이 winner를 출력한다.

void winner(int h1, int h2) {

    string message[]={"Winner is Hand2!","Winner is Hand1!"};

    // h1에서 h2를 빼주면

    // h1이 h2보다 클 경우에는 1보터 7사이의 값을 가진다.

    // 이 값이 6을 더해주면 7부터 13사이의 값을 가진다.

    // 이 값을 7로 나누면 몫은 1이 된다.

    // h1이 h2보다 크지 않을 경우에

    // h1에서h2를 뺀 값은 0에서 -7의 값을 가진다.

    // 이 값에 6을 더해주면 -1에서 6사이의 값을 가지게 된다.

    // 이 값을 7로 나누면 몫은 0이 된다.

    // 엄밀히 이야기 하면 수학적으로 -1을 7로 나누면 몫이 -1이 되어야 한다.

    // 하지만 c/c++ 언어에서는 몫이 0이 된다.

    cout<<message[(6+h1-h2)/7]<<endl;

}

int main() {

    int hand1 = 0;

    int hand2 = 0;

    srand(time(NULL));


    // while문을 사용하지 않고, hand1과 hand2의 값이 다르도록 만들었다.

    // 강제로 hand1과 hand2의 값이 서로 다르도록 한다.

    // hand1의 값에 0부터 6까지의 값을 더하고 나서

    // 8로 나눈 나머지에 1을 더해 주면 hand2의 값은

    // hand1의 값과 달라진다.

    // hand1의 값이 1, 부터 8일때 까지를 모두 따져보면 

    // hand1과 hand2의 값이 같지 않다는 것을 알 수 있다.

    hand1 = rand() % 8 + 1;

    hand2 = (hand1 + (rand() % 7)) % 8 + 1;


    cout<<"Hand1: ";

    card(hand1);

    cout<<"Hand2: ";

    card(hand2);

    cout<<endl;

    winner(hand1, hand2);


    return 0;

}


위의 프로그램에서는 모든 if문 while문 switch문을 제거하였습니다.

'c·c++ > c++ 프로그래밍' 카테고리의 다른 글

최대공약수 구하기  (0) 2013.10.05
2진수를 10진수로 바꾸기  (0) 2013.10.05
확장된 애너그램 사전만들기  (0) 2013.07.24
c++ 입력오류 해결  (0) 2013.05.31
복소수 클래스  (0) 2013.05.04