====== ゲームを作っていくぅ ======
まずいつもの通り、projectを作ります。\\
今回はコンソールアプリなので、visual studioでもいいし、[[https://replit.com/|replit.com]]でも[[https://paiza.io/ja|paiza.io]]でもできます。\\
__**(もう何も見ないでproject作れない人とかいないよね。。。)**__\\
=== 今回のルール ===
* 被らない4桁の数字がランダムで生成され出題される
* プレイヤーは毎ターン4桁の数字を入力する
* コンピュータの応答として、入力した数字を答えと比べ以下を返す
* ヒット:位置も数字も答えと一致している桁数
* ブロー:数字はあっているけれども位置が違う数字の数
* ヒット=4の時は入力=出題なので、正解のメッセージを表示
* それ以外は、もう一度入力を促す。
* 正解するまでこれを繰り返す。
これを踏まえて、ゲームを組み立てていきましょう。\\
=== 入力方法を考える ===
みんな4桁の整数入力しろって言われたらコンソールプログラムではどう書くかな?\\
#include
int main() {
int number;
printf("4桁の整数を入力してください: ");
scanf("%d", &number);
printf("入力された数は: %d\n", number);
return 0;
}
多分だけど、こう書くんじゃないかな。。。\\
じゃぁ、問題です、**「このプログラムを、Hit&Blowゲームの入力にしたいと思ったときに、どんな問題があるでしょうか?」**\\
こういうのって割と初期の設計段階で大事です!\\
- 入力を「4桁」に限定できていない(4桁より多い、4桁未満でエラーが出ない)
- 0から始まる4桁の数字を扱うことができない
などがあります。(以下実行結果参照)\\
{{game-engineer:classes:2025:something-else:summertime-special-cource:画面録画_2025-08-05_115048.mp4 |}}
実行結果
さてどうしましょうか?\\
これは、長い文章や、数字、文字交じりの入力を処理するときによく行う方法ですが、一度文字列として入力を受け取ってしまいます。\\
そして、そのあとで入力文字列を解析して、必要な部分ごとにデータとして変数に入力していく方法です。\\
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
char str[255] = "";/* 長かった時のために多くメモリを用意 */
printf("4桁の整数を入力してください: ");
scanf("%s", str);
if (strlen(str) == 4) {
printf("入力された数は: %s\n", str);
}
else {
printf("4桁の整数ではありません。\n");
}
return 0;
}
{{game-engineer:classes:2025:something-else:summertime-special-cource:画面録画_2025-08-05_120346.mp4 |実行結果}}
実行結果
後はこれを一桁ずつに分解して、整数でもいいし文字のままでもいいので\\
* 桁位置の情報 ⇒ 配列の添え字
* 桁ごとの数字 ⇒ その桁にある**文字**(整数値に変換もいいよ)
をつかって、正解として作り出した文字列と比べて\\
* 位置も数字も合っている ⇒ Hit
* 位置は違うが正解の数字がある ⇒ Blow
として判断していけばいい気がする!\\
===== 結論! =====
入力するのは数字のデータだけど、エラー処理や比較などいろいろやりやすいので、文字データを使っていく!
|< 300px 50% 50% - >|
^ [[game-engineer:classes:2025:something-else:summertime-special-cource:console-1|その1へ]] ^ [[game-engineer:classes:2025:something-else:summertime-special-cource:console-3|その3へ]] ^