华容道游戏算法实现(java/android)

  • 简介
  • 棋子
  • 棋盘
    • 棋盘的压缩存储
    • 棋局状态的表示
  • 求解

简介

华容道简介
百度百科
源码已经放在github上,需要可自取
开始写算法时,使用的eclipse,后来用AS加的界面,所以两方面衔接不是太好。
在PC端计算横刀立马用时约1.5s,手机端更慢一些
github链接
这里只讲解思路

棋子

共有5种棋子(空格也算一种棋子)
曹操2*2
关羽2*1
四上将1*2
兵1*1
空格1*1

总计棋子五种类型使用abcde表示
总计棋子12个,使用a~l表示

棋盘

棋盘使用二维数组表示大小为5*4
实际棋局

抽象表示

棋盘的压缩存储

每个棋子在棋盘中的位置可以表示为
对于曹操与四上将,高度为2,纵坐标最大为3
因此可以四位二进制表示,如开局曹操坐标为 01,00
对于关羽与兵,纵坐标最大为4,使用五位二进制表示
如第一个兵g,坐标为00,100,
共需1*4 + 4*4 + 1*5 + 4*5 + 2*5 = 55 个二进制位
可以存储于long类型中(用于记录步骤,可用来比较,是否走过)

棋局状态的表示

棋局1

棋局1实际表示

如棋局1的状态可以表示为:

同样对棋局类型进行压缩存储,但不再存储空格,每次搜索一种类型,同样将压缩后的状态存放于long类型中。
如果将黄忠和张飞的位置互换,棋局的存储会不同,但计算出棋局的状态是相同的。
在求解的时候可以使用棋局状态作为判定条件,减小不必要的计算。

棋局2

棋局2实际表示

棋局1和棋局2看似不同,而实际只要走出其中一种局面,就可以求出正确的解法,因此对两种棋局都进行求解是不必要的。

所以,每次计算棋局,都计算棋局的状态和棋局的镜像状态,便于判定。

求解

我采用的是树的层优先遍历进行求解。
在对一种棋局进行求解时,把当前棋局作为根节点,开始建树,每个节点只记录自己的父节点。
进行建树时,每产生一个节点,就记录该节点类型和该节点的镜像节点类型,同时对树进行剪枝:如果树的新节点类型以及存在,则该节点不再生成子节点。
当某一节点为终止节点,即曹操坐标为01,11时,建树停止,所得解为最优解,依次压栈出栈可以获得求解步骤。

求解结果:

华容道游戏算法实现(java/android)相关推荐

  1. java华容道游戏_用java设计一个华容道游戏

    展开全部 import java.awt.*; import java.awt.event.*; public class MoveExample //主类 { public static void ...

  2. 华容道游戏开发--android小组

    这个是我们小组的同学做的一个游戏,游戏界面做的比较简单一点,但是还是麻雀虽小五脏俱全滴... 1,游戏背景 华容道是古老的中国游戏,以其变化多端.百玩不厌的特点与七巧板.九连环合称"中国的难 ...

  3. Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(

    2019独角兽企业重金招聘Python工程师标准>>> 在Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(百搜技术) 在Java ME游戏开发中,经常需要进行碰撞检测 ...

  4. java开心消消乐代码_Vue实现开心消消乐游戏算法

    摘要:这篇Vue栏目下的"Vue实现开心消消乐游戏算法",介绍的技术点是"开心消消乐.Vue.开心.游戏.算法.实现",希望对大家开发技术学习和问题解决有帮助. ...

  5. Java(Android)游戏开发框架LGame-0.2.7发布

    Java(Android)游戏开发框架LGame-0.2.7发布 2010-08-19更新内容: 1.针对Android版增加了多点触摸支持. 2.增加了一组模拟按钮,以Screen实现Emulato ...

  6. 华容道源代码android,基于Android的华容道游戏的源代码

    基于Android的华容道游戏的源代码: 相关文件下载在Linux公社的1号FTP服务器里,下载地址: 用户名:www.linuxidc.com 密码:www.muu.cc 在 2011年LinuxI ...

  7. java语言麻将游戏代码_麻将游戏算法深入解析及实现代码

    麻将游戏算法深入解析及实现代码 这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家. 麻将是一种大家最喜 ...

  8. 安博河北实训基地java+android

    安博河北实训基地java软件开发工程师课程       安博河北实训基地android软件开发工程师课程                     艾迪教育 Android工程师简介• Android工 ...

  9. 性能优化之Java(Android)代码优化

    最新最准确内容建议直接访问原文:性能优化之Java(Android)代码优化 本文为Android性能优化的第三篇--Java(Android)代码优化.主要介绍Java代码中性能优化方式及网络优化, ...

最新文章

  1. hive常用sql语句
  2. IE10浏览器兼容模式
  3. Dockerfile命令
  4. PL0编译器TurboPascal版再现时间:2009-07-20 17:24:49来源:网络 作者:未知 点击:52次
  5. 续上篇随笔:陈勇提示做分批载入需要用到的数据
  6. 三运放差分放大电路分析_三运放差分放大电路
  7. KP-ABE基于属性的加密加解密算法及Access Tree构建
  8. Java 复习笔记 异常Exception
  9. python必背入门代码-学 Python 必背的42个常见单词,看看你记住了几个?
  10. 5W2H | 关于写博客的七点反思
  11. 微软内部补丁(非正式发布)之取得方式(20110713)
  12. 云教务学校管理系统源码
  13. redis客户端下载(windos版本)
  14. 测试测量(3)- 如何选择设备的平台
  15. 【读书笔记->统计学】12-02 置信区间的构建-t分布概念简介
  16. 华人科学家量子计算机,华人科学家张首晟辞世 有望获得诺贝尔奖却成遗憾
  17. 有关chromium浏览器 ios 读证书 验证证书 (注没有找到方法),在这里做一下笔记
  18. 如何隐藏Android模拟器的虚拟按键
  19. 同时删除多个 PDF 文档前几页
  20. 新点软件怎么导入清单_表格软件excel怎样导入数据 | 新点软件怎么导入excel清单表格 表格有什么要求???...

热门文章

  1. JavaFX居中问题
  2. file java mkdirs_Java File mkdirs()方法
  3. android os能删掉那,安卓手机哪些系统软件可以删除?
  4. 世上从不缺少美 只需发现美的眼睛
  5. 【linux】文件IO
  6. Java常见的十种“运行时异常”
  7. linux查找文件夹
  8. Android 通过USB与PLC设备通信(USB转串口)
  9. Ruby+Watir安装手册
  10. Android后台截屏功能