python数字推盘_从零开始学编程做游戏:一个文科生策划的14周

python数字推盘_从零开始学编程做游戏:一个文科生策划的14周点击”humansflee”按钮则人类移动一回合,点击”zombiesstalk”按钮则僵尸移动一回合。它们采取的寻路策略都是广度优先搜索。游戏不会结束,你可以在这个沙盒中给自己安排胜利条件。布置各种各样的场面看着它们行动,也还能支撑个半小时的乐趣,是到目前为止制作的可玩性最强的游戏……同样的,这个游戏也是一个具有充分扩展性的游戏。感染者会不会转化成僵尸?人类能不能拿到武器反击僵尸?僵…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

点击 “humans flee” 按钮则人类移动一回合,点击 “zombies stalk” 按钮则僵尸移动一回合。它们采取的寻路策略都是广度优先搜索。游戏不会结束,你可以在这个沙盒中给自己安排胜利条件。布置各种各样的场面看着它们行动,也还能支撑个半小时的乐趣,是到目前为止制作的可玩性最强的游戏……

同样的,这个游戏也是一个具有充分扩展性的游戏。感染者会不会转化成僵尸?人类能不能拿到武器反击僵尸?僵尸中间会不会有特殊感染者,能够范围攻击、远程拉住人类、能跳来跳去或者会爆炸?玩家这个上帝的力量有多大?跳出“玩家扮演游戏中的某个角色”的框框,会发现沙盒类游戏的乐趣所在。

第十二周:猜词游戏

python数字推盘_从零开始学编程做游戏:一个文科生策划的14周图15

猜词游戏就是这样:你指定一个词,电脑会搜索词库,将这个词的字母能组成的所有词以星号遮住,你逐个尝试将他们列出来的游戏。

这个游戏中第一次涉及到读取文件。

为了成功的读取到输入的词汇并且匹配所有可能组成的词,我们需要使用一个 merge_sort() 方法来将一个打乱的列表变成有序的。这时我第一次接触到“递归(recursion)”。

要理解递归,首先要理解递归(误)。也就是说这个方法自己不断引用自己。看起来就像

python数字推盘_从零开始学编程做游戏:一个文科生策划的14周图16

这样。

设计一个递归方法前,首先要明确停止递归的条件(base case)。在这个基础上推算每一步应该怎么办。可以拿一个简单的例子在纸上演示,无误后写出来看看效果。

我的设想中,当给出一个 list 后,首先应当将其分成两半,当字母的个数小于等于 1 就应该停止递归。

最后写成的方法看起来像这样:

python数字推盘_从零开始学编程做游戏:一个文科生策划的14周图17

对我来说递归还是挺复杂的。一个简单的递归就要想很久,不过想清楚了之后的效果还是不错的。不少复杂的游戏设计中都会出现类似的规则。

当然,你也可以不使用递归,而是设定一些条件重复地调用一个方法。但那样的话代码量就变得很大,执行效率可能也会变慢。你是要牺牲易理解性换取效率,还是牺牲效率换取易理解性呢?很多时候玩家也会试图来理解你游戏的内在逻辑,能不能让他们轻松办到呢?

第十三周:九宫格(tic-tac-toe)

python数字推盘_从零开始学编程做游戏:一个文科生策划的14周图18

九宫格,世界各地的小朋友可能都玩过的经典游戏。放大到5连就是五子棋。

为这个游戏编写电脑对手采用的是所谓的“蒙特卡罗方法”。也就是从目前这一步开始,推算出每一个可能的游戏结果。胜则加分,负则扣分,和则不加不减;最后选定分数最高的一步落子。这种算法在棋盘复杂的的情况下很难实用,但应付九宫格是绰绰有余。

然后,为了测试这个对手到底强不强,我把游戏规则反了一下变成“逆九宫格”。也就是谁先连到 3 个就算输。这种模式下,没有下中间那个位置的不败手,更能看出电脑的实力。第一盘我还没反应过来,结果输掉了。

python数字推盘_从零开始学编程做游戏:一个文科生策划的14周图19

逆九宫格:先达成三个一线者负

到这里,我编写的 AI 就摆脱了特别直觉的 if-else 或者广度优先搜索规则,进入了一个发挥其强大计算力的时代。假如把棋盘扩大几倍,胜利条件相应放大,人类就很难战胜电脑了。

第十四周:数字推盘游戏(n-Puzzle)

python数字推盘_从零开始学编程做游戏:一个文科生策划的14周图20

一开始的游戏是15个方格,数字错乱了,需要你来把它们移动回正确的位置。有一种改进型就是拼图,首先你要找出图片的正确顺序,然后还要推回正确位置。

游戏本身的规则不难,但要做一个自动解 Puzzle 的 AI 就有点意思了,根据反复试玩观察,一个盘面可以分为几个区域,各自有固定解法:

第二行以下第一列右侧的的

第二行以下最左边一列的

第一行的

第二行的

最末阶段左上角的4个

大家可以观察动画里面解开的过程,研究一下在这些区域我让电脑怎么动作的……

一个个模块分别编写和测试,在内部再分情况讨论,真是件体力活!但只要测试无误,无论这个 puzzle 扩展到多大,解开它也就是时间问题。以后谁再拿这种东西为难你,只要把题目输入进去,就能看着电脑瞬间自动解开并且给你一个操作顺序了。

python数字推盘_从零开始学编程做游戏:一个文科生策划的14周图21

结语

在整个的 14 周过程中间,我从能写简单的几十行程序,逐渐进步到能完成较复杂的600行程序(不含UI部分)。在此过程中,我逐步学到和应用的知识有:

python 基础语法

变量

list

方法(function)

类(class)

各种算法

递归

编程的 style 要求

等等,族繁不及备载。这些知识以及应用的方法有可能忘却,但在此过程中有着更多东西是令我体会深刻,很难忘记的:

将“手感好”、“手感不好”等感觉分析成多个具体部分,进行调整。

评估各种实现某个功能的手段,依据其复杂程度或者实现效率。

分步计划并实现你期望的功能,最后组合成完整的游戏。

这些是在布鲁姆教育目标分类法被列为比较高级的认知类型。知识可以被忘记,理解和应用的过程会让你有一些印象,而分析、评估、合成的过程则可以逐步内化成你自己的能力。你从别人那里听来的经验是知识,也许你在自己行事的过程中能够理解一些、应用一些,但更高级的认知,则非亲手实践不能取得。

python数字推盘_从零开始学编程做游戏:一个文科生策划的14周图22

如果你在游戏或者互联网行业,但你并不知道程序同学们怎么工作、想些什么;或者总觉得自己的设想与实现之间有着一道障壁。也许自己亲手实现(implement)自己设想的过程会带给你启发。

至少我在这 14 周每周做一个游戏的过程中,确实有这样的体会。除此之外,亲手实现设计的快感,掌握自己作品的快感,也是无可比拟的。

声明:新浪网游戏频道登载此文出于传递信息之目的,绝不意味着新浪公司赞同其观点或证实其描述。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226914.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月22日 上午7:43
下一篇 2025年6月22日 上午8:15


相关推荐

  • Element UI 框架中Loading 区域加载的使用方法

    Element UI 框架中Loading 区域加载的使用方法Loading 加载用于加载数据时显示动效 ElementUI 中的 Loading 组件默认是全屏显示 大多时候出于美观考虑我们并不需要这种功能 而是让它显示在我们需要的地方 比如一个后台管理系统 我们和后台进行网络传输的时候 我们并不需要把导航栏和系统的头部覆盖住 只需要内容部分显示 这时候我们就需要对组件的参数进行设置 Element 提供了两种调用 Loading 的方法 指令和服务

    2026年3月19日
    3
  • 蓝桥杯算法竞赛系列第八章——提高篇之广度优先搜索(BFS)

    蓝桥杯算法竞赛系列第八章——提高篇之广度优先搜索(BFS)欢迎回到 遇见蓝桥遇见你 不负代码不负卿 前言 搜索算法在蓝桥中考的还是比较频繁的 之前发表了二叉树数据结构以及深度优先搜索章节 前面还是比较简单的 这里的广度优先搜索可能稍微复杂那么一丢丢 因为要用到队列 不过我们可以使用 STL 容器也是很方便就解决了 声明 由于前半部分是基础知识点定义部分 所以前半部分赘述笔者是参考力扣官方给出的定义以及 算法笔记 一书 一 广度优先搜索算法 BFS 对于广度优先搜索的定义及特点 力扣官方是这样给出的 广度优

    2026年3月16日
    2
  • 估值180億美元 中國AI初創公司月之暗面再尋求融資

    估值180億美元 中國AI初創公司月之暗面再尋求融資

    2026年3月15日
    1
  • ubuntu 下 vlc ,smplayer 播放电影时字幕乱码解决方法

    ubuntu 下 vlc ,smplayer 播放电影时字幕乱码解决方法自:http://blog.sina.com.cn/s/blog_70545bad01015ky1.htmlubuntu下vlc,smplayer播放电影时出现乱码,令人头疼的很,不知道该怎么办,网上查了一些方法,但是没有一个能成功的,也许是我的方法不正确,没办法,只能将就看一下英文字幕,或者有时候看不懂的时候干脆切换到win7底下看,但这终究不是解决的方法,从网上查了很多方法,但是

    2022年7月11日
    33
  • 动态链接库(DLL)初始化例程失败_load dll error解决

    动态链接库(DLL)初始化例程失败_load dll error解决UnabletoloadDLL’rasapi32.dll’:动态链接库(DLL)初始化例程失败。(ExceptionfromHRESULT:0x8007045A)解决方法:应用程序池-标识-选本地系统或者输入管理员身份的账户

    2022年10月9日
    3
  • Linux 的 sendfile[通俗易懂]

    Linux 的 sendfile[通俗易懂]作者:DraganStancevic,2003-01-01原文地址:http://www.linuxjournal.com/article/6345译者:Love.Katherine,2007-03-25译文地址:http://blog.csdn.net/lovekatherine/archive/2007/03/25/1540291.aspx如今几乎每个人都听说过Li

    2022年6月5日
    124

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号