界面截图:

代码:

package 巴什博弈;import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;import javax.swing.*;public class test extends JFrame implements ActionListener {private static int width = 13, height = 8, who = 2, maxLen = 4, curplayer1 = 1, curplayer2 = 120702;private static ArrayList<Integer> list = new ArrayList<Integer>();private static boolean[][] buf = new boolean[width][height];private static JButton[][] checker = new JButton[width][height];private static JButton rule = new JButton("游戏规则");// 1,红 2,蓝 3,可争夺 0,草地private static int[][] judge = new int[width][height];Font font = new Font("宋体", Font.BOLD, 50); public test() {setBounds(100, 50, 1700, 900);setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setResizable(false); setTitle("巴什博弈,王跃坤"); setLayout(null); for (int i = 0; i < width; i++) {for (int j = 0; j < height; j++) {if (i % 2 == 0) {judge[i][j] = 3;}}if (i == 1 || i == 5 || i == 9)judge[i][7] = 3;if (i == 3 || i == 7 || i == 11)judge[i][0] = 3;}judge[0][0] = 1;judge[width - 1][height - 1] = 2;for (int a = 0; a < width; a++) {for (int b = 0; b < height; b++) {checker[a][b] = new JButton(); // 将按钮全部实例化checker[a][b].setBounds(90 + 80 * a, 90 + 80 * b, 80, 80); // 按钮的位置及大小checker[a][b].addActionListener(this);add(checker[a][b]);}}showImg();Init(0, 0);rule.setFont(font);rule.setBounds(90 + 80 * 15, 90 + 80 * 2, 250, 80); // 按钮的位置及大小rule.addActionListener(this);add(rule);repaint();}public void actionPerformed(ActionEvent event) // 单击按钮事件发生时的处理操作{JButton batton = (JButton) event.getSource();if (batton == rule) {JOptionPane.showMessageDialog(this, "红蓝双方抢夺白色方格"+"\n"+"一次最多移动四个位置"+"\n"+"黑色方格不可落子"+"\n"+"任一方只剩一枚棋子时决出胜负");}for (int a = 0; a < width; a++) {for (int b = 0; b < height; b++) {if (batton == checker[a][b]) {// 当按下的位置无子if (judge[a][b] != 3 && judge[a][b] != who) {JOptionPane.showMessageDialog(this, "此位置不可落子!");} else if (len(a, b, who) > maxLen) {JOptionPane.showMessageDialog(this, "移动距离超出最大长度!");} else {change(a, b, who, len(a, b, who));showImg();}}}}if (check() != 0) {// 判断输赢int choice = JOptionPane.showConfirmDialog(this, (check() == 1 ? "红" : "蓝") + "棋赢!!!" + '\n' + "是否重玩游戏。","游戏结束", JOptionPane.YES_NO_OPTION);if (choice == JOptionPane.NO_OPTION) {this.dispose();}if (choice == JOptionPane.YES_OPTION) {this.dispose();new test();}}who = 3 - who;machineDown();if (check() != 0) {// 判断输赢int choice = JOptionPane.showConfirmDialog(this, (check() == 1 ? "红" : "蓝") + "棋赢!!!" + '\n' + "是否重玩游戏。","游戏结束", JOptionPane.YES_NO_OPTION);if (choice == JOptionPane.NO_OPTION) {this.dispose();}if (choice == JOptionPane.YES_OPTION) {this.dispose();new test();}}who = 3 - who;}public static void machineDown() {int count = 0;for (int t : list) {if (t % 100 == 3)count++;}int mylen = count % (maxLen + 1);int find = -1;if (who == 1) {find = list.get(list.indexOf(curplayer1) + mylen);} else {find = list.get(list.indexOf(curplayer2) + mylen);}change(find / 10000, (find / 100) % 100, who, mylen);showImg();}public static int check() {if (list.get(1) % 100 == 2)return 2;else if (list.get(list.size() - 2) % 100 == 1)return 1;elsereturn 0;}public static void change(int x, int y, int who, int len) {int begin = 0;if (who == 1)curplayer1 = (int) (x * 10000 + y * 100 + who);else curplayer2 = (int) (x * 10000 + y * 100 + who);int p = 0;int t;int tail = 1;for (int i = 0; i < list.size(); i++) {t = list.get(i);t /= 100;t *= 100;if (t / 100 == curplayer2 / 100) {tail = 2;}t += tail;judge[t / 10000][(t / 100) % 100] = tail;list.set(i, t);if (t == curplayer1) {tail = 3;}}}public static void showImg() {for (int a = 0; a < width; a++) {for (int b = 0; b < height; b++) {if(judge[a][b]==0){checker[a][b].setBackground(Color.black);}else if(judge[a][b]==1){checker[a][b].setBackground(Color.red);}else if(judge[a][b]==2){checker[a][b].setBackground(Color.blue);}else if(judge[a][b]==3){checker[a][b].setBackground(Color.white);}}}}public static int len(int x, int y, int who) {int t = list.indexOf((int) (x * 10000 + y * 100 + judge[x][y]));if (who == 1) {return Math.abs(list.indexOf(curplayer1) - t);} else {return Math.abs(list.indexOf(curplayer2) - t);}}public static void Init(int x, int y) {buf[x][y] = true;list.add(x * 10000 + y * 100 + judge[x][y]);if (x - 1 >= 0 && x - 1 < width && judge[x - 1][y] > 0 && (buf[x - 1][y] == false)) {Init(x - 1, y);}if (x + 1 >= 0 && x + 1 < width && judge[x + 1][y] > 0 && (buf[x + 1][y] == false)) {Init(x + 1, y);}if (y - 1 >= 0 && y - 1 < height && judge[x][y - 1] > 0 && (buf[x][y - 1] == false)) {Init(x, y - 1);}if (y + 1 >= 0 && y + 1 < height && judge[x][y + 1] > 0 && (buf[x][y + 1] == false)) {Init(x, y + 1);}}public static void main(String[] args) {new test();}
}

巴什博弈小游戏(Java实现)相关推荐

  1. java博弈,人机博弈小游戏(Java)

    人机博弈小游戏 实现功能 电脑随机出拳 玩家任意出拳 五局三胜制 可判断最终赢家 下面展示 代码. // A code block var foo = 'bar'; // An highlighted ...

  2. 人机博弈小游戏(Java)

    人机博弈小游戏 实现功能 萌新一个,自己写了一个猜拳的小游戏.正在学习中... 实现功能 电脑随机出拳 玩家任意出拳 五局三胜制 可判断最终赢家 下面展示 代码. // A code block va ...

  3. java实验2总结心得,打字小游戏JAVA实验总结及心得体会

    篇一:扫雷游戏实验报告 课程设计 班 级: 姓 名: 学 号: 指导教师: 成 绩: 电子与信息工程学院信息与通信工程系 目录 1.任务概述------------------------------ ...

  4. java小游戏-java小游戏-大鱼吃小鱼

    java小游戏-java小游戏-大鱼吃小鱼 1 创建窗口 2 添加背景图 3 启动封面 4 启动页面的点击事件 5 游戏开始时的背景添加 6 双缓存解决闪屏问题 7 地方第一条小鱼的添加 8 敌方左方 ...

  5. java小游戏-java小游戏-飞机大战

    java小游戏-java小游戏-飞机大战 1 窗口创建 2 背景图片添加 3 启动页面制作 4 启动页面点击事件 5 游戏物体父类的编写 6 背景的移动 7 双缓存的添加 8 背景图片的循环出现 9 ...

  6. 贪吃蛇小游戏java实现代码分析

    贪吃蛇小游戏java实现代码分析 贪吃蛇的小游戏,网上的代码比较多,今天周五,在教研室没啥事做,在电脑中发现了一个贪吃蛇的小游戏,于是就看了下实现的源码,发现别人写的代码确实挺好的,自己也是边加注释边 ...

  7. java 猫 游戏,crazycat 围住神经猫-小游戏-Java源码 联合开发网 - pudn.com

    crazycat 所属分类:Java编程 开发工具:Java 文件大小:1373KB 下载次数:1 上传日期:2019-01-19 21:03:14 上 传 者:lynnhl 说明:  围住神经猫-小 ...

  8. java小游戏-java小游戏-黄金矿工

    java小游戏-java小游戏-黄金矿工 1 窗口绘制 2 绘制图片 3 红线绘制 4 红线摇摆 5 红线抓取 6 创建金块 7 双缓存技术 8 抓取判断 9 抓取返回 10 多个金块 11 Bug金 ...

  9. [原创]我的作品:我的迷宫小游戏Java版本

    这个小游戏是我选的第二个数据结构课程设计题目,觉得很有意思,也很有挑战性,对于一个自学Java的人来说写出这个小游戏我觉得无疑是一种鼓励,呵呵呵 实验题目: 随机生成一个迷宫图,迷宫大小为N*N,N预 ...

最新文章

  1. RHCE笔记1-安裝
  2. css设置a连接禁用样式_使用CSS禁用链接
  3. java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
  4. Android SQLite数据库 SQLiteOpenHelper的操作使用
  5. PTN OAM交互接口设计
  6. cactiEZ 使用
  7. 指纹机和计算机无法连接,考勤机怎么连接到电脑?考勤机连接电脑之后操作指南!...
  8. AutoJS4.1.0实战教程---一键签到
  9. 64位linux nvidia 32位,NVIDIA英伟达显卡驱动下载
  10. java中wint是什么意思,Java线程的同步演示代码,java线程演示,package Wint
  11. linux shell搜索某个字符串,然后在后面加上字符串?字符串后面插入字符串?sed字符串后面插入字符串?...
  12. 网络语言C位意思,网络流行语“C位出道”探究
  13. 我收集了如下的一些语录
  14. 成功誓言之我永远不再自怜自贱
  15. 深入浅出JS—18 手把手实现一个Promise类
  16. HTML+CSS的基础复习篇~
  17. C# - 习题07_计算1分2分5分硬币各有多少枚
  18. 白话数字签名(3)—Web程序中的数字签名
  19. 怎么划分领域、子域、核心域、通用域和支撑域
  20. CocosCreator中使用pureMvc

热门文章

  1. 你的年终总结写了吗?先和百格活动一起康康这些参考总结吧!
  2. qt平台集成google拼音中文输入法
  3. SpringBoot日志级别设置
  4. Spring Cloud的Ribbon-Hystrix-Feign
  5. 被谷歌出卖定位信息成“嫌疑犯”,花了大价钱才避免窦娥冤 | 一个自行车爱好者自述...
  6. cds大佬座谈会总结
  7. 教你巧用后视镜判断车距
  8. Python 爬取前程无忧
  9. 笔记本二合一计算机,笔记本界的“变形金刚”:盘点三款值得购买的二合一笔记本电脑 - 全文...
  10. 2018年第二季度DDoS攻击报告