チェスゲーム対人で、盤と駒が必要になる。
・キーボード入力を受け付けるのかどうか
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を文字内に入れる事。
次は画像をコンソールに表示できるか実験したい。
書きだしながら、やるの自分に合ってる。
格ゲーはあんま見返さないから上達しないけど。
同キャラで気になった時は操作見るから、人口多いキャラでやった方がいいのかな。