java GUI实现五子棋游戏

本文实例为大家分享了java实现五子棋游戏GUI,供大家参考,具体内容如下

引用包

//{Cynthia Zhang}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.JOptionPane;
import javax.swing.ImageIcon;
import java.awt.Image;
import com.sun.image.codec.jpeg.*;

前期预设

//extends JApplet {

 // Indicate which player has a turn, initially it is the X player
 private char whoseTurn = 'X';
 final int SIZE = 15;
 static boolean ISOVER = false;

 // Create and initialize cells
 private final Cell[][] cell = new Cell[SIZE][SIZE];

 // Create and initialize a status label
 private final JLabel jlblStatus = new JLabel("X's turn to play",JLabel.CENTER);

设置背景板

// Initialize UI
 @Override
 public void init() {
 // Panel p to hold cells
 JPanel p = new JPanel();
 p.setLayout(new GridLayout(SIZE, SIZE, 0, 0));
 for (int i = 0; i < SIZE; i++) {
  for (int j = 0; j < SIZE; j++) {
  Cell ce = new Cell();
  ce.setBackground(new Color(150,88,42)); // 背景色绝美!
  p.add(cell[i][j] = ce);
  }
 }
 // Set line borders on the cells panel and the status label
 p.setBackground(new Color(143,105,94)); // 背景色绝美!
 jlblStatus.setBorder(new LineBorder(new Color(255,255,255), 2)); // 白框框加宽!

 // Place the panel and the label to the applet
 this.getContentPane().add(p, BorderLayout.CENTER);
 this.getContentPane().add(jlblStatus, BorderLayout.SOUTH);
 }

主要框架段落

// This main method enables the applet to run as an application
public static void main(String[] args) {
 // Create a frame
 JFrame frame = new JFrame("Tic Tac Toe");

 // Create an instance of the applet
 Homework8 applet = new Homework8();

 // Add the applet instance to the frame
 frame.getContentPane().add(applet, BorderLayout.CENTER);

 // Invoke init() and start()
 applet.init();
 applet.start();

 // Display the frame
 frame.setSize(600, 600);
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.setVisible(true);
 }

判断是否满了

// Determine if the cells are all occupied
 public boolean isFull() {
 for (int i = 0; i < SIZE; i++) {
  for (int j = 0; j < SIZE; j++) {
  if (cell[i][j].getToken() == ' ') {
   return false;
  }
  }
 }
 return true;
 }

判断是否赢了

和八皇后有点像,可以考虑那种数组优化四个方向,这里比较懒

// Determine if the player with the specified token wins
 public boolean isWon(char token) {
 int winNum = 5; // define the max num for a rule
 for (int indexX = 0; indexX < SIZE; indexX++) {
  for (int indexY = 0; indexY < SIZE; indexY++){
  // in row check cell[indexX][indexY...indexY+winNum-1]
  if (indexY+winNum-1<SIZE){
   boolean flag=true;
   for (int y =indexY;y<indexY+winNum;y++)
   if (cell[indexX][y].getToken() != token){
    flag=false; break;
   }
   if (flag==true) return true;
  }

  // in row check cell[indexX...indexX+winNum-1][indexY]
  if (indexX+winNum-1<SIZE){
   boolean flag=true;
   for (int x =indexX;x<indexX+winNum;x++)
   if (cell[x][indexY].getToken() != token){
    flag=false; break;
   }
   if (flag==true) return true;
  }

  // check cell[indexX...indexX+winNum-1][indexY...indexY+winNum-1)
  if (indexX+winNum-1<SIZE && indexY+winNum-1<SIZE){
   boolean flag=true;
   for (int x =indexX,y=indexY;x<indexX+winNum;x++,y++)
   if (cell[x][y].getToken() != token){
    flag=false; break;
   }
   if (flag==true) return true;
  }

  // check cell[indexX...indexX+winNum-1][indexY...indexY+winNum-1)
  if (indexX+winNum-1<SIZE && indexY-winNum+1>=0){
   boolean flag=true;
   for (int x =indexX,y=indexY;x<indexX+winNum;x++,y--)
   if (cell[x][y].getToken() != token){
    flag=false; break;
   }
   if (flag==true) return true;
  }
  }
 }
 return false;
 }

设置棋子

// An inner class for a cell
 public class Cell extends JPanel implements MouseListener {

 // Token used for this cell
 private char token = ' ';

 public Cell() {
  setBorder(new LineBorder(Color.black, 1)); // Set cell's border
  addMouseListener(this); // Register listener
 }

 // The getter method for token
 public char getToken() {
  return token;
 }

 // The setter method for token
 public void setToken(char c) {
  token = c;
  repaint();
 }

导入图片

// Paint the cell
 @Override
 public void paintComponent(Graphics g) {
  if (token == 'X') {
  ImageIcon icon = new ImageIcon("C:\\Users\\Lenovo\\Desktop\\Black.png");
  Image image = icon.getImage();
  g.drawImage(image,0,0,35,35,this);
  }else if (token=='O'){
  ImageIcon icon = new ImageIcon("C:\\Users\\Lenovo\\Desktop\\White.png");
  Image image = icon.getImage();
  g.drawImage(image,0,0,35,35,this);
  }
  super.paintComponents(g);
 }

游戏结束的锁定与弹窗

// Handle mouse click on a cell
 @Override
 public void mouseClicked(MouseEvent e) {
  if (ISOVER) return; // if game is over, any issue should be forbidden
  int response=-1;
  if (token == ' ') // If cell is not occupied
  {
  if (whoseTurn == 'X') // If it is the X player's turn
  {
   setToken('X'); // Set token in the cell
   whoseTurn = 'O'; // Change the turn
   jlblStatus.setText("The White's Turn"); // Display status
   if (isWon('X')) {
   jlblStatus.setText("The Black Won! The Game Is Over!");
   response = JOptionPane.showConfirmDialog(null, "The Black Won! The Game Is Over!\n"
    +"Do you want to quit?","提示",JOptionPane.YES_NO_OPTION);

   ISOVER = true;
   if (response == 0) System.exit(0); // choose "Yes" than quit;
   }
  } else if (whoseTurn == 'O') // If it is the O player's turn
  {
   setToken('O'); // Set token in the cell
   whoseTurn = 'X'; // Change the turn
   jlblStatus.setText("The Black's Turn"); // Display status
   if (isWon('O')) {
   jlblStatus.setText("The White Won! The Game Is Over!");
   response = JOptionPane.showConfirmDialog(null, "The White Won! The Game Is Over!\n"
    +"Do you want to quit?","提示",JOptionPane.YES_NO_OPTION);
   ISOVER = true;

   if (response == 0) System.exit(0); // choose "Yes" than quit;
   }
  }
  if (isFull()) {
   jlblStatus.setText("Plain Game! The Game Is Over!");
   response = JOptionPane.showConfirmDialog(null, "Plain Game! The Game Is Over!\n"
    +"Do you want to quit?","提示",JOptionPane.YES_NO_OPTION);
   ISOVER = true;
   if (response == 0) System.exit(0); // choose "Yes" than quit;
  }
  }

 }

其他棋子信息

@Override
 public void mousePressed(MouseEvent e) {
  // TODO: implement this java.awt.event.MouseListener method;
 }

 @Override
 public void mouseReleased(MouseEvent e) {
  // TODO: implement this java.awt.event.MouseListener method;
 }

 @Override
 public void mouseEntered(MouseEvent e) {
  // TODO: implement this java.awt.event.MouseListener method;
 }

 @Override
 public void mouseExited(MouseEvent e) {
  // TODO: implement this java.awt.event.MouseListener method;
 }
 }
}

图片显示

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

(0)

相关推荐

  • java实现单机版五子棋

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

  • Java实现五子棋网络版

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

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

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

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

  • 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

  • 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基于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实现五子棋AI算法

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

随机推荐