ヤマカサのプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

JavaFX でゲームプログラミング超入門 その3

戦闘画面を作る

JavaFXRPGを作るということで、今回は戦闘画面の骨組みを考えて見ました。
f:id:yamakasa3:20180322224015p:plain
左下の枠に戦闘で用いるコマンドを表示し、右側は具体的なものは表示していませんが、プレイヤのステータスを入れたいと思います。
コマンドを選択する三角形をキーボードのUPとDOWNで動かせるようにしています。
また、戦闘画面では、モンスターの画像を表示したいと思います。

コード

public class FightScene extends Application{

	public static void main(String[] args) {
		launch(args);
	}
	@Override
	public void start(Stage stage) throws Exception{
		stage.setTitle("FightScene");
		stage.setWidth(768);
		stage.setHeight(576);

		Rectangle rect1 = new Rectangle(20, 370, 120, 150);
		rect1.setStroke(Color.BLACK);
		rect1.setArcWidth(20);
		rect1.setArcHeight(20);
		rect1.setFill(null);

		Rectangle rect2 = new Rectangle(160, 370, 560, 150);
		rect2.setStroke(Color.BLACK);
		rect2.setArcWidth(20);
		rect2.setArcHeight(20);
		rect2.setFill(null);

		//Double []d = new Double[]{0.0, 0.0, 100.0, 0.0, 50.0, 70.0};
		Double []d = new Double[]{0.0, 0.0, 0.0, 20.0, 14.0, 10.0};
		Polygon choice = new Polygon();
		//choice.setRotate(270);
		choice.getPoints().addAll(d);
		choice.setLayoutX(35);
		choice.setLayoutY(380);
		choice.setFill(Color.BLACK);

		int labelX = 55;
		int labelY = 376;
		Label label1 = new Label("戦う");
		label1.setFont(new Font(20));
		label1.setLayoutX(labelX);
		label1.setLayoutY(labelY);

		Label label2 = new Label("魔法");
		label2.setFont(new Font(20));
		label2.setLayoutX(labelX);
		label2.setLayoutY(labelY+32);

		Label label3 = new Label("アイテム");
		label3.setFont(new Font(20));
		label3.setLayoutX(labelX);
		label3.setLayoutY(labelY+64);

		Label label4 = new Label("防御");
		label4.setFont(new Font(20));
		label4.setLayoutX(labelX);
		label4.setLayoutY(labelY+96);

		Group labelGroup = new Group();
		labelGroup.getChildren().addAll(label1, label2, label3, label4);
//		VBox hbox = new VBox();
//		hbox.getChildren().addAll(label1, label2);
//		hbox.setLayoutX(60);
//		hbox.setLayoutY(380);

		Group gp = new Group();
		gp.getChildren().addAll(rect1, rect2, choice, labelGroup);
		Scene scene = new Scene(gp);

		scene.setOnKeyPressed(event -> pointEvent(event, choice));

		stage.setScene(scene);
		stage.show();
	}
	public void pointEvent(KeyEvent event, Polygon choice) {
		double point = choice.getLayoutY();
		String s = event.getCode().toString();
		if(s.equals("DOWN")) {
			if(point == 476) {
				choice.setLayoutY(380);
			}else {
				choice.setLayoutY(point + 32);
			}
		}
		if(s.equals("UP")) {
			if(point == 380) {
				choice.setLayoutY(476);
			}else {
				choice.setLayoutY(point - 32);
			}
		}
	}
}