华容道游戏算法实现(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. Python判断一个字符串是否可以转换为数字(字符串转数字、字符串转整形、字符串转int、字符串转浮点型)
  2. Python中的线程及用法
  3. 全球蜂窝基带芯片厂商去年营收209亿美元,华为海思占16%
  4. 《陶哲轩实分析》引理6.7.1:(指数运算的连续性)
  5. 惠康游戏手柄 WE-8400 Windows 10 驱动教程
  6. Android H5交互实现拍照显示
  7. XCTF-2020CyBRICS部分逆向
  8. Oracle JDE计划BOM应用
  9. mac u盘linux 双系统安装教程,苹果电脑怎么安装双系统 苹果电脑安装双系统教程...
  10. 关于笔记本安装Deepin 或者ubuntu操作系统,无法进入界面。
  11. 有哪些在家健身的软件?Mac健身软件推荐
  12. 【工具推荐】常用前端开源静态网站推荐
  13. python下载电影_Python抓取电影天堂电影信息的代码
  14. 流体的“流线”和“迹线”定义和区别。
  15. 前田约翰《简单法则》十条
  16. Android 简易QQ登录页面
  17. 在.NET中隐藏带有只读Web路径的Web shell
  18. Date日期操作-年月日,时分秒获取
  19. 在vue中使用 百度地图
  20. 项目分包后出的测评报告能盖cnas/cma标识章吗

热门文章

  1. STC15F104W流水灯程序
  2. 曝光机与曝光能量_曝光机能量转换卡,适合川宝,志圣全自动机
  3. Jmeter--数据库测试+web测试
  4. baidupcsgo安卓_BaiduPCS-Go的使用
  5. php合并一维数组,PHP中一维数组的合并与去重的方法
  6. 破解版3D建模软件下载集合
  7. python 作业 2
  8. 数据调度系统中有向无环图的无环检测
  9. HDFS系统中Browse Directory目录显示WebHDFS已禁用
  10. 《算法设计与分析》--主定理和递归树随笔