javaFX实现五子棋小游戏

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';
  }
 }
 }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java实现单人版五子棋游戏

    本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 package gyb.exam; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Point; import java.awt.Toolkit; import java.awt.

  • java实现单机版五子棋

    这个小游戏是我和我姐们儿的JAVA课程设计,也是我做的第一个JAVA项目,适合初学者,希望能帮到那些被JAVA课设所困扰的孩纸们~~~ 一.该游戏需要实现 1.设计主框架,界面. 2.利用ActionListener接口实现按钮事件的监听. 3.重新开始功能的实现. 4.悔棋功能的实现. 5.退出功能的实现. 6.棋盘中棋子点类的定义. 7.利用MouseListener接口实现事件监听,并实现接口里的所有方法. 8.当鼠标移动到棋盘上的交点上,且该点上无棋子时能够变成小手形状. 9.点击棋盘时

  • Java棋类游戏实践之单机版五子棋

    本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 一.实践目标        1.掌握JavaGUI界面设计        2.掌握鼠标事件的监听(MouseListener,MouseMotionListener) 二.实践内容       设计一个简单的五子棋程序,能够实现五子棋下棋过程.如下图所示 1.五子棋棋盘类 package cn.edu.ouc.fiveChess; import java.awt.Color; import java.awt.Curs

  • Java编程实现五子棋人人对战代码示例

    利用Java,在控制台操作下,编写的五子棋,作为复习二维数组,面向对象等基础知识.w表示白棋,b表示黑棋 import java.util.Scanner; public class MainMethod { public static char[][] c = new char[10][10]; public static void main(String[] args) { MainMethod mainMethod = new MainMethod(); mainMethod.init()

  • Java实现两人五子棋游戏(三) 画出棋子

    上一篇文章讲的是Java实现两人五子棋游戏(二) 画出棋盘,已经画好棋盘,接下来要实现控制功能,主要功能: 1)选择棋子 2)画棋子 3)判断胜负 4)交换行棋方 先实现画棋子PART -------------画棋子代码示例如下-------------- 首先,定义一个棋子类,这个类有两个属性,棋子颜色(0-表示黑色,1-表示白色),是否落子(我计划用一个二维数组才存储棋子的落子信息) Chessman.java package xchen.test.simpleGobang; public

  • Java实现五子棋AI算法

    五子棋AI算法 也算是一个典型的游戏AI算法,一些棋类的AI算法都可以参考实现,下面是Java实现代码 棋盘抽象接口 import java.util.List; public interface IChessboard { //取得棋盘最大横坐标 public int getMaxX(); //最大纵坐标 public int getMaxY(); //取得当前所有空白点,这些点才可以下棋 public List<Point> getFreePoints(); } 棋子类实现 //棋子类 p

  • java基于swing实现的五子棋游戏代码

    本文实例讲述了java基于swing实现的五子棋游戏代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Main extends JFrame implements ActionListener{         private static final long serialVersionUID = 1L;      

  • Java实现五子棋网络版

    本文实例为大家分享了Java实现五子棋网络版的具体代码,供大家参考,具体内容如下 需求分析: 对于网络五子棋而言,在普通五子棋的基础上需要添加以下功能: 1.拥有服务器端和客户端,用户通过客户端登录服务器后可与其他登录的用户进行对弈 2.服务器支持多组用户同时进行对弈 3.用户可以在服务器上创建新游戏或加入已创建的游戏 4.用户在下棋的时候可以进行聊天交流 由上可以知道需要实现的功能: ·提供服务器和客户端的功能 ·服务器将监听客户端的登录情况并允许多个客户端进行登录 ·用户通过客户端可以登录服

  • java实现五子棋小游戏

    java实现五子棋小游戏 package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class GomokuFrame extends JFrame { //定义一个操作面板 OperatorPane op=null; public GomokuFrame() { //设置名称 this.setTitle("五子棋"); //设置窗口大小 this.setSize(510,510); //设置窗

  • Java实现两人五子棋游戏(二) 画出棋盘

    本文为大家分享了java画出五子棋游戏棋盘的方法,供大家参考,具体内容如下 棋盘模块: 画五子棋棋盘:19条横线.19条竖线 步骤一:显示棋盘 我有一张名为chessboard.png的棋盘,位置为根目录/res/drawable/chessboard/png,现在我要显示这张图片. DrawChessBoard.java package xchen.test.simpleGobang; import java.awt.Graphics; import java.awt.Image; impor

随机推荐