时间:2021-05-19
需求描述
一个五子棋游戏,能实现双方黑白对决,当一方获胜时给出提示信息,利用GUI界面实现
项目结构如下图
一、实体
FiveChess类
二、视图
ChessPane类继承Pane类实现棋盘和五子棋的绘制
package view;import entity.FiveChess;import javafx.scene.canvas.Canvas;import javafx.scene.canvas.GraphicsContext;import javafx.scene.layout.Pane;import javafx.scene.paint.Color;public class ChessPane extends Pane { public Canvas getCanvas() { return canvas; } public Canvas canvas; public GraphicsContext getGc() { return gc; } public GraphicsContext gc; public FiveChess getFiveChess() { return fiveChess; } public void setFiveChess(FiveChess fiveChess) { this.fiveChess = fiveChess; } public FiveChess fiveChess; public ChessPane(FiveChess fiveChess){ this.fiveChess=fiveChess; double cell=fiveChess.getCellLen(); drawPane(cell); drawChess(cell); getChildren().add(canvas); } public void drawPane(double cell){ canvas = new Canvas(800,700); gc = canvas.getGraphicsContext2D(); gc.clearRect(0,0,canvas.getWidth(),canvas.getHeight()); //绘制棋盘 gc.setStroke(Color.BLACK); for(int i=0;i<fiveChess.getWidth();i++) for(int j=0;j<fiveChess.getHeight();j++){ gc.strokeRect(100+i*cell,100+cell*j,cell,cell);//清理一个矩形取区域的内容 } } public void drawChess(double cell){ char[][] chess=fiveChess.getChess(); for(int i=0;i<fiveChess.getHeight();i++) for(int j=0;j<fiveChess.getWidth();j++){ if(chess[i][j]=='B'){ gc.setFill(Color.BLACK);//设置填充色 gc.fillOval(100+i*cell-cell/2,100+j*cell-cell/2,cell,cell); } else if(chess[i][j]=='W'){ gc.setFill(Color.WHITE); gc.fillOval(100+i*cell-cell/2,100+j*cell-cell/2,cell,cell);//填充椭圆 gc.strokeOval(100+i*cell-cell/2,100+j*cell-cell/2,cell,cell);//绘制轮廓 } } }}三、控制器
playAction类继承自事件处理器EventHandler并传递的参数是鼠标事件,表示接受鼠标点击面板事件
package controller;import entity.FiveChess;import javafx.event.EventHandler;import javafx.scene.control.Alert;import javafx.scene.input.MouseEvent;import view.ChessPane;public class PlayAction implements EventHandler<MouseEvent> { /**fiveChess表示五子棋游戏模型*/ private FiveChess fiveChess; /**chessPane表示五子棋显示面板*/ private ChessPane chessPane; public PlayAction(FiveChess fiveChess,ChessPane chessPane){ this.chessPane=chessPane; this.fiveChess = fiveChess; } @Override public void handle(MouseEvent event) { //处理鼠标点击事件 double cell=fiveChess.getCellLen(); //event.getX()获取鼠标点击x坐标,返回double类型 double x=event.getX(); double y=event.getY(); int i=(int)((x-100+cell/2)/cell); int j=(int)((y-100+cell/2)/cell); System.out.println(i+" "+j); fiveChess.play(i,j); chessPane.drawChess(cell); if(!fiveChess.judgeGame(i,j,fiveChess.getCurrentSide()=='B'?'W':'B')){ Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("五子棋游戏"); alert.setHeaderText("提示信息"); alert.setContentText((fiveChess.getCurrentSide()=='B'?"白":"黑")+"方取得胜利!"); alert.showAndWait(); } }}四、测试
import controller.PlayAction;import entity.FiveChess;import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.Alert;import javafx.stage.Stage;import view.ChessPane;import javax.print.attribute.standard.Fidelity;public class Test extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { FiveChess fiveChess = new FiveChess(20,20,28.0); ChessPane chesspane=new ChessPane(fiveChess); chesspane.setOnMouseClicked(new PlayAction(fiveChess,chesspane));//事件源绑定处理器 Scene scene=new Scene(chesspane,800,700); primaryStage.setScene(scene); primaryStage.setTitle("五子棋游戏"); primaryStage.show(); }}效果图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了js实现AI五子棋人机大战的具体代码,供大家参考,具体内容如下实现原理就是计算五子棋所有赢的种类,利用canvas实现五子棋排版落子。五子棋
控制台实现五子棋游戏,供大家参考,具体内容如下控制台打印棋盘编写两人对弈的五子棋游戏,游戏规则:黑白双方有一方首先实现五子连续,则获胜,游戏结束。代码:impo
本文实例为大家分享了js实现五子棋游戏的具体代码,供大家参考,具体内容如下html五子棋csscanvas{display:block;margin:50pxa
本文实例为大家分享了js实现五子棋游戏的具体代码,供大家参考,具体内容如下html:五子棋游戏hahacss:*{margin:0;padding:0;}bod
本文实例为大家分享了JSCanvas实现五子棋游戏的具体代码,供大家参考,具体内容如下五子棋canvas{display:block;margin:50pxau