Java编写实现九宫格应用

网友投稿 323 2022-08-08


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.parhttp://seInt(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' : iCZlAEknYG'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') { //优先看中央位置

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);

}

}

结果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我http://们。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java超详细讲解多线程中的Process与Thread
下一篇:分享Java多线程实现的四种方式(Java实现多线程的方式)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~