チェスゲーム/備忘録1 | オムニpw

オムニpw

ブログの説明を入力します。

チェスゲーム対人で、盤と駒が必要になる。

・キーボード入力を受け付けるのかどうか

  Javaコンソールにおいてはカーソル受付が出来たと思えないので

  必然的にキーボード入力による移動マス指定になる

・スタートするか・終了するかの二択を選択させたい

 スタート中はゲームの勝敗が降参含め決まるまで、ループさせる

 ループ状態になる/盤表示/駒表示/先手番白後手番黒

 持ち時間3分/時間内に相手を詰みにできなかった場合、敗北

 駒の移動に応じて発生する処理

 駒の奪取/アンパッサン/プロモーション/キャスリング

 チェック

自分からチェックされにいく事は出来ない

 チェックの回避行動しかとれない

 チェックの回避行動がとれない場合、ステイルメイトとして敗北

 チェックメイト

  チェックの回避行動を取ったとしてもチェックが継続している。

 

コンソールに盤と駒

画像表示 盤 駒

拡張子一覧(JPEG < PNG < GIF)

PNG以降で背景透明にできるらしいので使用する

 

当面の目標

・キーボードの入力を受付する機能

・ゲームの進行に関する機能

・コンソールに画像を表示する機能

・コンソールの画像を動かす機能

・三分間計測 / 時間測定の機能

 

パッケージを分ける

appGame-Gameクラス

appWindow-Progressクラス

ゲーム起因処理はGameクラスで処理する

ゲームの出力画面はWindowクラスで処理する

 

 

package appWindow;

 

import java.util.Scanner;

 

public class Progress {

      public static void main(String[] args) {

//         System.out.println("ゲームの開始");

//         System.out.println("ゲームの処理");

           Scanner progressStr = new Scanner(System.in);

           String progressOpening = progressStr.next();

           System.out.println(progressOpening + "が選択されました");

      }

}

//コンソール

ゲームの開始

ゲームの開始が選択されました

わざわざ入力するのではなく、Yes/Noくらい簡潔で良いんだが。

突然入力を求められても分からんし、入力受付前にsysoutで表示。

進行時に求められるクラスで文字なのでprogress + Str

この辺を使いまわせるのか調べる。

Scannerクラスをインポート 基本的な部分なのでutilでいける。

ワイルドカードによるまとめてインポートだと何やってるか分からないので

ここは個別でやっていきたい。

sysoutで使用する関数を新規で作って、再度処理待ちにさせる事で

入力が順次処理で反映された。

progressEndingとして確認したら、まぁ当然のようにできました。

必要な機能をインポートして、newで機能を顕現させる。

あとは使い手次第で入力待って表示できる。

 

Scannerクラスは使えるようにしたので、内部的に判定できるようにしたい。

ラジオボタンとも考えたが面倒。

ループIFで特定の文字が入力されるまで、開始か終了かを判定するようにしたい。

 

 

 

その前に、機能するコードを寄せたい・・・。

クラス使ってインポートするのが普通だよな・・・。

Ctrl + ? で隠すか。

 

プログラムを動かしました。

開始/終了 宣言を受け付けるまでループします。表示宣言。

 ここオシャなのはforIFで回数リセットさせて文言が違うようにする位。

 めんどくせー。

ナンバー/テンキーでやらせた方がウケそう。

数字キーの一致で開始/終了を判断する。

For ・・・ローカルとメンバでどっち参照するのかとか。

オープニングだけだから、ローカルで組むか。

順番忘れてる ローカル変数の宣言と条件式と更新文

If も忘れてる 条件式か

じゃあ、if 条件式に入力を受け付けた関数と比較させればいい

で、forにえー、、、falseならループ続行とすればいいか

オシャやるなら、1回目とそれ以降で表示する内容を変えればいい。

 

感覚的に、ifでfalse内容をキャッチしたら大元の枝に戻る感じなんだが。

ブレイクスルーでしたっけ 忘れたぞ。。。ブレイクか。

 

ローカル変数1回目と2回目以降で実施する内容を変える。

関数 n でいいかな

Trueであり続けるならループ???

 

やり直し

分からないなら小規模実装を繰り返す。

条件式は合理的な方がキレイ。

 

For文の条件式に関数名を出したがエラー波線

Int String型で比較しているらしい

String String で比較する

 

悩んだ。

何に悩んだか。

 

エラーの方まで考えているから駄目だった。

それ以外の入力が来たら、エラー文を追加しようとか。

で、ScannerクラスのString受付 と int 受付 がある。

キーボード操作だからStringが普通だよなぁと。

で、気付いたのが自然とプレイ側もエラーが出ないような仕組みにしないと

構築しようがないなと。

で、intで受け取ったらどうなったか。

大変簡単になった。

入力受付、ゲームプレイY/Nの判断だけでいいから。

で、入力に数字以外が来るとエラーで止まる。

こんな簡単な構成に気付かないなんて悔しい。

エラーが出ないよう対応したが、きつかった。

 

package appWindow;

 

import java.util.Scanner;

 

public class Progress {

      public static void main(String[] args) {

          

//info 開始:1 終了:0    waiting for input

          

           System.out.println("開始:0" + " " + "終了:1" + "\n waiting for input……");

          

           Scanner progressStr = new Scanner(System.in);

           int progressOpening = progressStr.nextInt();

          

           if(0 != progressOpening) {

                 System.out.println("END");

           }else {

                 System.out.println("GAMESTART");

           }

      }

}

 

入力側の負担なんぞ知らず、基礎構築だけで思考することにしよう。

嬉しかったポイントはコンソールの改行。/nを文字内に入れる事。

 

次は画像をコンソールに表示できるか実験したい。

書きだしながら、やるの自分に合ってる。

格ゲーはあんま見返さないから上達しないけど。

同キャラで気になった時は操作見るから、人口多いキャラでやった方がいいのかな。