以前自己写过搜索华容道的最优解程序,想起来真是效率感人>﹏<,虽然如此,但是全是自己独立完成的,心里还是很高兴的,现在在微信小程序中看到了华容道,决定要再写一次华容道的程序。
这次看了网上的华容道程序,修改自许剑伟先生(福建莆田第十中学)的华容道程序(又是C语言,又是不友好的变量命名,看得我好辛苦≡(▔﹏▔)≡)
程序支持棋子三种移动类型
- 同一颗棋子为一步
- 直线为一步
- 一格为一步
盘面分析
这一步是将图片转为数组盘面,以前是采用取特定的点的颜色,确定棋子的类型,效果不是很好,这次使用的是图片相识算法,用了最简单的图片感知算法,效果非常好,也是因为图片比较简单的关系
基本样本
基本样本来源,包含了所有的横、竖棋子
private final static String[][] HASH_CODE = {
// 兵
{
"3878EEDACB8BBEA1", "387CCEDACA8BBEA1", "387CCADACA8BBEA1", "387CEADACA8BBEA1", "3878D6DACBC9BE81",
"3858D2DACBC9BE81", "3878D6DACB89BEA1", "387CD2DACBC9BEA1"
},
// 横将
{
"F9FAFB71238283C1", "030200E1F7F5F3FB", "0F0C1199E3E2F7E7", "F7F2F9F8FB720B09", "F9F9FBF3E3E1E0C0"},
// 竖将
{
"C793BB9CB05C2E13", "7F7FFBB5980182AE", "EFF72707278DCDDB", "6EB79B075842073B", "DB91ADA1986E7E2A"},
// 曹操
{
"E082810E04008FCF"}
};
示例
↓
10, 1, 5, 5,
10, 15, 15, 0,
11, 15, 15, 12,
11, 0, 13, 12,
2, 3, 13, 4
感知哈希算法
1. 缩小图片尺寸
这一步的作用是去除各种图片尺寸和图片比例的差异, 只保留结构、明暗等基本信息
2.转为灰度图片
简化色彩
1,2步直接使用下面代码完成
BufferedImage part = new BufferedImage(8, 8, BufferedImage.TYPE_BYTE_GRAY);
3.计算平均值
计算所有像素的灰度平均值
/**
* 计算数组平均值
* @param rgb
* @return
*/
public static double average(int[] rgb) {
double s