在https://blog.csdn.net/qq_36270700/article/details/107205985
的基础上,添加一些简单的背景图,行棋
将代码剥离,为后续做准备,画棋盘单独一类,可走路径单独一类,常量都放在Main类
棋盘棋子可以正常使用了,行棋规则还没限制
Main 类
package sample; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.image.Image; import javafx.scene.layout.Background; import javafx.scene.layout.BackgroundImage; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import sample.utils.Chess; import sample.utils.CanvasUtils; public class Main extends Application { static public int girdW = 40; static public int canvasW = 9*girdW; static public int girdH = 40; static public int canvasH = 10*girdH; static public String colorR = "R"; static public String colorB = "B"; static public Boolean init = true; static public double chessW = 18.0; static public String fontName = "STSong"; static public Chess[][] chesses = new Chess[10][9]; static public String[][] names = { {"車","馬","象","士","將","士","象","馬","車"}, {"","","","","","","","",""}, {"","炮","","","","","","炮",""}, {"卒","","卒","","卒","","卒","","卒"}, {"","","","","","","","",""}, {"","","","","","","","",""}, {"兵","","兵","","兵","","兵","","兵"}, {"","炮","","","","","","炮",""}, {"","","","","","","","",""}, {"車","馬","相","仕","帥","仕","相","馬","車"}, }; static public Chess selectChess = null; static public Double fontSize = 18.0; @Override public void start(Stage primaryStage){ Group root = new Group(); Canvas canvas = new Canvas(canvasW * 1.0, canvasH * 1.0 ); StackPane stackPane = new StackPane(); Image img = new Image(Main.class.getResourceAsStream("c.jpg")); stackPane.setBackground(new Background(new BackgroundImage(img,null,null,null,null))); stackPane.setMinWidth(canvasW*2); stackPane.setMinHeight(canvasH *1.5); GraphicsContext gc = canvas.getGraphicsContext2D(); //选棋子 canvas.setOnMouseClicked(event -> { int i = (int)(event.getX()/girdW); int j = (int)(event.getY()/girdH); Chess chess = CanvasUtils.clickChess(event.getX(),event.getY()); if(chess != null){ if(selectChess == null ){ CanvasUtils.selectChess(chess,gc); }else{ CanvasUtils.moveChess(i,j,gc); } }else{ CanvasUtils.moveChess(i,j,gc); } }); CanvasUtils.drawShapes(gc); stackPane.getChildren().add(CanvasUtils.placeCanvas()); stackPane.getChildren().add(CanvasUtils.rotateCanvas()); stackPane.getChildren().add(canvas); root.getChildren().add(stackPane); primaryStage.setTitle("棋盘"); primaryStage.setScene(new Scene(root, canvasW *2, canvasH *1.5)); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
CanvasUtils类
package sample.utils; import java.util.List; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.image.Image; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.TextAlig