javaFX实现五子棋游戏,供大家参考,具体内容如下
做课程设计的时候做到这个,分享出来大家参考一下吧,图片为游戏运行过程
最下的代码就是整个实现整个需求的
package Version3; import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.input.MouseButton; import javafx.scene.layout.BorderPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; import javafx.stage.Stage; public class Version3 extends Application { private char winer = ' ';//胜者 TextField tf = new TextField(); private char whoseTurn = (int)(Math.random() * 2) == 0 ? 'X' : 'O';//随机回合 private int numberOfClick = 0; @Override public void start(Stage primaryStage) { Button bt = new Button("New game"); //按钮 //TextField tf = new TextField(); Cell [] cell = new Cell[9]; for(int i=0; i<9 ;i++){ cell[i] = new Cell(2,1); } GridPane gpane = new GridPane(); int num =0; for(int i=0; i<3 ;i++){ for(int j=0; j<3 ;j++){ gpane.add(cell[num],j,i); num++; } } tf.setEditable(false);//文本不可编辑 BorderPane pane = new BorderPane(); pane.setTop(bt); pane.setAlignment(bt,Pos.CENTER); pane.setCenter(gpane); pane.setBottom(tf); //按钮事件 重新开始游戏 bt.setOnAction(e ->{ gpane.getChildren().clear(); for (int i = 0; i < 9; i++) { cell[i] = new Cell(2,1); } int k = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { gpane.add(cell[k], j, i); k++; } } whoseTurn = (int)(Math.random() * 2) == 0 ? 'X' : 'O'; tf.setText(whoseTurn == 'X' ? "X's turn" : "O's turn"); setListenerForCells(cell);//调用单元格的侦听器 winer = ' '; }); // 给底部文本设置初始情况 tf.setText(whoseTurn == 'X' ? "X's turn" : "O's turn"); // 给每个面板设置一个监听器 setListenerForCells(cell); Scene scene = new Scene(pane,495,550); primaryStage.setTitle("version3"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } public void judgeWhoWin(Cell[] cell){ // 判断行 for (int i = 0; i < 3; i++) { if (cell[i * 3].contain == 'X'&& cell[i * 3 + 1].contain == 'X'&& cell[i * 3 + 2].contain == 'X') { winer = 'X'; } else if (cell[i * 3].contain == 'O'&& cell[i * 3 + 1].contain == 'O'&& cell[i * 3 + 2].contain == 'O') { winer = 'O'; } } // 判断列 for (int i = 0; i < 3; i++) { if (cell[i].contain == 'X'&& cell[i + 3].contain == 'X'&& cell[i + 6].contain == 'X') { winer = 'X'; } else if (cell[i].contain == 'O'&& cell[i + 3].contain == 'O'&& cell[i + 6].contain == 'O') { winer = 'O'; } } // 判断主、副对角线 if (cell[0].contain == 'X' && cell[4].contain == 'X' && cell[8].contain == 'X'|| cell[2].contain == 'X' && cell[4].contain == 'X' && cell[6].contain == 'X') { winer = 'X'; } else if (cell[0].contain == 'O' && cell[4].contain == 'O' && cell[8].contain == 'O'|| cell[2].contain == 'O' && cell[4].contain == 'O' && cell[6].contain == 'O') { winer = 'O'; } } //点击鼠标 在#字表格里面显示一个随机位置的的X or O public void setListenerForCells(Cell[] cell){ numberOfClick = 0;//点击次数清零 for (int i = 0; i < cell.length; i++) { Cell temp = cell[i]; temp.setOnMouseClicked(e -> { if (winer == ' ') { if (whoseTurn == 'X' && e.getButton() == MouseButton.PRIMARY && temp.editable) { temp.setContain(1,1); temp.editable = false;//不可编辑 winer = ' '; whoseTurn = 'O';//下一次换回和 judgeWhoWin(cell);//判断输赢 if(winer == ' '){ numberOfClick++; if(numberOfClick == 9){ tf.setText("the game is a draw"); } else{ tf.setText(whoseTurn + "'s turn"); } } else{ tf.setText("Game is over, and the winner is "+ winer); } } else if (whoseTurn == 'O' && e.getButton() == MouseButton.PRIMARY && temp.editable) { temp.setContain(1,2); temp.editable = false;//不可编辑 winer = ' '; whoseTurn = 'X';//下一次换回和 judgeWhoWin(cell);//判断输赢 if(winer == ' '){ numberOfClick++; if(numberOfClick == 9){ tf.setText("the game is a draw"); } else{ tf.setText(whoseTurn + "'s turn"); } } else{ tf.setText("Game is over, and the winner is "+ winer); } } } }); } } class Cell extends BorderPane{ public char contain =' '; int num1 = 0,num2 = 0; public boolean editable = true; public Cell(int num1,int num2){ super.setPadding(new Insets(5)); super.setStyle("-fx-border-color: black"); super.setPrefSize(2000,2000); this.setContain(num1,num2); } public void setContain(int num1,int num2){ if(num1==1 && editable){ if(num2==1){ //构建X面板 Line line1 = new Line(0,0,150,150); Line line2 = new Line(150,0,0,150); StackPane pane1 = new StackPane(); pane1.getChildren().addAll(line1,line2); super.setCenter(pane1); contain = 'X'; } else if(num2==2 && editable){ ///构建O面板 Circle circle = new Circle(75);//半径为75 circle.setFill(Color.WHITE);//填充为白色 circle.setStroke(Color.BLACK);//边框为黑色 StackPane pane2 = new StackPane(); pane2.getChildren().add(circle); super.setCenter(pane2); contain = 'O'; } } } } }
更多有趣的经典小游戏实现专题,分享给大家:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。
- 本文固定链接: https://zxbcw.cn/post/191787/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)