热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

A*算法cocos2dx8数码

入门讲解(下面是一篇英文入门,最经典,需要好好看)http:www.policyalmanac.orggamesaStarTutorial.htm网上的各种文章只能参考

入门讲解(下面是一篇英文入门,最经典,需要好好看)

http://www.policyalmanac.org/games/aStarTutorial.htm

网上的各种文章 只能参考,不可尽信(本文代码不是很好,可以参看学习,也可能错误,所以自己实践检验,Debug一步步看)


本文地址:http://blog.csdn.net/qq_26437925/article/details/52049011


输入 m n 每个位置的值

1 不可走

0 可走

2 起点

3 终点

样例输入

4 4
0 0 1 0
2 1 0 3
0 0 1 0
1 0 0 0


6 5
0 0 0 0 0
0 0 1 0 0
2 0 1 0 3
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0


可采用freopen("in.txt", "r", stdin); 进行文本输入,因为自己写的,所以自己定义了结果,主要是学习Astar 算法流程


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

const int INF = 0x7fffffff;
const int N = 100;

int m, n;

int po[N][N];

int stai, staj;
int endi, endj;

int dir[4][2] =
{
	{ 0, 1 },   // East
	{ 1, 0 },   // South
	{ 0, -1 },  // West
	{ -1, 0 },  // North
};

bool isRightPos(int i, int j)
{
	if (i >= 0 && i = 0 && j  rs;// 存储路径,包括起点和终点

void astar()
{
	map open;//open表
	map close;//close表
	open.clear();
	close.clear();

	open[stai*m + staj] = 0;
	
	while (!open.empty()) 
	{
		// 取得open表的最小值
		map::iterator it = open.begin();
		map::iterator openMin;
		int minx, miny, minf = INF;
		while (it != open.end())
		{
			if (it->second second;
				minx = it->first / m;
				miny = it->first % m;
				openMin = it;
			}
			it++;
		}
		
		// 到达终点 处理结果
		if (minx == endi && miny == endj)
		{
			int fx= endi;
			int fy = endj;
			rs[endi*m + endj] = 1;
			int tmpx = endi, tmpy = endj;
			while ( (tmpx != stai) || (tmpy!= staj))
			{
				fx = fa[tmpx][tmpy] / m;
				fy = fa[tmpx][tmpy] % m ;
				tmpx = fx;
				tmpy = fy;
				//printf("%d %d\n", endi, endj);
				rs[tmpx*m + tmpy] = 1;
			}
			break;
		}

		// 遍历每个节点
		for (int i = 0; i <4; i++)
		{
			int nx = minx + dir[i][0];
			int ny = miny + dir[i][1];

			// 节点不合理 或者 在close表中 不做处理
			if (!isRightPos(nx, ny) || !canReach[nx][ny] || close[nx*m + ny] != 0)
				continue;
			else{
				g[nx][ny] = distance(nx, ny, minx, miny);
				f[nx][ny] = g[nx][ny] + h[nx][ny];

				// 在open表中 需要比较f值
				if (open[nx*m + ny] != 0)
				{
					if (f[nx][ny] 		// h值可以先求出来,g值在atar算法过程中求解
		for (i = 0; i  
 

结果输出如上图所示


----------------------------------------------------------------------------------------------

cocos2dx 8数码小程序

https://github.com/doctording/cocos2dx_8digital


如下图,点击之后可以实现自动拼图



推荐阅读
author-avatar
伊人怀想
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有