大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
点击 “humans flee” 按钮则人类移动一回合,点击 “zombies stalk” 按钮则僵尸移动一回合。它们采取的寻路策略都是广度优先搜索。游戏不会结束,你可以在这个沙盒中给自己安排胜利条件。布置各种各样的场面看着它们行动,也还能支撑个半小时的乐趣,是到目前为止制作的可玩性最强的游戏……
同样的,这个游戏也是一个具有充分扩展性的游戏。感染者会不会转化成僵尸?人类能不能拿到武器反击僵尸?僵尸中间会不会有特殊感染者,能够范围攻击、远程拉住人类、能跳来跳去或者会爆炸?玩家这个上帝的力量有多大?跳出“玩家扮演游戏中的某个角色”的框框,会发现沙盒类游戏的乐趣所在。
第十二周:猜词游戏
图15
猜词游戏就是这样:你指定一个词,电脑会搜索词库,将这个词的字母能组成的所有词以星号遮住,你逐个尝试将他们列出来的游戏。
这个游戏中第一次涉及到读取文件。
为了成功的读取到输入的词汇并且匹配所有可能组成的词,我们需要使用一个 merge_sort() 方法来将一个打乱的列表变成有序的。这时我第一次接触到“递归(recursion)”。
要理解递归,首先要理解递归(误)。也就是说这个方法自己不断引用自己。看起来就像
图16
这样。
设计一个递归方法前,首先要明确停止递归的条件(base case)。在这个基础上推算每一步应该怎么办。可以拿一个简单的例子在纸上演示,无误后写出来看看效果。
我的设想中,当给出一个 list 后,首先应当将其分成两半,当字母的个数小于等于 1 就应该停止递归。
最后写成的方法看起来像这样:
图17
对我来说递归还是挺复杂的。一个简单的递归就要想很久,不过想清楚了之后的效果还是不错的。不少复杂的游戏设计中都会出现类似的规则。
当然,你也可以不使用递归,而是设定一些条件重复地调用一个方法。但那样的话代码量就变得很大,执行效率可能也会变慢。你是要牺牲易理解性换取效率,还是牺牲效率换取易理解性呢?很多时候玩家也会试图来理解你游戏的内在逻辑,能不能让他们轻松办到呢?
第十三周:九宫格(tic-tac-toe)
图18
九宫格,世界各地的小朋友可能都玩过的经典游戏。放大到5连就是五子棋。
为这个游戏编写电脑对手采用的是所谓的“蒙特卡罗方法”。也就是从目前这一步开始,推算出每一个可能的游戏结果。胜则加分,负则扣分,和则不加不减;最后选定分数最高的一步落子。这种算法在棋盘复杂的的情况下很难实用,但应付九宫格是绰绰有余。
然后,为了测试这个对手到底强不强,我把游戏规则反了一下变成“逆九宫格”。也就是谁先连到 3 个就算输。这种模式下,没有下中间那个位置的不败手,更能看出电脑的实力。第一盘我还没反应过来,结果输掉了。
图19
逆九宫格:先达成三个一线者负
到这里,我编写的 AI 就摆脱了特别直觉的 if-else 或者广度优先搜索规则,进入了一个发挥其强大计算力的时代。假如把棋盘扩大几倍,胜利条件相应放大,人类就很难战胜电脑了。
第十四周:数字推盘游戏(n-Puzzle)
图20
一开始的游戏是15个方格,数字错乱了,需要你来把它们移动回正确的位置。有一种改进型就是拼图,首先你要找出图片的正确顺序,然后还要推回正确位置。
游戏本身的规则不难,但要做一个自动解 Puzzle 的 AI 就有点意思了,根据反复试玩观察,一个盘面可以分为几个区域,各自有固定解法:
第二行以下第一列右侧的的
第二行以下最左边一列的
第一行的
第二行的
最末阶段左上角的4个
大家可以观察动画里面解开的过程,研究一下在这些区域我让电脑怎么动作的……
一个个模块分别编写和测试,在内部再分情况讨论,真是件体力活!但只要测试无误,无论这个 puzzle 扩展到多大,解开它也就是时间问题。以后谁再拿这种东西为难你,只要把题目输入进去,就能看着电脑瞬间自动解开并且给你一个操作顺序了。
图21
结语
在整个的 14 周过程中间,我从能写简单的几十行程序,逐渐进步到能完成较复杂的600行程序(不含UI部分)。在此过程中,我逐步学到和应用的知识有:
python 基础语法
变量
list
方法(function)
类(class)
各种算法
递归
编程的 style 要求
等等,族繁不及备载。这些知识以及应用的方法有可能忘却,但在此过程中有着更多东西是令我体会深刻,很难忘记的:
将“手感好”、“手感不好”等感觉分析成多个具体部分,进行调整。
评估各种实现某个功能的手段,依据其复杂程度或者实现效率。
分步计划并实现你期望的功能,最后组合成完整的游戏。
这些是在布鲁姆教育目标分类法被列为比较高级的认知类型。知识可以被忘记,理解和应用的过程会让你有一些印象,而分析、评估、合成的过程则可以逐步内化成你自己的能力。你从别人那里听来的经验是知识,也许你在自己行事的过程中能够理解一些、应用一些,但更高级的认知,则非亲手实践不能取得。
图22
如果你在游戏或者互联网行业,但你并不知道程序同学们怎么工作、想些什么;或者总觉得自己的设想与实现之间有着一道障壁。也许自己亲手实现(implement)自己设想的过程会带给你启发。
至少我在这 14 周每周做一个游戏的过程中,确实有这样的体会。除此之外,亲手实现设计的快感,掌握自己作品的快感,也是无可比拟的。
声明:新浪网游戏频道登载此文出于传递信息之目的,绝不意味着新浪公司赞同其观点或证实其描述。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/226914.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...