新刊ピックアップ

実際に小一時間でゲームをつくってみた!^^

この記事を読むのに必要な時間:およそ 1.5 分

徐々にできあがっていくわくわく感を体験!

プログラムを書いては実行を繰り返し徐々に完成していくとわくわくしますよね。ここでは,サイコロの合計が丁(偶数)か半(奇数)かを当てるゲームの開発(C言語)を体験します。

最初に,どこに何を記述するかを記述しておきます。

// [1]ヘッダーをインクルードする場所
// [2]関数を宣言する場所

プレイヤーが丁か半かを選択できるようにする

まず,ゲームが続くようにmain()関数の中でwhileでループするようにします。

// [2]関数を宣言する場所
// [2-1]プログラムの実行開始点を宣言
int main() {
    while (1)
    {
    }
}

プレイヤーからの入力を受け付けるために<conio.h>を,文字列を表示するために<stdio.h>をインクルードします。

// [1]ヘッダーをインクルードする場所
#include <stdio.h>  // [1-1]標準入出力ヘッダー
#include <conio.h>  // [1-4]コンソール入出力ヘッダー

whileループ内に,プレイヤーからの入力(丁の場合は0,半の場合は1)とその結果を出力する処理を実装します。

while (1)
{
    // [2-2-2]プレイヤーが丁(偶数)か半(奇数)かを入力
    int in;
    do
    {
        printf("AI「丁(偶数)か半(奇数)か入力してください。」([0]丁 [1]半)\n");
        in = _getch() - '0'; // [2-2-3]文字を入力して数値に変換
    } while ((in != 0) && (in != 1));

    // [2-2-4]入力結果を出力
    printf("in:%d\n", in);
    if (in % 2 == 0)
        printf("あなた「丁(偶数)!」\n");
    else
        printf("あなた「半(奇数)!」\n");
}

実行すると,正しく取得できていることがわかります。

図1

サイコロを2つふる処理を実装する

乱数を扱うため<stdlib.h><time.h>をインクルードします。

// [1]ヘッダーをインクルードする場所
#include <stdio.h>  // [1-1]標準入出力ヘッダー
#include <stdlib.h> // [1-2]標準ライブラリヘッダー
#include <time.h>   // [1-3]時間管理ヘッダー
#include <conio.h>  // [1-4]コンソール入出力ヘッダー

乱数をシャッフルする処理を実装します。

int main() {
    // [2-2-1]乱数をシャッフル
    srand((unsigned int)time(NULL));
    while (1)
    {
        ...
    }
}

サイコロの目を取得する処理を実装します。

while (1)
{
    ...
    // [2-2-5]サイコロの目を取得
    int dice0 = 1 + rand() % 6;
    int dice1 = 1 + rand() % 6;
}

丁か半かの結果を出力する

最後に,結果を出力する処理を実装します。

while (1)
{
    ...
    // [2-2-6]サイコロの目の結果を出力
    printf("AI「%d %d の", dice0, dice1);
    if ((dice0 + dice1) % 2 == 0)
        printf("丁(偶数)!」\n");
    else
        printf("半(奇数)!」\n");
    if ((dice0 + dice1) % 2 == in)
        printf("AI「あなたの勝ちです!」\n");
    else
        printf("AI「あなたの負けです!」\n");
    printf("\n");
}

おめでとうございます! ゲームが完成しました。

図2

本書では,このような流れでRPG,ライフゲーム,リバーシ,落ち物パズル,ドットイート,擬似3Dダンジョン,戦国シミュレーションという代表的な7つのジャンルのゲームを作っていきます。徐々に作り上げていくわくわく感を体験してください!

図3
図4
図5