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

Java編寫實現(xiàn)九宮格應用

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

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

在九宮格里面輪流畫圈或叉,哪一方先在水平、豎直、或?qū)蔷€上有三個子則勝出。

可在窗體中安排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");
? ? ?//將九宮格用一位數(shù)組來表示,用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(); ?//判游戲是否結(jié)束
? ? ? ?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; ? ? ?//占據(jù)中央,返回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(); ?//根據(jù)策略找位置
? ? ?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);?
}
}

結(jié)果如下:

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

相關文章

  • java DelayQueue的原理淺析

    java DelayQueue的原理淺析

    在本篇文章里小編給大家整理的是一篇關于java DelayQueue的原理淺析,有興趣的朋友們可以參考學習下。
    2021-01-01
  • Java中反射詳解

    Java中反射詳解

    本文主要介紹了Java中反射的相關知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • idea創(chuàng)建maven項目速度慢的三種解決方案

    idea創(chuàng)建maven項目速度慢的三種解決方案

    這篇文章主要介紹了idea創(chuàng)建maven項目速度慢的三種解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java設計模式之代理模式解析

    Java設計模式之代理模式解析

    這篇文章主要介紹了Java設計模式之代理模式解析,代理模式為一個對象提供一個替身,以控制對這個對象的訪問,即通過代理對象訪問目標對象,需要的朋友可以參考下
    2023-12-12
  • IDEA中使用Typora編輯md文件的方法

    IDEA中使用Typora編輯md文件的方法

    這篇文章主要介紹了IDEA中使用Typora編輯md文件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot2.1 RESTful API項目腳手架(種子)項目

    SpringBoot2.1 RESTful API項目腳手架(種子)項目

    這篇文章主要介紹了SpringBoot2.1 RESTful API項目腳手架(種子)項目,用于搭建RESTful API工程的腳手架,只需三分鐘你就可以開始編寫業(yè)務代碼,不再煩惱于構(gòu)建項目與風格統(tǒng)一,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 如何將應用的log4j替換成logback詳解

    如何將應用的log4j替換成logback詳解

    無論從設計上還是實現(xiàn)上,Logback相對log4j而言有了相對多的改進。所以下面這篇文章主要給大家介紹了關于如何將應用的log4j換成logback的相關資料,文中介紹的很詳細,需要的朋友可以參考下。
    2017-02-02
  • Java輕松使用工具類實現(xiàn)獲取MP3音頻時長

    Java輕松使用工具類實現(xiàn)獲取MP3音頻時長

    在Java中,工具類定義了一組公共方法,這篇文章將介紹Java中使用工具類來獲取一個MP3音頻文件的時間長度,感興趣的同學繼續(xù)往下閱讀吧
    2021-10-10
  • Spring Boot定時任務的使用實例代碼

    Spring Boot定時任務的使用實例代碼

    這篇文章主要介紹了Spring Boot定時任務的使用實例代碼,需要的朋友可以參考下
    2017-04-04
  • 谷歌二維碼引擎com.google.zxing二維碼生成與解析

    谷歌二維碼引擎com.google.zxing二維碼生成與解析

    這篇文章主要給大家介紹了關于谷歌二維碼引擎com.google.zxing二維碼生成與解析的相關資料,zxing是google開源的二維碼生成和解析工具,需要的朋友可以參考下
    2023-07-07

最新評論

临沂市| 南靖县| 花莲县| 汉源县| 嘉定区| 遂川县| 乌海市| 蓬莱市| 三门县| 永和县| 南和县| 白山市| 滨州市| 古丈县| 雷州市| 蕉岭县| 河北区| 丹江口市| 虞城县| 文水县| 汾西县| 彭水| 铜山县| 蒙阴县| 容城县| 襄城县| 家居| 湘阴县| 洛宁县| 崇明县| 两当县| 小金县| 七台河市| 哈巴河县| 庆安县| 德庆县| 迭部县| 凉城县| 嘉祥县| 高阳县| 万载县|