游戏是怎么运行的?如果只知道充值,实际上并不一定能变强

今天上课的时候,问小朋友们平时都打什么游戏。

好多人都在玩即时战略类的“某某荣耀”,或者第一人称射击类的“某某契约”。当然,也有一些同学喜欢玩单机游戏,Steam平台账号都有几十个游戏。

看着他们聊得热火朝天,我问:“那你们知道,这些游戏到底是怎么运行起来的吗?”

这下大家好像都摸不着头脑了。

有的同学说:“不就是有个客户端嘛,输入账号登录进去就能玩了。”

还有的同学补充:“得选不同的服务器呀!我们寝室几个人想一起玩,就得都在同一个服务器里,还得建同一个房间。”

也有同学提到充值系统,我们还顺便聊了聊年初某款游戏出现的充值异常问题。借机给大家科普了一下,在后台其实是通过UUID来实现游戏账号和充值账户的映射关系的。

到了第二节课,我让大家体验了两个根据上学期课程改进来的小游戏。一个是控制键盘的双人三国对战,另一个是控制鼠标的类似雷霆战机的游戏。

大家对战打得倒是很开心,但对于“交互到底是怎么实现的”反而没怎么太注意。

想当年我刚学完C语言和Python那会儿,最难的一步也是不知道现实中的这些语言到底怎么用,更不清楚各种软件和游戏是怎么开发出来的。所以借着这个机会,我给他们留了个思考题:你们关注的那些游戏,是用什么编程语言开发的?每种语言在里面发挥了什么作用?

课后有同学去搜了一下,大概知道了游戏引擎可能是C或C++写的,脚本可能是Lua之类的语言。但他们怎么也没想到,我给他们用的那个例子,其实就是一个简单的网页,只用了JavaScript就实现了那么多丰富的操作。

他们还以为今年体验的游戏一定和去年用Python写的类似,肯定是根据课程来调整,换成了C语言。正是利用了这种思维定式,让他们产生了一种出乎意料的效果。

其实,最主要的是想让他们认识到:不同的场景需要用不同的编程语言。

并不是学精一门就够了,而是要触类旁通。不止学精一门,还能多通其他门,需要的时候能迅速学会并掌握。在现实的场景中,要意识到每一门编程语言到底是干嘛用的,发挥什么作用,有什么效果。

现实情况下,除了直接写驱动或者专门的性能函数之外,大多数开发场景下,哪怕是用C/C++,也很少有单枪匹马把所有东西都从头重写一遍的了。

尽量用已有的技术框架,不重复造轮子,这才是现实开发的真正情况。

下次授课,我打算借着我之前写的一个简单的NumC来给大家演示一下这个过程——有现成的、可以使用的依赖库,就不用再自己去死磕底层代码了。

就像是写论文的时候,不能全都自己愣写,一定得要做好文献检索和参考,引用好前面的成果,之前人写的什么样,这问题前面人是不是已经解决了,如果没解决,有什么问题等等,这些都要写好。

希望孩子们慢慢能懂这个道理吧。

预览时标签不可点