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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python的学生信息管理系统_学员信息管理系统设计

    python的学生信息管理系统_学员信息管理系统设计一.系统需求使用面向对象编程思想完成学员管理系统的开发,具体如下:系统要求:学员数据存储在文件中系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统等功能。程序文件如下:程序入口文件:main.py学员文件:student.py管理系统⽂文件:managerSystem.pymain.py#1.导入managerSystem模块frommanagerSystemimport*#2.启动学员管理系统if__name__

    2022年9月20日
    0
  • Linux主机网卡绑定bond0详解

    Linux主机网卡绑定bond0详解 1什么是bond        网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。可以通过以下命令确定内核是否支持bonding:…

    2022年4月8日
    285
  • python读取图片名称_照片文件名怎么改jpg

    python读取图片名称_照片文件名怎么改jpgPython读取文件夹下的.jpg图片,提取图片的文件名。最近做的图像处理,需要读取文件夹下所有图片和对应的文件名,进行相关处理,最后保存的图片要求文件的名称与原图名称一致。百度找了好多例子也没找到,最后零零碎碎的搜索,通过一些个人的思考把相关的知识点和程序结合,总算做出来了。举个简单的功能:读取文件夹下的图片和对应的图片名,先处理成灰度图像,再进行保存,要求保存的图片的名称与原图名称一致。效果如下:读取F:\image下的000~004.jpg,最后处理的灰度图片保存在F:\image\sa

    2022年9月3日
    2
  • 软件是bs架构还是cs架构_数据库为什么cs架构

    软件是bs架构还是cs架构_数据库为什么cs架构从定义上:CS即客户端到服务器架构;BS即浏览器到服务器架构从效率上:C/S效率高,大部分的数据已经安装在系统上,B/S效率低,每次都要加载最新的数据从迭代升级上:C/S需要删除老版本在安装新版本(在升级完成桌面图标会有一个刷新的动作);B/S则无缝升级;从安全上:C/S更安全,需要安装\注册\登录;B/S有浏览器就可以使用,安全程度低;从开发成本上:B/S成本低;C/S需要不同的系统开发人员,成本高…

    2022年9月8日
    0
  • Eclipse代码的自动补全

    Eclipse代码的自动补全打开eclipse依次点击Window–>Perferences–>Java–>Editor–>ContentAssist在【AutoactivationtriggersforJava:】选项后的文本框中会看到一个”.”。eclipse默认只有在你输入”.”之后才会有代码提示和自动补全。我们需要在”.”之后加上”qwertyuiopasdfghjklzxcvbnm”,其实就是从左至右,从上至下顺序按你的键盘。…

    2022年5月31日
    38
  • 变异系数(测算数据离散程度相对指标)

    变异系数(测算数据离散程度相对指标)变异系数/差异系数(coefficientofvariation):是一种相对差异量数(不带测量单位),因而适用于测量单位不同或测量单位相同但集中量数相差较大的数据变异情况的比较M:平均数(下方r)S(StandardDeviation):标准差,用σ表示σ反映了一个数据集的离散程度,但其运算结果与测量单位有关联,如需要比较两组不同测量单位的σ,需要使用CV…

    2022年5月6日
    153

发表回复

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

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