2020/12/10こんにちは。Javaでオセロを作ろうの第2回です。第1回の続きですので、まだの方はこちらから作成をしてください。今回の目標は、ボード上の座標を指定してオセロを配置する処理の実装です。完成サンプルは以下になります。|パッケージ・クラスの作成まず、パッケージとクラスを前回のものに追加で作成していきます。以下の画像を参考に次のものを作成してください。赤で囲んでいる箇所が今回の追加対象です。パッケージmiddlewaremodelクラスCheckInputValue.javaReverseOsero.javaオセロを置く座標を入力するではさっそく作成に取り掛かりましょう!まず初めに、オセロを置く座標をプレイヤーにキーボードから入力してもらえるように、入力を受け付けるプログラムを作成します。Main.javaを以下のように編集します。赤線を引いてある箇所が今回追加するコードです。}}ではこちらのコードを解説いたします。Scannerクラスをインポートしているのがわかります。Scannerクラスを使用することで、ユーザからキーボードで入力を受け付けることができるようになります。Scanner(System.in)」というコードを記載しています。フィールドに「//入力値の情報を保持する」というコメントで記されたint型の「inputX」「inputY」を作成しています。これは、Scannerクラスで入力した値を保存しておくための変数となっています。このフィールドはこのMainクラスでしか使用しないためprivateでカプセル化しています。最後の方の行に、x・y座標の数字を入力させる処理を書いています。inputX・inpiutYがint型のため、nextInt()でキーボードからの入力を受け付け、値を保存しています。ここまでできたので、次は入力した値(座標)を元に、オセロをボード上に配置する処理を書いていきましょう。入力値からボードにオセロを配置するキーボードから入力した値は、それぞれフィールドの変数「inputX」「inputY」に保存されています。この値を使用して、オセロを指定したボード上の座標に配置する処理を書いていきます。ReverseOsero.javaに以下のプログラムを書いてください。}}putOseroというメソッドを作成しました。このメソッドは、引数に渡された値のボードの座標上にオセロを配置するというコードになっています。このメソッドを使用する際は変数「inputX」「inputY」を指定します。このメソッドをMain.javaで使用するため、コードを書いていきましょう。}}まず最初に、ReverseOseroクラスをインポートしています。その後、ReverseOseroのインスタンス「RO」を作成しています。次に「putOsero」メソッドを呼び出し、引数にinputXとinputYを渡します。最後に、ちゃんとオセロがボード上に配置されたか確認するためにshowBoardメソッドを使用しています。これで数字を入力すれば問題なくオセロをボード上に配置することができるようになりました。これで終わりではありません。試しに「A」を入力した場合の結果が以下になります。InputMismatchException(エラー)が発生しています。これはinputX・inputYがint型で定義されているにもかかわらず、String型を入れようとしているためエラーが出ています。エラーが起きるとオセロはその時点で停止してしまうので、ゲームとしてそのような仕様はNGです。最後に今回の仕上げとして、このエラーを起こさないようにして完成としましょう。1〜8の半角数字のみ入力可能にするまず、エラーが起きる原因として変数「inputX」「inputY」にキーボードからの入力値をそのまま入れている、ということが1つ問題です。別の変数(String型)を用意して、一時的にそこに入力値を格納するようにしましょう。以下のコードを参考に、Main.javaを編集します。キーボードからの入力値をここに保存するように処理を書き直します。sc.next()」に変更しています。保存先の変数をinputXからxに変えたのと、保存先の型がint型からString型に変わったためnext()に書き直しています。これでInputMismatchExceptionは発生しなくなりました。このままではinputX・inputYには何もセットしていない状態です。y」の値を代入した場合、また同じエラーが出てしまいます。int型に変更して代入するという処理にしたいと思います。正規表現を用いてチェックを行うメソッドを「CheckInputValue」クラスに記載します。以下のコードを書いてください。}}引数には入力した値(変数「x」「y」)を渡します。if文の条件式に設定されている正規表現[1-8]」を使用して、入力値が半角の1~8の値か判定します。最後に、このメソッドをMain.javaで使用して、形を整えて完成としまししょう。CheckInputVale.javaのインスタンスを作成します。次にオセロを置く横の座標を入力してもらいます。使用し、trueが返ってきた場合のみ値を「inputX」に入力値をint型に変換して代入します。違った場合は、違った値を入力している旨を表示し、もう一度入力させます。半角の1~8が入力された場合はwhile文を抜けることができます。同様にy軸の入力に対してもおこなっています。いかがでしょうか?実際に動かすと、半角の1~8が入力されない限り処理が終わらなくなったはずです。なっていないようであればどこか間違えているので見比べて確認してみてください。次回は少し休憩ということで、今回ほどヘビーな内容ではないことをします。いうことで、今ボード上に白と黒がそれぞれいくつあるのかをカウントして表示するプログラムを作成します。