版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、五子棋,实现人机、人人对战。java实现的五子棋,继承Canvas类,纯手工制作。AI很弱(参考的OSchina一位仁兄的,稍作改进。);悔棋功能没写完全,能悔棋,但其实是个空壳子 ;有些小bug,如果你按顺序来,不要乱点,是没问题的 。第一次做AI,大家包涵。想研究下Alpha-beta算法,那AI就没得说了。import java.util.Random;public class AI public static int x_;public static int y_;/ MainFrame mf = new MainFrame();private MyLinkedList keyPoin
2、t = new MyLinkedList(); / 存放所有关键落子点private int kind(int x, int y, int addX, int addY, int role) / 区分棋形种类x += addX; / X方向增加值y += addY; / Y方向增加值int kind = 10; / 等级while (true) if (x = 19 | y = 19 | x = -1 | y = -1) kind+;break; else if (ChessPanel.chessArrayxy = 0 && role = 0)kind -= 2; / 如果此处
3、为AI的棋子而且正在计算AI的落子等级,则升高两级else if (ChessPanel.chessArrayxy = 0 && role = 0) / 如果此处为用户的棋子而且正在计算AI的落子等级,则降低一级kind+; / 等级降低一级break; / 退出循环 else if (ChessPanel.chessArrayxy = 1 && role = 1)kind -= 2; / 如果此处为用户的棋子而且正在计算用户的落子等级,则升高两级else if (ChessPanel.chessArrayxy = 0 && role = 1)
4、/ 如果此处为AI的棋子而且正在计算用户的落子等级,等级降低一级kind+; / 等级降低一级break; / 退出循环 else if (ChessPanel.chessArrayxy = -1) / 如果另一端无子if (x + addX) >= 0 && (y + addY) >= 0 && (x + addX) <= 18&& (y + addY) <= 18&& ChessPanel.chessArrayx + addXy + addY = 0&& role = 0)kind -=
5、 2;else if (x + addX) >= 0 && (y + addY) >= 0 && (x + addX) <= 18&& (y + addY) <= 18&& ChessPanel.chessArrayx + addXy + addY = 1&& role = 1)kind -= 2;break;x += addX; / X方向增加值y += addY; / Y方向增加值return kind;private int countDegree(int x, int y, char
6、 direction, int role) / 评价可落子点的等级int degree = 10;switch (direction) case 'a':if (degree >= kind(x, y, 0, 1, role) / 向右degree = kind(x, y, 0, 1, role);break;case 'b':if (degree >= kind(x, y, 1, 1, role) / 向右下degree = kind(x, y, 1, 1, role);break;case 'c':if (degree >=
7、 kind(x, y, 1, 0, role) / 向下degree = kind(x, y, 1, 0, role);break;case 'd':if (degree >= kind(x, y, 1, -1, role) / 向左下degree = kind(x, y, 1, -1, role);break;case 'e':if (degree >= kind(x, y, 0, -1, role) / 向左degree = kind(x, y, 0, -1, role);break;case 'f':if (degree >
8、;= kind(x, y, -1, -1, role) / 向左上degree = kind(x, y, -1, -1, role);break;case 'g':if (degree >= kind(x, y, -1, 0, role) / 向上degree = kind(x, y, -1, 0, role);break;case 'h':if (degree >= kind(x, y, -1, 1, role) / 向右上degree = kind(x, y, -1, 1, role);break;default:break;return deg
9、ree;private void searchKeyPoint() for (int i = 0; i < 19; i+) for (int j = 0; j < 19; j+) if (ChessPanel.chessArrayij != -1) / 搜索到一处有棋子if (j >= 1 && ChessPanel.chessArrayij - 1 = -1) keyPoint.insNewLastNode(i, j - 1, 'a', countDegree(i,j - 1, 'a', ChessPanel.chessArr
10、ayij),ChessPanel.chessArrayij);if (i >= 1 && j >= 1&& ChessPanel.chessArrayi - 1j - 1 = -1) keyPoint.insNewLastNode(i - 1, j - 1, 'b',countDegree(i - 1, j - 1, 'b',ChessPanel.chessArrayij),ChessPanel.chessArrayij);if (i >= 1 && ChessPanel.chessArrayi
11、- 1j = -1) keyPoint.insNewLastNode(i - 1, j, 'c', countDegree(i - 1, j, 'c', ChessPanel.chessArrayij),ChessPanel.chessArrayij);if (i >= 1 && j <= 17&& ChessPanel.chessArrayi - 1j + 1 = -1) keyPoint.insNewLastNode(i - 1, j + 1, 'd',countDegree(i - 1, j +
12、1, 'd',ChessPanel.chessArrayij),ChessPanel.chessArrayij);if (j <= 17 && ChessPanel.chessArrayij + 1 = -1) keyPoint.insNewLastNode(i, j + 1, 'e', countDegree(i,j + 1, 'e', ChessPanel.chessArrayij),ChessPanel.chessArrayij);if (i <= 17 && j <= 17&&am
13、p; ChessPanel.chessArrayi + 1j + 1 = -1) keyPoint.insNewLastNode(i + 1, j + 1, 'f',countDegree(i + 1, j + 1, 'f',ChessPanel.chessArrayij),ChessPanel.chessArrayij);if (i <= 17 && ChessPanel.chessArrayi + 1j = -1) keyPoint.insNewLastNode(i + 1, j, 'g', countDegree(i
14、+ 1, j, 'g', ChessPanel.chessArrayij),ChessPanel.chessArrayij);if (j >= 1 && i <= 17&& ChessPanel.chessArrayi + 1j - 1 = -1) keyPoint.insNewLastNode(i + 1, j - 1, 'h',countDegree(i + 1, j - 1, 'h',ChessPanel.chessArrayij),ChessPanel.chessArrayij);private void choosePoint() / AI落子int x = 0;int y = 0;if (keyPoint.length = 0) / 如果没有任何合适位置链表中没有可选位置while (true) Random r = new Random(); / 产生随机数int n1 = r.nextInt(10);int n2 = r.nextInt(10);n1 = Math.abs(r.nextInt() % 10); / 获取10以内整数n2 = Math.abs(r.nextInt() % 10);if (ChessPanel
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年一级医院工作制度范文(2篇)
- 2024年前台年终工作总结汇范文(2篇)
- 前期物业服务合同解除的条件
- 明析路基施工的安全管理规定模版(3篇)
- 2024年二手房买方赎回权行使后果合同2篇
- 爆破器材运送制度(3篇)
- 基于云计算的在线教育平台运营合同(04版)
- 三辊研磨机安全操作规程模版(2篇)
- 2024年医院新门急诊综合楼启用仪式领导致辞(3篇)
- 医疗文职面试
- 专题05 说明文阅读(必考题型梳理)50题-2023-2024学年八年级语文下学期期中专题复习(上海专用)(原卷版)
- 部编版七年级语文上册第五单元任务一体会人与动物的关系《猫》课件
- 医科大学2024年12月急危重症护理学作业考核试题答卷
- 提高脓毒性休克患者1h集束化措施落实率
- 环保设施运行维护方案
- 2024年贵州省高考生物真题试卷(含答案解析)
- 辽宁省大连市2023-2024学年高三上学期双基测试(期末考试) 物理 含解析
- 期中测试卷-2024-2025学年统编版语文六年级上册
- 初中语文2024届中考修改病句选择题练习(共15道-附参考答案和解析)
- 8.2金属的化学性质第1课时金属村趣味运动会九年级化学人教版下册
- 工程竣工验收(消防查验)报告消防专项-全套表格
评论
0/150
提交评论