C   ゲーム

ホーム   C/C++チュートリアル


じゃんけんゲーム

janken.cpp


#include <stdio.h>
#include <stdlib.h> // for rand, srand
#include <time.h>   // for time
#include <string.h> // for strcmp

int     you(char *hand);
int     computer();
void    janken(int you, int computer);

int     main()  
{
    srand(time(NULL));
    char *  hand;
    int     opponent;
    int     yourself;
    
    while(1)
    {
        printf("グー:1 チョキ:2 パー:3 終了:4 ");
        scanf("%s", hand);
        puts("---------------------------------");
        if (strcmp(hand, "4") == 0)
        {
            puts("Bye..");
            break;
        }
        yourself = you(hand);
        if (yourself)
        {
            opponent = computer();
            janken(yourself, opponent);
        }
    }
    return 0;
}

int     you(char *hand)
{
    int num = atoi(hand);
    switch(num)
    {
    case 1:
        puts("あなたはグーです。");
        return num;
    case 2:
        puts("あなたはチョキです。");
        return num;
    case 3:
        puts("あなたはパーです。");
        return num;
    default:
        puts("無効な値です。");
    }
    return 0;
}

int     computer()
{
    int num = rand() % 3 + 1;
    switch(num)
    {
    case 1:
        puts("あいてはグーです。");
        break;
    case 2:
        puts("あいてはチョキです。");
        break;
    case 3:
        puts("あいてはパーです。");
        break;
    }
    return num;
}

void    janken(int you, int com)
{
    if (you == com)
    {
        puts("あいこです。");
    } else if (you == 1 && com == 2) {
        puts("あなたの勝ちです。");
    } else if (you == 2 && com == 3) {
        puts("あなたの勝ちです。");
    } else if (you == 3 && com == 1) {
        puts("あなたの勝ちです。");
    } else {
        puts("あなたの負けです。");
    }
}
    

実行結果


グー:1 チョキ:2 パー:3 終了:4 0
---------------------------------
無効な値です。
グー:1 チョキ:2 パー:3 終了:4 1
---------------------------------
あなたはグーです。
あいてはグーです。
あいこです。
グー:1 チョキ:2 パー:3 終了:4 2
---------------------------------
あなたはチョキです。
あいてはグーです。
あなたの負けです。
グー:1 チョキ:2 パー:3 終了:4 3
---------------------------------
あなたはパーです。
あいてはグーです。
あなたの勝ちです。
グー:1 チョキ:2 パー:3 終了:4 4
---------------------------------
Bye..
    

コード説明

  1. while(1)
    無限ループを開始します。
  2. 
            if (strcmp(hand, "4") == 0)
            {
                puts("Bye..");
                break;
            }
        
    strcmp関数で入力された文字列が "4" かどうか調べています。0 なら同じです。 そして同じなら break で無限ループを抜けます。
  3. yourself = you(hand);
    you関数に入力した文字列を渡しています。そして you関数が返した値を yourself 変数に入れます。
    you 関数では、入力された文字列を atoi( )関数で整数に変換して、 その値に会った文字列を表示します。そして変換した整数を返しています。
  4. if (yourself)
    yourselfには、0 から 3 までの整数が入っています。yourself が 0 の場合は 偽なり、この if 文の続きは実行されません。1 から 3 までの整数は
    真と評価されますので if 文の続きが実行されます。
  5. opponent = computer();
    computer( )関数を呼び出して、その戻り値を opponent 変数に入れています。
    computer( )関数では、1 から 3 までの乱数を発生させて、 その値と合致した文字列を出力しから、その 1 から 3 までの整数を返しています。
  6. janken(yourself, opponent);
    janken( )関数に自分の整数と相手の整数を渡しています。 janken()関数では2つの整数を比較して勝ち負けを判断しています。
  7. else if (you == 1 && com == 2)
    && は条件演算子と呼ばれるものです。左辺の条件と右辺の条件の両方が 真の場合に、全体で真になるという意味になります。 「かつ」もしくはアンド(AND)とも呼ばれます。



22972 visits
Posted: Dec. 25, 2019
Update: Dec. 25, 2019

ホーム   C/C++チュートリアル   目次