某一个“天” 发表于 2024-1-28 13:01:01

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

有人用pygame做战棋游戏吗?来交流一下思路吗

FishC 发表于 2024-1-28 13:02:00

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

from collections import deque

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

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

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

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

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

    return reachable

# 测试代码
map_size = (10, 10)
start_position = (5, 5)
movement_power = 3

reachable_area = find_reachable_area(start_position, movement_power, map_size)
print(reachable_area)

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

cjjJasonchen 发表于 2024-1-28 18:43:28

本帖最后由 cjjJasonchen 于 2024-1-28 18:44 编辑

我会亿点pygame,关于根据移动力计算可达到范围,我个人建议初学者直接使用枚举就可以了,在程序demo初步实现之后再考虑算法的优劣,毕竟好使就足够了不是吗?
{:10_257:}

某一个“天” 发表于 2024-1-28 18:49:06

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

大佬 那还要算最短路径怎么办

某一个“天” 发表于 2024-1-28 18:52:19

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

我听说有A*算法,用Python实现难吗?

cjjJasonchen 发表于 2024-1-28 19:31:25

某一个“天” 发表于 2024-1-28 18:52
我听说有A*算法,用Python实现难吗?

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

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

算法的实现与编程语言没有关系,哪怕是使用scratch也是可以实现的~{:10_298:}

某一个“天” 发表于 2024-1-28 20:46:08

cjjJasonchen 发表于 2024-1-28 19:31
很抱歉,我对于自动寻路不是很了解,刚才查了下百度,看到一个帖子:
https://zhuanlan.zhihu ...

谢谢大佬

cjjJasonchen 发表于 2024-1-28 20:47:55

某一个“天” 发表于 2024-1-28 20:46
谢谢大佬

我也是菜鸡{:10_284:}

某一个“天” 发表于 2024-1-28 20:58:29

cjjJasonchen 发表于 2024-1-28 20:47
我也是菜鸡

怎么给人评分啊

cjjJasonchen 发表于 2024-1-28 21:21:58

某一个“天” 发表于 2024-1-28 20:58
怎么给人评分啊

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

看帖子的右下角“评分”、“举报”,点评分就可以啦~
页: [1]
查看完整版本: 根据移动力算出可到达的范围,用什么算法合适?