寒假集训的开始是编写五子棋的程序。

五子棋的编写开始时让我想到的是和AI有关,自然觉得应该蛮难的,不知道应该怎么去实现人机对战。

但整个写下来,觉得弄清里面的门路后,就觉得简单起来。

下面把编写时的想法和心得记录下来,以便记录下自己的成长。

1.首先自然是从界面开始。

基本的界面,使用边框布局,右边用JPanel来放置按钮及一些功能。左边则画出棋盘。

然后实现重绘,以更加完善。

重绘包括棋盘的重绘和棋子的重绘。其中需要注意的是棋子的重绘,需要设置一个二维数组来储存棋子的排布。

public void paint(Graphics g) {

super.paint(g);

drawGobang(g);

}

private void drawGobang(Graphics g) {

Graphics2D gg = (Graphics2D) g;// 设置抗锯齿

gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);

gg.setColor(Color.BLACK);

// 画棋盘

for (int i = 0; i < 15; i++) {

gg.drawLine(30, 30 + 40 * i, 30 + 40 * 14, 30 + 40 * i);// 横线

gg.drawLine(30 + 40 * i, 30, 30 + 40 * i, 30 + 40 * 14);// 竖线

}

for (int i = 0; i < chess.length; i++) {

for (int j = 0; j < chess[i].length; j++) {

if (chess[i][j] == 1) {

gg.setColor(Color.BLACK);

gg.fillOval(i * 40 + 10, j * 40 + 10, 40, 40);

} else if (chess[i][j] == 2) {

gg.setColor(Color.WHITE);

gg.fillOval(i * 40 + 10, j * 40 + 10, 40, 40);

}

}

}

}上面的代码中还用到了Graphics2D,来消锯齿。

2.接下来是准备实现判断输赢的功能。五子棋都知道是五个棋子连起来就行,所以,我们需要有四个判断方向。从左到右,从上到下,从左上到右下,从右上到左下。

public int sp(int x, int y) {

// 记录棋子个数

int count = 0;

// 向右

for (int i = x + 1; i < chess.length; i++) {

if (chess[i][y] == chess[x][y]) {

count++;

} else {

break;

}

}

// 向左

for (int i = x; i >= 0; i--) {

if (chess[i][y] == chess[x][y]) {

count++;

} else {

break;

}

}

return count;

}

这是水平方向上的搜索。主要是判断是否和当前所下棋子颜色相同,向左向右,加起来就可以得到是否有等于5的相同颜色棋子。其他方向类似。

3.最后就是要实现人机对战了。

AI所下的棋子肯定是基于一种最优判断,判断的则是利用到不同情况的权值不同。这里用到的是哈希表。简单的解释就是一个字符串映射一个值(不能是基本类型)。我们可以按照值得的程度来设置权值,利用四子相连那就权值肯定就要大啦(都要赢了)。

所以首先的是根据棋子相连情况建立权值表

HashMap hm = new HashMap();

······

接着,我们需要创建一个新的二维数组,用来存每个位置的权值 chessValue[][]

然后要根据棋盘上的棋子情况算每个位置(当然是能下地位置)的权值。搜索在棋盘上权值最大的位置,这个位置就是AI要下的地方。

需要注意的是,

无论是AI还是玩家,每走完一步都要判断输赢;

电脑每走完一部,都要清空chessValue数组,重新计算权值。

这样五子棋基本就是这样了,当然一些细节都还要完善,比如:人机对战时,玩家要选择黑子还是白子;界面增加一些回合数,模式等功能;开始界面的设置······

如何用java编写五子棋_java编写五子棋相关推荐

  1. java制造病毒_java编写病毒的可行性分析

    java编写病毒的可行性分析 最近心情十分郁闷,查阅一些病毒的资料消遣一下,居然发现这样的论调讲 java语言不可能编写病毒,在此特地反驳一下. 1 可执行 论调1:java需要依赖jre,无法在无j ...

  2. java 网络五子棋_Java实现五子棋网络版

    本文实例为大家分享了Java实现五子棋网络版的具体代码,供大家参考,具体内容如下 需求分析: 对于网络五子棋而言,在普通五子棋的基础上需要添加以下功能: 1.拥有服务器端和客户端,用户通过客户端登录服 ...

  3. java中五子棋_Java简单五子棋的实现

    在经过了几天的学习后,已经可以实现一个简单的五子棋游戏了,下面我就写一下编写程序 的过程和自己在这个过程中的心得体会. 第一步:绘制棋盘和实现落子 具体的过程就不写了,我是绘制了一个15*15的棋盘, ...

  4. java 定时删除_Java编写定时删除文件程序

    Java编写定时删除文件程序 /*Java教程:http://www.javaweb.cc*/ import java.io.File; import java.util.Calendar; impo ...

  5. java绘制棋盘_java绘制五子棋棋盘

    本文实例为大家分享了java绘制五子棋棋盘的具体代码,供大家参考,具体内容如下 源码: import javax.imageio.ImageIO; import javax.swing.*; impo ...

  6. java程序步骤_java编写程序的步骤是什么?java编写程序步骤实例讲解

    写java编程就是一步一步的来,这样才会写好一个编程,之后也才能正常的运行,那么java编写程序的步骤是什么?今天我们就来给大家讲解一下这方面的内容.大家可以参考以下文章! 1.编写源文件 使用文本编 ...

  7. java五子棋_java实现五子棋

    一.需求分析 1.画一个15x15的棋盘版面 2.功能按钮:开始游戏,悔棋,认输 3.单选按钮:人人对战.人机对战 4.要求:在棋盘上下棋子,棋子必须要在交叉点上:同一个位置上不能有再下棋子:棋子不能 ...

  8. java绘制五子棋_java绘制五子棋棋盘

    免费资源网,https://freexyz.cn/ 本文实例为大家分享了java绘制五子棋棋盘的具体代码,供大家参考,具体内容如下 源码: import javax.imageio.ImageIO; ...

  9. java 固定电话_Java 编写过滤手机号码或者固定电话的工具类

    以下是分享自己编写的用于过滤手机号码.固定电话.黑名单的工具类TelCheckUtils, import java.util.HashSet; import java.util.Set; import ...

  10. java实现五子棋_java实现五子棋

    [java]代码库import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Tool ...

最新文章

  1. mysql中的主从复制slave-skip-errors参数使用方法
  2. 绿证交易全凭自愿 哪些企业会为其买单?
  3. OpenGL编程指南14:混合半透明Blend
  4. SQL基础操作_4_表的插入、更新、删除、合并操作
  5. release 无法打开windows.h vs_Windows 10 Build 21270发布:Cortana新增打开/搜索文件技能...
  6. 解析法实现一元线性回归、多元线性回归以及数据模型可视化操作
  7. OpenJudge NOI 1.5 02:财务管理
  8. MySQL (9)---数据类型
  9. android 悬浮组件,Android 悬浮组件
  10. java基础应用_Java基础(应用篇)
  11. GO语言学习之路13
  12. 随手练——O(n)解决无序数组排序后的相邻最大差值
  13. Vue 自定义弹出框组件(类似淘宝选择规格)
  14. 独立样本t检验、方差齐性检验
  15. python基础教程十进制_Python基础教程(四)
  16. 打印机共享与文件夹win10共享教程
  17. 简单的自动化测试脚本
  18. Qt 给文本添加删除线 text-decoration
  19. 解决显示“此图片来自微信公众平台未经允许不可引用”错误图片
  20. vue + html2canvas + ArcGIS 3.x 地图一键截图功能踩坑之路(二)

热门文章

  1. linux dmesg带时间戳,linux 时间戳转换/dmesg 时间转换
  2. 华为数据治理及数据分类管理实践
  3. WPS JSA 学习笔记
  4. 投影仪融合、拼接处理系统
  5. esxi install DS3615XS
  6. 彻底删除aix下的oracle rac 数据库,AIX RAC 安装失败完全卸载
  7. MyBatis 插件原理与实战
  8. keil5怎么添加stc芯片库
  9. verilog语法记录(一)
  10. 新 IT 框架概述和双态 IT