ゲームを作っていくぅ
まずいつもの通り、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ゲームの入力にしたいと思ったときに、どんな問題があるでしょうか?」
こういうのって割と初期の設計段階で大事です!
- 入力を「4桁」に限定できていない(4桁より多い、4桁未満でエラーが出ない)
- 0から始まる4桁の数字を扱うことができない
などがあります。(以下実行結果参照)
さてどうしましょうか?
これは、長い文章や、数字、文字交じりの入力を処理するときによく行う方法ですが、一度文字列として入力を受け取ってしまいます。
そして、そのあとで入力文字列を解析して、必要な部分ごとにデータとして変数に入力していく方法です。
#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; }
後はこれを一桁ずつに分解して、整数でもいいし文字のままでもいいので
- 桁位置の情報 ⇒ 配列の添え字
- 桁ごとの数字 ⇒ その桁にある文字(整数値に変換もいいよ)
をつかって、正解として作り出した文字列と比べて
- 位置も数字も合っている ⇒ Hit
- 位置は違うが正解の数字がある ⇒ Blow
として判断していけばいい気がする!