(二)使用javaFX画一个中国象棋棋盘

这篇博客基于已有的实现,通过JavaFX添加背景图并完善了一个功能齐全的中国象棋棋盘。文章中,作者将代码结构拆分为棋盘类、行棋路径类和常量类,但行棋规则尚未限制。主要内容包括Main类、Chess类以及用于计算可走位置的Can Move Utils类的编写。
摘要由CSDN通过智能技术生成

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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值