====== ゲームを作っていくぅ ====== まずいつもの通り、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へ]] ^