编程之美:第一章 1.14连连看游戏设计

本文探讨连连看游戏的设计,利用自动机模型描述游戏状态转移,并通过广度优先搜索寻找相同图形间的最短路径,最小转弯次数。算法通过不断扩展图形可达的格子,记录每个格子的转弯数目和路径长度,最终确定最优路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
连连看游戏设计:
主要包含游戏局面的状态描述,游戏规则的描述:状态的合法转移(哪些操作满足规则,经过这些操作,达到哪些状态)。自动机模型适合描述游戏设计。

如何求出相同图形之间的最短路径,最短路径的转弯数目最少,转弯数目最少时,经过格子数目尽可能少。
最短路径中:把最短路径问题的目标函数改为从一个点到另一个店的转弯次数。广度优先搜索

首先把图形A(x1,y1)压入队列,然后扩展A(x1,y1)可以直线到达的格子,假设这些格子的集合为S0,S0 =Find(x1,y1),如果图形B(x2,y2)在S0zhong ,结束搜索。
A和B可以用直线连接。
否则,低于所有S0集合中的空格子(没有图形),分别找到它们可以直线到达的格子,假设该集合为S1 = {Find(p)|p属于S0},S1包含了S0,令S1'= S1 - S0,
则S1'中的格子和图形A(x1,y1)可以通过转弯数目为1的路径连接。如果图形B在S1'中,可以用转弯数目为1的路径连接。
否则,对S1'中集合的空格子,找出可直线到达的格子集合,记为S2,S2' = S2 - S0-S1,若B在S2'ZHong,可以用转弯数为 2的路径连接。
扩展的过程中,记下每个格子从哪个格子连过来的(转弯的位置),最后图形A和B之间的路径可以绘制出来。

S1' = S1 - S0,S2' = S2 - S0 - S1,可以通过记录从图形A(x1,y1)到该格子(x,y)的转弯数目实现。开始,将所有格子(x,y)和格子A(x1,y1)之间路径的最少转弯数目Min
Crossing(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值