我的“Python海龟”诞生了一枚金蛋孵出的却是精灵

时光回溯到2010年,那是一个充满探索与求知的年份。在此之前,我沉浸于使用Visual Basic语言开发3D小游戏,那种在代码的世界里创造出奇妙虚拟场景的感觉,让我乐此不疲。当时,我自认为Basic已经是相当简单的计算机语言了,然而,内心深处却始终有个疑问:是否存在一种比Basic更适合少儿编程的专用计算机语言呢?

带着这个疑问,我开始在网络上广泛搜寻。功夫不负有心人,我终于发现了Scratch 1.4版。这只来自美国麻省理工的“小猫咪”,瞬间吸引了我的目光,从此我便深深爱上了它。2013年,怀揣着对少儿编程教育的热情,我开设了少儿编程培训班。到了2015年,我又将Python纳入教学体系,希望能为学生们带来更丰富的编程体验。经过几年的教学实践,到2018年时,我已经自己编写了较多的青少年Python教学资料。

在这个过程中,我逐渐发现Python的小海龟功能存在一定的局限性。为了深入探究其原理,我打开了它的turtle.py源代码文件,仔细研究其中的奥秘。从2019年开始,我基于Python turtle模块,踏上了开发Python精灵模块的征程。Python精灵模块的核心是设计了一个名为Sprite的类,这一创新大大增加了海龟的功能,例如实现了像素级别的碰撞检测等。如今,所有人都可以通过简单的命令“pip install sprites”来安装并使用这个强大的Python精灵模块。

近几年,我将主要精力投入到信息学奥赛的教学中。每日都在“苦思冥想”各种难题,力求为学生找到更有效的学习方法。2025年8月,暑假班结束,我又开始思考一个新的问题:如果C++的入门教学能够像Python turtle一样简单易懂,那无疑会给中国所有少年带来福音。

为了实现这个目标,我在GitHub上广泛寻找前人的研究成果,下载了许多用C语言或者C++开发的类turtle库。其中,有小熊猫C++库里自带的C语言海龟作图,还有GoC等相关库。我还特意购买了相关书籍,准备教授中小学生,甚至买了一本少儿3维C++编程书。然而,经过深入研究和对比,我最终并没有选择使用它们,这背后有着多方面的原因。

就拿小熊猫C++库里自带的C语言海龟作图来说,其作者显然没有Python少儿编程教育的经历。我曾尝试联系作者,希望他能将里面的命令改成类似Python turtle的风格,但考虑到不能总是麻烦他人,后来也就没有再继续联系。而GoC这个库,里面的命令也没有承接自Python turtle。为了方便儿童输入字符,它将命令设计成一个字符或两个字符,比如pen.o或者pen.oo之类的。其命令相对较少,功能也不够丰富,而且主要是在线使用,作者至今似乎都没有开发自己的编辑器。以前我使用过它的离线版,还需要借助notepad++。从本质上讲,它更像是为专攻信息学奥赛设计的前置课程工具。网上有人建议一、二年级的学生就开始学习GoC,但如果不打算专攻信奥赛,其实可以不必学习。为什么呢?

从大脑发育的角度来看,一、二年级的学生,他们的大脑尚处于发育阶段。科学研究表明,这个阶段的孩子,大脑的前额叶皮质尚未完全成熟,抽象思维能力相对较弱。虽然有些孩子可能在早期就展现出了较强的学习能力和天赋,如果教练眼光独到,能识别出这些苗子,让他们尝试学习GoC也未尝不可。但现实情况是,不可能每个小学生都得去专攻信息学奥赛,毕竟信奥赛的竞争十分激烈,它就是学霸们的战场。而且,对于普通学生而言,他们的少儿编程学习经历应该是丰富多彩的,不应局限于C++编程。因为学习编程的本质并非仅仅掌握某种计算机语言,而是培养逻辑思维、创造力等多方面的能力。有些人大脑发育相对迟缓一些,如果硬要他们在低年级就开始学习C++,很可能会适得其反,就是拔苗助长。根据神经科学的研究,儿童在中低年级阶段,形象思维更为活跃,此时学习图形化编程更加符合他们的认知发展规律。等到他们年龄稍大,心智更加成熟,再去学习C++也不迟。大脑需要得到多方面的刺激,才能得到充分的锻炼和发展。就像一颗种子,需要在适宜的环境中,经历不同的养分滋养,才能茁壮成长。最终,有些学生到了高中阶段,随着大脑的进一步发育和知识的积累,会突然开窍,在学习编程等方面取得更大的进步。

那么,面对绝大多数的普通学生群体,他们的学习路径通常是一、二年级学习图形化编程,三、四年级学习Python编程,到了一定阶段后再学习C++编程。在这种情况下,是否存在一种针对普通学生,能够完美衔接这一课程体系的C++课程呢?据我了解,这样的课程相对比较少,即便有,可能也不公开或者需要收费。毕竟中国地域广阔,很多事情我也难以全面知晓。但不管怎样,我决定自己全新开发一个,正所谓“金窝银窝不如自己草窝”。

在开发过程中,首先面临的就是选择合适的库来作为基础。如果让我的C++库基于OpenGL,虽然可行,但我需要先花费大量时间去学习它,这对于我来说,学习成本过高。于是,我找到了曾经用过的easyX,并用它开发出了原形库。然而,在使用过程中,我发现很多底层的东西我无法掌控,无奈之下只能放弃。接着,我又发现了raylib,它基于SDL2,接口众多,封装得较为复杂。随后,我注意到了SFML,这是一个很不错的库,但考虑到它已经封装了很多内容,我想要掌握更多底层技术,最终还是弃用了它。最后,我选择了工业级别的SDL2库。这个库功能相对较少,但也意味着我自己的开发自由度更大,对底层的掌控力更强。

所以,现在的版本是基于SDL2库开发的。最初,我将其命名为C++ Sprites库,后来又正式命名为C++精灵库。在开发过程中,我不断地进行修改和调试,只为让普通用户能够更好地上手使用。为了让这个库更加完善,我还中途开发了pxC++编辑器,这是专门为C++精灵库量身打造的编辑器。同时,我还开发了DevC++5.11升级包,使DevC++5.11能够支持C++精灵库,从而让它更好地融入到主流的中小学生C++教学生态中。

现在的C++精灵库,比较完美地继承了Python turtle的血脉。不仅如此,我还针对Python turtle存在的不足之处进行了改进与优化。例如,我精心设计了fill命令,角色通过使用fill命令,就可以在封闭区域进行洪水填充。在设定画笔颜色方面,不仅能够让角色的画笔颜色命令接受字符串作为参数,还能接受1个整数或多个整数作为参数。这是因为我对pencolor命令进行了多次重载,使其具有更高的灵活性和自由度。

此外,我还为角色的画笔增添了许多实用的方法。比如,设计了设定阴影度的penshade方法,以及设定颜色饱和度的pensat方法和设定颜色明度的penvalue方法。后来又进一步设计了直接设定颜色的Hue、Saturation及Value的penhsv方法,还有修改颜色透明度的penalpha方法。不仅如此,还为角色设计了贝塞尔曲线与样条曲线等方法。这些精心设计的设定,对于审美能力强的美术生来说,无疑提供了极大的便利,使他们能够更加轻松地创作出具有艺术效果的图形。

现在我们所看到的“C++精灵库”,本质上是基于logo计算机语言编程教育理念在C++世界的延伸并有所超越。它借鉴了Python turtle简洁的API,并针对教育场景进行了深入优化。这样一来,学生们就能够在一个更强大、更接近工业标准的语言环境中,充分体验到“海龟作图”的乐趣与智慧。我们可以把Python turtle和C++精灵库比作是亲兄弟,无论先学习哪一个,再去学习另一个,都会有一种“似曾相识燕归来”的熟悉感,这就是所谓的“双倍赋能”。因为编程的世界在底层本来就是相通的,当我把它们的外观也设计得相似的时候,请不要感到惊讶!

更值得一提的是,由于C++精灵库是基于SDL2库进行开发的,它还能够完美融入SDL2库的命令,为学生提供更深入的编程学习机会。想象一下,SDL2库在各行各业中的广泛应用场景,C++精灵库无疑为学生的未来学习和职业发展赋予了其他类C++ turtle库无法比拟的优势。

 

posted on 2026-01-22 11:17  李兴球  阅读(257)  评论(0)    收藏  举报