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

Java編寫(xiě)實(shí)現(xiàn)九宮格應(yīng)用

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

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

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

可在窗體中安排9個(gè)按鈕對(duì)應(yīng)每個(gè)格子

計(jì)算機(jī)和人輪流下子。

代碼如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
class ChessDemo extends Panel implements ActionListener{
?? ?char whoTurn = 'O'; ?//人—O,計(jì)算機(jī)--X
?? ?Button b[] = new Button[9]; ?//9個(gè)按鈕
?? ?StringBuffer chess = new StringBuffer("KKKKKKKKK");
? ? ?//將九宮格用一位數(shù)組來(lái)表示,用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); //標(biāo)記下棋
? ? ? ?int row = Integer.parseInt(me.getActionCommand()); //求位置
? ? ? ?chess.setCharAt(row,whoTurn); //記錄下棋 ? ??
? ? ? ?gameOver(); ?//判游戲是否結(jié)束
? ? ? ?whoTurn = (whoTurn=='O') ? 'X' : 'O'; //輪換玩家
? ? ? ?computerTake(); ?//計(jì)算機(jī)下
}?
?
public ?int ?findplace() { //計(jì)算機(jī)找下棋位置
? ? ? ?for (int r=0;r<9;r++)?
? ? ? ? ? if (chess.charAt(r)=='K') { ? ?//找個(gè)空位置
? ? ? ? ? ? ?chess.setCharAt(r,whoTurn); ? ? //先填上棋子
? ? ? ? ? ? ?if (isWin(whoTurn)) ?{ //看自己下此位置是否能贏?
? ? ? ? ? ? ? ? ?chess.setCharAt(r,'K'); ?// 恢復(fù)原狀
?? ??? ??? ??? ??? ?return r;
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ?chess.setCharAt(r,'K'); ? // 恢復(fù)原狀
? ? ? ? ?}
? ? ?// 沒(méi)自己能直接贏得位置再看對(duì)方能贏的地方
? ? ? char ?whoTurn2 = (whoTurn=='O') ? 'X' : 'O'; //換成對(duì)方思考
? ? ? for (int r=0;r<9;r++)?
?? ??? ??? ?if (chess.charAt(r)=='K') {
? ? ? ? ? ? ?chess.setCharAt(r,whoTurn2); ? //在空白處填上對(duì)方棋子
? ? ? ? ? ? ?if (isWin(whoTurn2)) { ?//看填上棋子后能贏否
? ? ? ? ? ? ? ? ?chess.setCharAt(r,'K'); ?// 恢復(fù)原狀
?? ??? ??? ??? ??? ?return r;
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ? chess.setCharAt(r,'K'); ? //恢復(fù)原狀
? ? ? ? ?}
?? ??? ??? ?if (chess.charAt(4)=='K') { ? //優(yōu)先看中央位置
? ? ? ? ? ? return 4; ? ? ?//占據(jù)中央,返回4
?? ??? ?}
?? ??? ??? ?else ?{
?? ??? ??? ??? ?for (int d=1;d<5;d++) { ? // 隨機(jī)找個(gè)空位置
?? ??? ??? ??? ??? ?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()) { //判是否下滿(mǎn)格子
? ? ? ?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;//用來(lái)拼接一個(gè)方向的棋子標(biāo)識(shí)
? ?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); //正對(duì)角線(xiàn)
? ?if (sum.equals(s3)) return true;
? ?sum=""+chess.charAt(2)+chess.charAt(4)+chess.charAt(6); //反對(duì)角線(xiàn)
? ?if (sum.equals(s3)) return true;
? ?return false;
}
?
public boolean isFull() { ?//判是否棋盤(pán)下滿(mǎn)了
? ?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é)果如下:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java DelayQueue的原理淺析

    java DelayQueue的原理淺析

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

    Java中反射詳解

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

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

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

    Java設(shè)計(jì)模式之代理模式解析

    這篇文章主要介紹了Java設(shè)計(jì)模式之代理模式解析,代理模式為一個(gè)對(duì)象提供一個(gè)替身,以控制對(duì)這個(gè)對(duì)象的訪(fǎng)問(wèn),即通過(guò)代理對(duì)象訪(fǎng)問(wèn)目標(biāo)對(duì)象,需要的朋友可以參考下
    2023-12-12
  • IDEA中使用Typora編輯md文件的方法

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

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

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

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

    如何將應(yīng)用的log4j替換成logback詳解

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

    Java輕松使用工具類(lèi)實(shí)現(xiàn)獲取MP3音頻時(shí)長(zhǎng)

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

    Spring Boot定時(shí)任務(wù)的使用實(shí)例代碼

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

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

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

最新評(píng)論

汾阳市| 沾益县| 星子县| 通渭县| 洛南县| 双牌县| 建湖县| 连城县| 鄂托克旗| 天峨县| 越西县| 织金县| 东兴市| 开封县| 黔西| 华亭县| 弥渡县| 乐清市| 合作市| 三原县| 友谊县| 郓城县| 小金县| 周至县| 曲周县| 巴楚县| 双鸭山市| 简阳市| 阳山县| 城固县| 长乐市| 长葛市| 浮山县| 湟源县| 孝感市| 伊川县| 望奎县| 方山县| 萨迦县| 石城县| 皮山县|