小伙伴关心的问题:用编程做游戏,的编程代码(写代码的游戏),本文通过数据整理汇集了用编程做游戏,的编程代码(写代码的游戏)相关信息,下面一起看看。

用编程做游戏,的编程代码(写代码的游戏)

春节难得有个长假,先在这里给大家拜年了。

过去的一年里,大家做游戏的水平有没有提高呢?

咱们的游戏开发群里已经有几千名爱好者,许多学习顺利的同学已经有了飞速进步;而学习进展不顺的同学可能还在苦苦钻研之中。

陷入瓶颈的时候,不妨尝试换个方法学习,说不定就能有所突破。所以趁着新春的躁动,为大家深度推荐两个编程游戏。

一个是2015年发布的老游戏《程序员升职记》(又名Human Resource Machine,人力资源机器),一个是几个月前发布的新游戏,也是前者的续作,名为《70亿人》(7 Billion Humans)。

游戏算不上很新,但是好东西永远也不会过时。我打算从专业性的角度来介绍真实编程与游戏之间的关系,希望能让大家体会到“编程”这种高端解谜游戏的乐趣。

另外由于很多人已经接触过《程序员升职记》,所以我附上了可运行的C语言代码(文末可下载源码),争取让玩过游戏的人看完本文也能有所收获。

1. 基本输入输出,无限循环

《程序员升职记》第2关,将输入栏中所有方块都放到输出栏里。

inbox可以用来从输入栏(左边的传送带)拿出一个方块。outbox可以将手上的方块放在输出栏(右边的传送带)上。jump可以让程序跳转到任意一个位置。

思路就是取一个、放一个、然后回到第一步无限循环。等价的C语言代码:

// 模拟游戏的输入栏 char* inbox[] = {"A", "U", "T", "O", "E", "X", "E"}; void Level2() { while(true) { bool b = false; int out = 0; // b用来区分数字还是字母 b = INBox(&out); OUTBox(b, out); } }

2. 变量:地板,数据的临时存放处

第3关,不用管输入,输出“BUG”即可。

copyfrom:将地板某个位置的方块复制到手上一份。

思路是挑出B、U、G三个字母放在输出栏。

等价的C语言代码:

void Level3() { char floor[] = {U, J, X, G, B, E}; // false代表输出字母 OUTBox(false, floor[4]); OUTBox(false, floor[0]); OUTBox(false, floor[3]); }

3. 加减法和条件跳转语句

第14关,每次取出两个数字,输出其中较大的一个。连续操作直至用光输入。

copyto:将手上的方块拷贝到地板指定位置。add:将地板某个位置的数字与手上的数字相加,结果还在手上。sub:同上,手上的数字减去地板的数字。jump if zero:如果手上的数字是0,则跳转,否则执行下面一句。jump if negtive:如果手上的数字是负数,则跳转,否则执行下面一句。

思路:先取两个数字,放在地板上,然后拿第二个数字减去第一个数字。

如果结果为负,说明第一个数字更大,取第一个数字输出;否则取第二个数字输出。

优化方案:巧妙利用先减再加的方式,可以只用一块地板。等价的C语言代码:

void Level14() { // 求最大值,只用人手和一块地板 int hand; int a; while (true) { INBox(&hand); a = hand; INBox(&hand); hand = hand - a; if (hand < 0) { hand = a; } else { hand = hand + a; } OUTBox(true, hand); } }

4. 高级语法:引用(下标)

这个游戏的代码真的不好写。一路烧脑之后,坚持到29关,会发现真正的高级抽象代码登场啦!

第29关,输入一个数字,以这个数字作为地板的编号,取出对应的字母,然后输出该字母。

copyfrom和copyto出现新的变化:以前是直接指定地板编号。现在如果对地板编号加上中括号,代表取该地板上的数字对应的地板。(思路上再间接一次,如果说“地板12”代表第12块地板,那么“地板[12]”则代表地板12上面的方块8,也就是指第8块地板)。

等价的C语言代码:

// 模拟游戏的输入栏 char* inbox[] = {"4", "4", "1", "4", "1"}; void Level29() { // 取地板上某一块作为临时变量 int n; // 地板上的字符 char floor[] = "NKAERDOLYJ"; while (true) { INBox(&n); // n 被作为下标使用 OUTBox(false, floor[n]); } }

如果写成C语言反而很好理解——不就是数组下标嘛。

但是放在游戏中,这种间接的思路绝对是打开了新世界的大门,对编程思维有极大锻炼,强烈建议大家坚持玩过第29关。

玩到30关,真的会变强。

5. 终极操作:引用(下标)配合加减法

第30关,地板上放着一堆字母和0,每输入一个数字,都从该数字代表的地板开始连续依次取字母并输出,直到遇到0这一次操作结束。然后再不断重复这种操作。

最终会得到一串连续的字符,也就是解密了密码。

思路:这里并没有新的指令,但是我们如果将数字的加减法与引用地板配合,就会爆发出强大的功能。

输入一个数字,比如4,放在空的地板24上。取地板[24],也就是4,并输出。利用bump+,加1操作,4+1=5。回到第2步,这时变成了地板5。反复2~4,直到取到了0为止。

等价C语言代码:

char* inbox[] = {"4", "15", "7", "0", "21", "17", "11", "20", "2", "13", "4", "17", "21"}; void Level30() { // 密码破译 int n; char floor[] = "GET\0TH\0TAR\0AWAKE\0IS\0XXX\0"; while (true) { INBox(&n); while (true) { OUTBox(false, floor[n]); n++; if (floor[n] == \0) { break; } // 注:C语言中,\0等于0 } } }

代码执行过后,得到了字符串:

这句话联系到了这个游戏最后的秘密,细思极恐啊。

《程序员升职记》的玩耍建议

1. 玩这个游戏真的可以学编程,强烈建议对编程和游戏开发感兴趣的人玩一玩。这个游戏的算法覆盖了大部分编程基础内容,而且用这种类似“汇编”的代码实现难度很不低,很锻炼编程思维。

2. 这个游戏每关都有“强迫症挑战”,追求最小化代码行数和最佳化执行效率。也就是传说中的“优化”。

特别建议:一开始不要优化!除非对于有余力的同学可以尝试挑战,大部分人还是适合先把精力放在过关上面,玩到后面再回头看前面的问题就会很简单,到时候再优化也不迟(也可参考网上的答案进行优化,学习优化技巧)。

3. 在选关界面,右侧是主线,左侧是支线。中后期支线难度非常大,建议以攻略主线为主。

4. 有人问通关游戏是什么水平?恭喜你,虽然 *** 实的程序代码还是需要花时间学习,但是至少在思维水平和解决问题的灵活性上,你已经达到了相当不错的水准,如果开始学习编程进展一定会很快~~

5. 对于计算机专业的大学生或者自学编程的同学,如果学完基础知识但是不会做题,那就更要加倍推荐这个游戏了。

★ 本游戏有steam、wegame、手机版本,均支持中文。

参考答案有很多,请百度,比如百度经验就有:https://jingyan.baidu.com/article/ca00d56c26efaae99eebcfe4.html

务必在实在想不出来的时候再研究,或者学习别人的优化技巧。不求通关,但求进步。

本篇内容有点多,续作《70亿人》和其它编程游戏下期介绍(续作更精彩)。

本期源码地址:

https://github.com/mayao11/CodeGames

对游戏开发有兴趣的同学,欢迎光临 皮皮关 专业的游戏开发教育。

更多用编程做游戏,的编程代码(写代码的游戏)相关信息请关注本站,本文仅仅做为展示!