ゲームを作っていくぅ

まずいつもの通り、projectを作ります。
今回はコンソールアプリなので、visual studioでもいいし、replit.comでもpaiza.ioでもできます。
(もう何も見ないでproject作れない人とかいないよね。。。)

今回のルール

  • 被らない4桁の数字がランダムで生成され出題される
  • プレイヤーは毎ターン4桁の数字を入力する
  • コンピュータの応答として、入力した数字を答えと比べ以下を返す
    • ヒット:位置も数字も答えと一致している桁数
    • ブロー:数字はあっているけれども位置が違う数字の数
  • ヒット=4の時は入力=出題なので、正解のメッセージを表示
  • それ以外は、もう一度入力を促す。
  • 正解するまでこれを繰り返す。

これを踏まえて、ゲームを組み立てていきましょう。

入力方法を考える

みんな4桁の整数入力しろって言われたらコンソールプログラムではどう書くかな?

#include <stdio.h>
 
int main() {
    int number;
 
    printf("4桁の整数を入力してください: ");
    scanf("%d", &number);
 
    printf("入力された数は: %d\n", number);
 
    return 0;
}

多分だけど、こう書くんじゃないかな。。。
じゃぁ、問題です、「このプログラムを、Hit&Blowゲームの入力にしたいと思ったときに、どんな問題があるでしょうか?」
こういうのって割と初期の設計段階で大事です!

  1. 入力を「4桁」に限定できていない(4桁より多い、4桁未満でエラーが出ない)
  2. 0から始まる4桁の数字を扱うことができない

などがあります。(以下実行結果参照)

Fig. 1: 実行結果

さてどうしましょうか?
これは、長い文章や、数字、文字交じりの入力を処理するときによく行う方法ですが、一度文字列として入力を受け取ってしまいます。
そして、そのあとで入力文字列を解析して、必要な部分ごとにデータとして変数に入力していく方法です。

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
 
int main()
{
	char str[255] = "";/* 長かった時のために多くメモリを用意 */
 
	printf("4桁の整数を入力してください: ");
	scanf("%s", str);
 
	if (strlen(str) == 4) {
		printf("入力された数は: %s\n", str);
	}
	else {
		printf("4桁の整数ではありません。\n");
	}
 
	return 0;
}
Fig. 2: 実行結果

後はこれを一桁ずつに分解して、整数でもいいし文字のままでもいいので

  • 桁位置の情報 ⇒ 配列の添え字
  • 桁ごとの数字 ⇒ その桁にある文字(整数値に変換もいいよ)

をつかって、正解として作り出した文字列と比べて

  • 位置も数字も合っている ⇒ Hit
  • 位置は違うが正解の数字がある ⇒ Blow

として判断していけばいい気がする!

入力するのは数字のデータだけど、エラー処理や比較などいろいろやりやすいので、文字データを使っていく!

  • game-engineer/classes/2025/something-else/summertime-special-cource/console-2.txt
  • 最終更新: 6カ月前
  • by root