Java编写实现九宫格应用

作者:shihao9895 时间:2021-12-22 21:01:06 

本文实例为大家分享了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') { ? //优先看中央位置
? ? ? ? ? ? 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);?
}
}

结果如下:

Java编写实现九宫格应用

来源:https://blog.csdn.net/shihao9895/article/details/84797809

标签:java,九宫格
0
投稿

猜你喜欢

  • 基于Springboot实现JWT认证的示例代码

    2023-04-01 09:46:40
  • Android 中通过ViewDragHelper实现ListView的Item的侧拉划出效果

    2021-08-14 18:37:46
  • Android多线程+单线程+断点续传+进度条显示下载功能

    2023-08-13 15:48:26
  • java算法之Math.random()随机概率玩法实例演示

    2023-11-28 23:32:17
  • java中的Object类的toSpring()方法

    2022-08-30 12:36:03
  • SpringBoot整合Shiro的方法详解

    2022-04-13 15:05:56
  • Android自定义封装banner组件

    2023-08-25 22:19:29
  • Java jar打包工具使用方法步骤解析

    2023-07-01 12:26:47
  • 详解如何在C#中使用投影(Projection)

    2023-03-28 09:14:15
  • 使用ehcache三步搞定springboot缓存的方法示例

    2021-06-25 04:44:12
  • webBrowser执行js的方法,并返回值,c#后台取值的实现

    2023-12-07 13:29:13
  • 一篇文章带你初步认识Maven

    2023-08-31 01:56:14
  • Android实现跳动的小球加载动画效果

    2022-01-24 19:43:28
  • Springmvc返回html页面问题如何解决

    2021-07-05 09:29:45
  • Java Map.values()方法之如何获取Map集合中的所有键值对象

    2022-11-16 15:40:30
  • 解决java.util.NoSuchElementException异常的问题

    2023-02-10 08:26:46
  • Java中利用gson解析Json实例教程

    2023-10-31 04:07:41
  • Java9的一些新特性介绍

    2022-03-29 04:13:58
  • C#中如何正确的使用字符串String

    2021-07-20 21:03:50
  • Java入门绊脚石之Override和Overload的区别详解

    2022-05-04 15:24:51
  • asp之家 软件编程 m.aspxhome.com