最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java GUI實現(xiàn)五子棋游戲

 更新時間:2020年02月25日 17:14:52   作者:橋苯環(huán)萘我老婆  
這篇文章主要為大家詳細介紹了java GUI實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現(xiàn)五子棋游戲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;
 }

判斷是否贏了

和八皇后有點像,可以考慮那種數(shù)組優(yōu)化四個方向,這里比較懶

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

圖片顯示

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • java清除html轉義字符

    java清除html轉義字符

    這篇文章主要介紹了一個靜態(tài)文件處理的一些便捷服務,包括 java清除html轉義字符,清除html代碼,從style樣式中讀取CSS的屬性,將字符串截取指定長度,涉及l(fā)og4j,common-lang類的學習
    2014-01-01
  • SpringBoot中的@Import注解四種使用方式詳解

    SpringBoot中的@Import注解四種使用方式詳解

    這篇文章主要介紹了SpringBoot中的@Import注解四種使用方式詳解,@Import注解只可以標注在類上,可以結合 @Configuration注解、ImportSelector、ImportBeanDefinitionRegistrar一起使用,也可以導入普通的類,需要的朋友可以參考下
    2023-12-12
  • Java應用打包成Docker鏡像

    Java應用打包成Docker鏡像

    這篇文章主要為大家介紹了Java應用打包成Docker鏡像的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Java8新特性Stream流中anyMatch和allMatch和noneMatch的區(qū)別解析

    Java8新特性Stream流中anyMatch和allMatch和noneMatch的區(qū)別解析

    這篇文章主要介紹了Java8新特性Stream流中anyMatch和allMatch和noneMatch的區(qū)別解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • 一文詳解kafka序列化器和攔截器

    一文詳解kafka序列化器和攔截器

    這篇文章主要為大家介紹了kafka序列化器和攔截器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 關于SpringMVC在Controller層方法的參數(shù)解析詳解

    關于SpringMVC在Controller層方法的參數(shù)解析詳解

    在SpringMVC中,控制器Controller負責處理由DispatcherServlet分發(fā)的請求,下面這篇文章主要給大家介紹了關于SpringMVC在Controller層方法的參數(shù)解析的相關資料,需要的朋友可以參考下
    2021-12-12
  • 淺談IDEA實用的Servlet模板

    淺談IDEA實用的Servlet模板

    今天給大家分享一下IDEA實用的Servlet模板,文中有非常詳細的圖文介紹及代碼示例,對小伙伴們很有幫助哦,需要的朋友可以參考下
    2021-05-05
  • SpringBoot動態(tài)定時任務、動態(tài)Bean、動態(tài)路由詳解

    SpringBoot動態(tài)定時任務、動態(tài)Bean、動態(tài)路由詳解

    這篇文章主要介紹了SpringBoot動態(tài)定時任務、動態(tài)Bean、動態(tài)路由詳解,之前用過Spring中的定時任務,通過@Scheduled注解就能快速的注冊一個定時任務,但有的時候,我們業(yè)務上需要動態(tài)創(chuàng)建,或者根據(jù)配置文件、數(shù)據(jù)庫里的配置去創(chuàng)建定時任務,需要的朋友可以參考下
    2023-10-10
  • spring、mybatis 配置方式詳解(常用兩種方式)

    spring、mybatis 配置方式詳解(常用兩種方式)

    這篇文章給大家總結了常用的兩種spring、mybatis 配置方式,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2017-12-12
  • Java?list如何實現(xiàn)將指定元素排在第一位

    Java?list如何實現(xiàn)將指定元素排在第一位

    這篇文章主要為大家詳細介紹了Java?list中如何實現(xiàn)將指定元素排在第一位,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02

最新評論

仪征市| 湖南省| 永和县| 抚州市| 东乡族自治县| 镶黄旗| 天镇县| 洞头县| 泾川县| 房产| 辽源市| 湘乡市| 永丰县| 五大连池市| 沂源县| 大田县| 新兴县| 北京市| 潮安县| 莒南县| 加查县| 景泰县| 临漳县| 大连市| 理塘县| 清流县| 鲁甸县| 汤原县| 琼海市| 台南市| 栾川县| 华坪县| 辉县市| 霸州市| 宁夏| 江达县| 涟源市| 靖边县| 吉林省| 榕江县| 景德镇市|