我在编写一个示例游戏,游戏中一个方块会不断下落,你需要左右操控它。如果方块碰到墙壁,你就输了。我试图随机且持续地生成关卡,这样总会有路可以通过,而且路径会逐渐变窄。
# ## ## ### #### ##### ####### ####### ####### ####### ####### ####### ####### ###### ###### ##### ###### ###### ####### ####### ######## ######## ######## ######
我目前的方法是拥有一个可能路径的数组,然后随机选择一行。问题在于路径不够平滑,有时甚至会变得无法通过:
# ## ##### ######## ##### ######## ##### ##### ######### ### <--- can't get through here## ######## ###### #### #### ######## ####### ######## ####### ####### ###### ##### #### ##### ###### <--- or here# ### ######## ######
哪类算法可以帮助我开始解决这个问题?
回答:
这里有一个简单算法的基础,可以改进以获得更具挑战性和趣味性的游戏。这里没有使用人工智能。
它只是生成路径,这些路径由于之前的路径而总能通过。
基本思路是坚持使用一个索引作为路径的中间。
你可以随机选择保持这个中间索引,或者将其向右或左移动。在我的实现中,我选择随机使路径变窄。一个可能的改进是通过考虑宽度来进行更深入和更智能的移动,以保持路径的一致性(如果需要可以这样做)。
// path是一个布尔值的向量// wideness表示路径的狭窄程度// middle代表路径的中间while wideness > 0{ 有时增加wideness 将middle向右、向左移动,或者不移动 打印路径}
你可以查看这里的C++代码和算法。
结果可能看起来像这样:
|# #########||## ########||## ########||### #######||#### ######||### #######||### #######||#### ######||##### #####||##### #####||##### #####||#### ######||##### #####||###### ####||####### ###||####### #####||######## ####||######### ###||######## ####||######### ###||######## ####||######### ###||######### ###||######## ####||######### ###||######### ###||########## ##||########### #||########### #||########### #||########### #||########### #||########## ##||########## ##||########## ##||########### #||########### #||########### #||########### #||########### #||########### #||########### #||########### #||########## ##||######### ###||######### ###||######### ###||########## ##||########## ##||########## ##||######### ###||######## ####||####### #####||###### ######||####### #####||######## ####||######### ###||######## ####||######### ###||######### ###||########## ##||########### #||########## ##||########## ##||########### #||########## ##||######### ###||########## ##||########## ##||########## ##||########## ##||######### ###||########## ##||########### #||########## ##||########### #||########### #||########### #||########## ##||########### #||########## ##||########### #||########### #||########### #||########### #||########### #||########## ##||########### #||########### #||########## ##||######### ###||######### ###||########## ##||######### ###||########## ##||########## ####||########## ####||######### #####||######## ######||######### #####||######### #####||######## ######||######### #####||########## ####||######### #####||######## ######||######## ######||######## ######||######### #####||######### #####||########## ####||######### #####||########## ####||########## ####|