欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java編寫實現九宮格應用

 更新時間:2022年05月05日 08:05:55   作者:shihao9895  
這篇文章主要為大家詳細介紹了Java編寫實現九宮格應用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java編寫實現九宮格應用的具體代碼,供大家參考,具體內容如下

在九宮格里面輪流畫圈或叉,哪一方先在水平、豎直、或對角線上有三個子則勝出。

可在窗體中安排9個按鈕對應每個格子

計算機和人輪流下子。

代碼如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
class ChessDemo extends Panel implements ActionListener{
?? ?char whoTurn = 'O'; ?//人—O,計算機--X
?? ?Button b[] = new Button[9]; ?//9個按鈕
?? ?StringBuffer chess = new StringBuffer("KKKKKKKKK");
? ? ?//將九宮格用一位數組來表示,用K字符表示空位置
?? ??
public ChessDemo(){
? ? ? setLayout(new GridLayout(3,3,3,3));
? ? ? for (int i=0;i<9;i++) {
? ? ? ? ? b[i] = new Button("");
? ? ? ? ? add(b[i]);
? ? ? ? ? b[i].setActionCommand(String.valueOf(i));
? ? ? ? ? b[i].addActionListener(this);
? ? ? }
}
?
public void actionPerformed(ActionEvent e) {
? ? ? ?Button me = (Button)(e.getSource());//自己
? ? ? ?if (!me.getLabel().equals("")) //不允許在已有棋子位置下棋?
?? ??? ??? ?return;
? ? ? ?me.setLabel("" + whoTurn); //標記下棋
? ? ? ?int row = Integer.parseInt(me.getActionCommand()); //求位置
? ? ? ?chess.setCharAt(row,whoTurn); //記錄下棋 ? ??
? ? ? ?gameOver(); ?//判游戲是否結束
? ? ? ?whoTurn = (whoTurn=='O') ? 'X' : 'O'; //輪換玩家
? ? ? ?computerTake(); ?//計算機下
}?
?
public ?int ?findplace() { //計算機找下棋位置
? ? ? ?for (int r=0;r<9;r++)?
? ? ? ? ? if (chess.charAt(r)=='K') { ? ?//找個空位置
? ? ? ? ? ? ?chess.setCharAt(r,whoTurn); ? ? //先填上棋子
? ? ? ? ? ? ?if (isWin(whoTurn)) ?{ //看自己下此位置是否能贏?
? ? ? ? ? ? ? ? ?chess.setCharAt(r,'K'); ?// 恢復原狀
?? ??? ??? ??? ??? ?return r;
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ?chess.setCharAt(r,'K'); ? // 恢復原狀
? ? ? ? ?}
? ? ?// 沒自己能直接贏得位置再看對方能贏的地方
? ? ? char ?whoTurn2 = (whoTurn=='O') ? 'X' : 'O'; //換成對方思考
? ? ? for (int r=0;r<9;r++)?
?? ??? ??? ?if (chess.charAt(r)=='K') {
? ? ? ? ? ? ?chess.setCharAt(r,whoTurn2); ? //在空白處填上對方棋子
? ? ? ? ? ? ?if (isWin(whoTurn2)) { ?//看填上棋子后能贏否
? ? ? ? ? ? ? ? ?chess.setCharAt(r,'K'); ?// 恢復原狀
?? ??? ??? ??? ??? ?return r;
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ? chess.setCharAt(r,'K'); ? //恢復原狀
? ? ? ? ?}
?? ??? ??? ?if (chess.charAt(4)=='K') { ? //優(yōu)先看中央位置
? ? ? ? ? ? return 4; ? ? ?//占據中央,返回4
?? ??? ?}
?? ??? ??? ?else ?{
?? ??? ??? ??? ?for (int d=1;d<5;d++) { ? // 隨機找個空位置
?? ??? ??? ??? ??? ?int rand= (int)(Math.random() * 9);
?? ??? ??? ??? ??? ?if (chess.charAt(rand)=='K')
?? ??? ??? ??? ??? ?return rand;
?? ??? ??? ??? ?}
?? ??? ?}
? ? ? ?return -1; ?//特殊返回
}
?
public void computerTake(){
? ? ?int x = findplace(); ?//根據策略找位置
? ? ?chess.setCharAt(x,whoTurn);
? ? ?b[x].setLabel(String.valueOf(whoTurn));
? ? ?gameOver(); ? ?
? ? ?whoTurn = (whoTurn=='O') ? 'X' : 'O';
}
?
public void gameOver() {
? ?if (isWin(whoTurn)) { //判是否取勝
? ? ? ?JOptionPane.showMessageDialog(null, whoTurn+" win!");
? ? ? ?System.exit(0);
? ? } else if (isFull()) { //判是否下滿格子
? ? ? ?JOptionPane.showMessageDialog(null, "game is over!");
? ? ? ?System.exit(0);
? ? }
?}
?
public boolean isWin(char who){ ??
? ?String s3 = "" + who + who + who;
? ?String sum; ??
? ?String sum1;
? ?String sum2;//用來拼接一個方向的棋子標識
? ?for(int k=0;k<3;k++)
? ?{
?? ? ? sum1=""+chess.charAt(k)+chess.charAt(k+3)+chess.charAt(k+6);//垂直方向
?? ? ? sum2=""+chess.charAt(k*3+0)+chess.charAt(k*3+1)+chess.charAt(k*3+2);//水平方向
?? ? ? if(sum1.equals(s3)||sum2.equals(s3))
?? ? ? {
?? ??? ? ? return true;
?? ? ? }
?? ? ? else
?? ? ? {
?? ??? ? ? sum1="";
?? ??? ? ? continue;
?? ? ? }
?? ?}
? ?sum=""+chess.charAt(0)+chess.charAt(4)+chess.charAt(8); //正對角線
? ?if (sum.equals(s3)) return true;
? ?sum=""+chess.charAt(2)+chess.charAt(4)+chess.charAt(6); //反對角線
? ?if (sum.equals(s3)) return true;
? ?return false;
}
?
public boolean isFull() { ?//判是否棋盤下滿了
? ?return chess.toString().indexOf("K")== -1;
}
?
public static void main(String args[]) {
? ? Frame f = new Frame();
? ? f.add(new ChessDemo());
? ? f.setSize(300,300);
? ? f.setVisible(true);?
}
}

結果如下:

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

相關文章

  • FastJson踩坑:@JsonField在反序列化時失效的解決

    FastJson踩坑:@JsonField在反序列化時失效的解決

    這篇文章主要介紹了FastJson踩坑:@JsonField在反序列化時失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 封裝了一個Java數據庫訪問管理類

    封裝了一個Java數據庫訪問管理類

    剛剛試著用JDBC,仿著原來C#的寫法寫了這段代碼,自己覺得還是挺粗糙的,還煩請路過的朋友推薦一個寫得較好較完整的相關例程以便學習。謝謝!
    2009-02-02
  • SpringMVC架構的項目 js,css等靜態(tài)文件導入有問題的解決方法

    SpringMVC架構的項目 js,css等靜態(tài)文件導入有問題的解決方法

    下面小編就為大家?guī)硪黄猄pringMVC架構的項目 js,css等靜態(tài)文件導入有問題的解決方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java ArrayList 實現實例講解

    Java ArrayList 實現實例講解

    ArrayList是基于數組實現的,是一個動態(tài)數組,其容量能自動增長,類似于C語言中的動態(tài)申請內存,動態(tài)增長內存。這篇文章主要介紹了java ArrayList 實現的相關資料,需要的朋友可以參考下
    2016-11-11
  • Java實現選擇排序算法的實例教程

    Java實現選擇排序算法的實例教程

    這篇文章主要介紹了Java實現選擇排序算法的實例教程,選擇排序的時間復雜度為О(n&sup2;),需要的朋友可以參考下
    2016-05-05
  • Netty框架實現TCP/IP通信的完美過程

    Netty框架實現TCP/IP通信的完美過程

    這篇文章主要介紹了Netty框架實現TCP/IP通信,這里使用的是Springboot+Netty框架,使用maven搭建項目,需要的朋友可以參考下
    2021-07-07
  • Java如何高效使用OpenCV圖像處理庫

    Java如何高效使用OpenCV圖像處理庫

    OpenCV是一個開源的計算機視覺庫,它提供了一系列豐富的圖像處理和計算機視覺算法,包括圖像讀取、顯示、濾波、特征檢測、目標跟蹤等功能,這篇文章主要給大家介紹了關于Java如何高效使用OpenCV圖像處理庫的相關資料,需要的朋友可以參考下
    2024-03-03
  • Java如何實現通過證書訪問Https請求

    Java如何實現通過證書訪問Https請求

    這篇文章主要介紹了Java如何實現通過證書訪問Https請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java 在PDF中添加頁面跳轉按鈕功能(代碼演示)

    Java 在PDF中添加頁面跳轉按鈕功能(代碼演示)

    這篇文章主要介紹了Java 在PDF中添加頁面跳轉按鈕功能,本文給大家提供了多種功能的按鈕,需要的朋友可以參考下
    2019-11-11
  • 使用Jackson來實現Java對象與JSON的相互轉換的教程

    使用Jackson來實現Java對象與JSON的相互轉換的教程

    這篇文章主要介紹了使用Jackson來實現Java對象與JSON的互相轉換的教程,文中羅列了3中Jackson的使用方式,需要的朋友可以參考下
    2016-01-01

最新評論