Wednesday, December 22, 2021

教小朋友编程之坦克大战 1

教小朋友编程是个任重道远的活,特别是当小朋友不热心学习,上课只是应付,希望混完时间好继续玩游戏。想让小朋友好好学,就要保证课程通俗易懂,又要好玩,小朋友最喜欢玩游戏。

 很多推荐从Scratch(麻省理工MIT创建的像搭积木式的流程编程)学起。Jon Woodcock写的《Coding Games in Scratch: A Step-by-Step Visual Guide to Building Your Own Computer Games》很不错,小朋友基本可以step by step一步步做下来,书中有少许bug或missing的地方可能要成人程序员的帮助才能解决,不过其中的几个小游戏还是很不错的。Scratch的问题是太过简单,对稍微大点的孩子能学到的编程知识非常有限。

就我个人看来,Python和Java是另外两个适合作为入门编程语言,Python尤为容易作为起步。教小朋友可以从游戏编程开始,比如Minecraft。Minecraft网站提供python-101,可能有些课件不是free的,可以参看David Whale, Martin O'Hanlon写的《Adventures in Minecraft》,同样有step by step的instruction,可以教小朋友Python的基本数据类型,程序逻辑等,很不错。

国内有提供Python教程以坦克大战为题,是个很好的题材。当年我们曾在游戏机上乐此不比的玩这个游戏(Tank 1990)。


我于是上网查了查,有人用C++编写了这个游戏并公布在Github,是基于C++11和SDL2 2D图形库。源程序很容易在Linux下编译运行,当我在Windows下运行时遇到了几个问题。在Windows上编译时,Makefile是针对MinGW设置的。我个人不喜欢在Cygwin上再安装MingW,所以决定改Makefile,直接用Linux的设置在Cygwin下编译运行,除了不用拷贝链接MingW的库,'-mwindows' option也没有什么作用。需要安装Cygwin SDL2 package: libSDL2-devel, libSDL2_ttf-devel, libSDL2_image-devel。奇怪的是编译后生成的可执行文件运行后,什么都没有发生。通过debug后发现,SDL_Init()返回-1,SDL_GetError返回 "No available video device"。Google结果是Cygwin下需要启动xserver,并设置DISPLAY=:0。此后终于可以在Windows下打坦克大战,只是没有声音。下一步看看怎么把声音加上,和怎样用Pygame来porting。

0 Comments:

Post a Comment