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在反序列化時失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06SpringMVC架構的項目 js,css等靜態(tài)文件導入有問題的解決方法
下面小編就為大家?guī)硪黄猄pringMVC架構的項目 js,css等靜態(tài)文件導入有問題的解決方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10使用Jackson來實現Java對象與JSON的相互轉換的教程
這篇文章主要介紹了使用Jackson來實現Java對象與JSON的互相轉換的教程,文中羅列了3中Jackson的使用方式,需要的朋友可以參考下2016-01-01