본문 바로가기
C언어

[c언어]숫자 야구 게임

by 코모's 2020. 4. 2.
반응형

BaseBall.exe
0.04MB

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
 
#pragma warning (disable : 4996)
 
int count = 1;//게임 횟수
int Player[3] = { 0 };//player 숫자
int AI[3] = { 0 };//ai 숫자
int p_Guess[3] = { 0 }, a_Guess[3] = { 0 };//추측숫자
int p_Strike=0, p_Ball=0, p_Out = 0;
int a_Strike=0, a_Ball=0, a_Out = 0;
 
void AIrand()//ai숫자 정하기
{        
    AI[0] = (rand() % 9) + 1;
 
    while (true)//중복방지
    {
        AI[1] = (rand() % 9) + 1;
        if (AI[1] != AI[0])
            break;
    }
 
    while (true)//중복방지
    {
        AI[2] = (rand() % 9) + 1;
        if (AI[2] != AI[0] && AI[2] != AI[1])
            break;
    }
}
 
void AIGuess()
{
    a_Guess[0] = (rand() % 9) + 1;
 
    a_Guess[1] = (rand() % 9) + 1;
    if (a_Guess[1] == a_Guess[0])//중복방지
        a_Guess[1] = (rand() % 9) + 1;
 
    a_Guess[2] = (rand() % 9) + 1;
    if (a_Guess[2] == a_Guess[0] || a_Guess[2] == a_Guess[1])//중복방지
        a_Guess[2] = (rand() % 9) + 1;
}
 
void Game()
{
    p_Strike = 0, p_Ball = 0;
    a_Strike=0, a_Ball=0;
 
    if (AI[0] == p_Guess[1] || AI[0] == p_Guess[2])//player추측 검사
    {
        p_Ball++;
    }
    else if (AI[0] == p_Guess[0])
    {
        p_Strike++;
    }
 
    if (AI[1] == p_Guess[0] || AI[1] == p_Guess[2])
    {
        p_Ball++;
    }
    else if (AI[1] == p_Guess[1])
    {
        p_Strike++;
    }
 
    if (AI[2] == p_Guess[0] || AI[2] == p_Guess[1])
    {
        p_Ball++;
    }
    else if (AI[2] == p_Guess[2])
    {
        p_Strike++;
    }
 
    if (Player[0] == a_Guess[1] || Player[0] == a_Guess[2])//ai추측 검사
    {
        a_Ball++;
    }
    else if (Player[0] == a_Guess[0])
    {
        a_Strike++;
    }
 
    if (Player[1] == a_Guess[0] || Player[1] == a_Guess[2])
    {
        a_Ball++;
    }
    else if (Player[1] == a_Guess[1])
    {
        a_Strike++;
    }
 
    if (Player[2] == a_Guess[0] || Player[2] == a_Guess[1])
    {
        a_Ball++;
    }
    else if (Player[2] == a_Guess[2])
    {
        a_Strike++;
    }
 
    if (a_Strike == 0 && a_Ball == 0)
        a_Out++;
 
    if (p_Strike == 0 && p_Ball == 0)
        p_Out++;
 
}
 
void Gameover()
{
    if (p_Strike >= 3)//player승리
    {
        printf("Player 3스트라이크 승리, AI 패배!!");
        getchar();
    }
    if (a_Strike >= 3)//ai승리
    {
        printf("AI 3스트라이크 승리, Plyaer 패배,,,,,,");
        getchar();
    }
 
    if (p_Out >= 3)//player패배
    {
        printf("Player 3아웃 패배,,,,,, AI 승리,,,");
        getchar();
    }
    if (a_Out >= 3)//ai패배
    {
        printf(" AI 3아웃 패배, Plyaer 승리!!");
        getchar();
    }
 
    if (p_Strike >= 3 || a_Strike >= 3 || p_Out >= 3 || a_Out >= 3)
    {
        printf("\n\n");
        printf("     Player의 숫자 : %d  %d  %d\n", Player[0], Player[1], Player[2]);
        printf("    AI의 추측 숫자 : %d  %d  %d\n", a_Guess[0], a_Guess[1], a_Guess[2]);
        printf("         AI의 숫자 : %d  %d  %d\n", AI[0], AI[1], AI[2]);
        printf("Player의 추측 숫자 : %d  %d  %d\n", p_Guess[0], p_Guess[1], p_Guess[2]);
 
        getchar();
    }
}
 
void explain()
{
    system("cls");
    printf("==============게임 설명==============\n\n");
    printf("Player는  1~9 까지의 숫자중 중복되지 않는 수를 3개 선택합니다.\n");
    printf("숫자를 고르는게 끝나면, 한번씩 번갈아가면서 상대방이 선택했을법한 숫자 3개를 골라서 말해줍니다.\n");
    printf("Player가 1 2 3 이라고 추측하면 AI가 고른 번호와 일치하는지에 대한 결과가 나옵니다.\n");
    printf("결과를 토대로 추리를 하며 상대방이 고른 번호를 먼저 부르는 사림이 이기는 게임입니다.\n");
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14); //노랑        
    printf("\n스트라이크\n");//스트라이크
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  //흰색
    printf("상대방이 부른 숫자가 내가 고른 숫자와 일치하고 자리까지 동일 할 경우.\n");
 
    printf("    AI :");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14); //노랑
    printf(" 1");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  //흰색
    printf(" 4 5\n");
 
    printf("Player :");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14); //노랑
    printf(" 1");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  //흰색
    printf(" 4 5\n");
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9); //파랑
    printf("\n볼\n");//볼
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  //흰색
    printf("상대방이 부른 숫자가 내가 고른 숫자와 일치하지만, 자리는 다를 경우.\n");
 
    printf("    AI :");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9); //파랑
    printf(" 1");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  //흰색
    printf(" 4 5\n");
 
    printf("Player : 7 3");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9); //파랑
    printf(" 1\n");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  //흰색
 
 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12); //빨강    
    printf("\n아웃\n");//아웃
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  //흰색
    printf("상대방이 부른 숫자 3개가 내가 고른 번호에 하나도 속해 있지 않을 경우.\n");
 
    printf("    AI : 1 2 3\n");
    printf("Player : 5 6 7\n");
 
}
 
void main()
{
    
    srand((unsigned)time(NULL));
 
    start:
    system("cls");
 
    printf("<야구 게임>\n");
    printf("1.게임시작 2.게임설명 99.게임종료 :");
    int Set = 0;
    scanf_s("%d", &Set);
    getchar();
 
    if (Set < 1 || Set > 2)
    {
        if (Set == 99)
            return;
 
        printf("잘못입력하셨습니다.\n\n");
        getchar();
        goto start;
    }
    else if (Set == 2)
    {
        explain();
        getchar();
        goto start;
    }
 
    one:
    printf("1~9 중에 중복을 피하여 3개를 입력하세요.\n");
    printf("첫번째 숫자 :");
    scanf_s("%d", &Player[0]);
    if (Player[0] < 1 || Player[0] > 9)
    {
        printf("잘못입력하셨습니다.\n\n");
        getchar();
        goto one;
    }
    getchar();
 
     two:
    printf("두번째 숫자 :");
    scanf_s("%d", &Player[1]);
    
    if (Player[1] < 1 || Player[1] > 9)
    {
        printf("잘못입력하셨습니다.\n\n");
        getchar();
        goto two;
    }
    if (Player[1] == Player[0])
    {
        printf("이미 입력한 숫자입니다. 다시입력해주세요.\n\n");
        getchar();
        goto two;
    }
    getchar();
 
    three:
    printf("세번째 숫자 :");
    scanf_s("%d", &Player[2]);
    
    if (Player[2] < 1 || Player[2] > 9)
    {
        printf("잘못입력하셨습니다.\n\n");
        getchar();
        goto three;
    }
    if (Player[2] == Player[0] || Player[2] == Player[1])
    {
        printf("이미 입력한 숫자입니다. 다시입력해주세요.\n\n");
        getchar();
        goto three;
    }
    getchar();
 
    AIrand();
 
    while (true)
    {
    One:
        system("cls");        
        printf("==============야구게임==============\n");
        printf("%d번째 게임",count);
        printf("AI의 숫자를 맞춰보세요.\n");
        printf("첫번째 숫자 :");        
        scanf_s("%d", &p_Guess[0]);
        if (p_Guess[0] < 1 || p_Guess[0] > 9)
        {        
            printf("잘못입력하셨습니다.\n\n");
            getchar();
            goto One;
        }
        getchar();
 
    Two:
        printf("두번째 숫자 :");
        scanf_s("%d", &p_Guess[1]);
        if (p_Guess[1] < 1 || p_Guess[1] > 9)
        {
            printf("잘못입력하셨습니다.\n\n");
            getchar();
            goto Two;
        }
        if (p_Guess[1] == p_Guess[0])
        {
            printf("이미 입력한 숫자입니다. 다시입력해주세요.\n\n");
            getchar();
            goto Two;
        }
        getchar();
 
    Three:
        printf("세번째 숫자 :");
        scanf_s("%d", &p_Guess[2]);
        if (p_Guess[2] < 1 || p_Guess[2] > 9)
        {
            printf("잘못입력하셨습니다.\n\n");
            getchar();
            goto Three;
        }
        if (p_Guess[2] == p_Guess[0] || p_Guess[2] == p_Guess[1])
        {
            printf("이미 입력한 숫자입니다. 다시입력해주세요.\n\n");
            getchar();
            goto Three;
        }
        getchar();
 
        AIGuess();
 
        printf("\nPlayer의 추측 : %d  %d  %d\n",p_Guess[0], p_Guess[1], p_Guess[2]);
        printf("AI의 추측 : %d  %d  %d\n",a_Guess[0], a_Guess[1], a_Guess[2]);
        getchar();
 
        p_Strike, p_Ball, p_Out = 0;
        a_Strike, a_Ball, a_Out = 0;
        Game();
 
        printf("\n==============결과==============\n");
        printf("Player - 스트라이크[%d]  볼[%d]  아웃[%d]\n", p_Strike, p_Ball, p_Out);
        printf("AI - 스트라이크[%d]  볼[%d]  아웃[%d]\n", a_Strike, a_Ball, a_Out);
        getchar();
 
        if (p_Strike >= 3 || a_Strike >= 3 || p_Out >= 3 || a_Out >= 3)
        {
            Gameover();
            return;
        }
 
        count++;
 
    }//while()
 
}//main
반응형

'C언어' 카테고리의 다른 글

[c언어]영화 예매 프로그램  (0) 2020.04.02
[c언어] 음식추천 프로그램  (0) 2020.04.02
[c언어]빙고게임[EASY]  (0) 2020.04.02
[c언어] BMI측정 프로그램  (0) 2020.04.02
[c언어] 로또번호 생성기  (0) 2020.04.02