鱼C论坛

 找回密码
 立即注册
查看: 223|回复: 10

[已解决]根据移动力算出可到达的范围,用什么算法合适?

[复制链接]
发表于 2024-1-28 13:01:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有人用pygame做战棋游戏吗?来交流一下思路吗
最佳答案
2024-1-28 18:43:28
本帖最后由 cjjJasonchen 于 2024-1-28 18:44 编辑

我会亿点pygame,关于根据移动力计算可达到范围,我个人建议初学者直接使用枚举就可以了,在程序demo初步实现之后再考虑算法的优劣,毕竟好使就足够了不是吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-28 13:02:00 | 显示全部楼层
根据移动力算出可到达范围,可以使用广度优先搜索(BFS)算法来实现。该算法适用于无权图中寻找最短路径的问题。下面是一个示例代码,假设地图上的每个单元格都有相同的移动力:

  1. from collections import deque

  2. def find_reachable_area(start_position, movement_power, map_size):
  3.     visited = set()  # 用来记录已经访问过的位置
  4.     reachable = []  # 用来存储可到达的位置

  5.     queue = deque([(start_position, 0)])  # 使用队列实现BFS,同时记录当前位置和已经走过的步数
  6.     visited.add(start_position)

  7.     while queue:
  8.         position, steps = queue.popleft()
  9.         reachable.append(position)

  10.         if steps >= movement_power:  # 停止搜索的条件:已经走过了指定的步数
  11.             continue

  12.         x, y = position
  13.         neighbors = [(x-1, y), (x+1, y), (x, y-1), (x, y+1)]  # 上下左右四个方向
  14.         for neighbor in neighbors:
  15.             if neighbor in visited:
  16.                 continue
  17.             if 0 <= neighbor[0] < map_size[0] and 0 <= neighbor[1] < map_size[1]:
  18.                 visited.add(neighbor)
  19.                 queue.append((neighbor, steps + 1))

  20.     return reachable

  21. # 测试代码
  22. map_size = (10, 10)
  23. start_position = (5, 5)
  24. movement_power = 3

  25. reachable_area = find_reachable_area(start_position, movement_power, map_size)
  26. print(reachable_area)
复制代码


关于使用pygame做战棋游戏,确实有人用pygame来制作类似的游戏。pygame是一个非常适合初学者使用的游戏开发库,你可以使用它来处理图形、声音和用户输入等方面。具体的思路可以包括:

1. 创建地图,在屏幕上展示战场和单位。
2. 监听用户的操作,比如点击鼠标选择单位、移动单位等。
3. 实现战斗逻辑,比如计算攻击范围、进行伤害等。
4. 设计游戏规则,比如胜负判定、升级系统等。

当然,这只是一个大致的思路,具体的实现细节会因个人需求而有所不同。你可以参考一些pygame的教程和示例代码来帮助你更好地理解和实践。祝你好运!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 18:43:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 cjjJasonchen 于 2024-1-28 18:44 编辑

我会亿点pygame,关于根据移动力计算可达到范围,我个人建议初学者直接使用枚举就可以了,在程序demo初步实现之后再考虑算法的优劣,毕竟好使就足够了不是吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-28 18:49:06 | 显示全部楼层
cjjJasonchen 发表于 2024-1-28 18:43
我会亿点pygame,关于根据移动力计算可达到范围,我个人建议初学者直接使用枚举就可以了,在程序demo初步实 ...

大佬 那还要算最短路径怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-28 18:52:19 | 显示全部楼层
cjjJasonchen 发表于 2024-1-28 18:43
我会亿点pygame,关于根据移动力计算可达到范围,我个人建议初学者直接使用枚举就可以了,在程序demo初步实 ...

我听说有A*算法,用Python实现难吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 19:31:25 | 显示全部楼层
某一个“天” 发表于 2024-1-28 18:52
我听说有A*算法,用Python实现难吗?

很抱歉,我对于自动寻路不是很了解,刚才查了下百度,看到一个帖子:
https://zhuanlan.zhihu.com/p/595716772?utm_id=0
是知乎的,讲解了A*算法,看起来似乎不错,推荐给你~

如果看不懂的话,我建议你使用最简单的方法,递归算法,计算每个格子可以移动的方向,最后返回所有路径,储存到列表里面,看一下哪个最短就可以啦~
(这样实现起来速度会比较慢,但是战棋游戏稍微慢一点应该也没什么影响吧

算法的实现与编程语言没有关系,哪怕是使用scratch也是可以实现的~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-1-28 20:46:08 | 显示全部楼层
cjjJasonchen 发表于 2024-1-28 19:31
很抱歉,我对于自动寻路不是很了解,刚才查了下百度,看到一个帖子:
https://zhuanlan.zhihu ...

谢谢大佬

点评

新人快快升级哦~下次看到我写的教程贴不要吝啬评分哦~  发表于 2024-1-28 20:49

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
cjjJasonchen + 5 + 5 + 3 新人快快升级哦~下次看到我写的教程贴不要.

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 20:47:55 | 显示全部楼层

我也是菜鸡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-28 20:58:29 | 显示全部楼层

怎么给人评分啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 21:21:58 | 显示全部楼层

等你升级到初级就可以评分啦~

看帖子的右下角“评分”、“举报”,点评分就可以啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 13:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表