知识屋:更实用的电脑技术知识网站
所在位置:首页 > 综合

春节在家写代码——编程游戏深度推荐(上)

发表时间:2022-03-24来源:网络

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

《程序员升职记》第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关,地板上放着一堆字母和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

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

收藏

热门推荐

  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜