编程生活!
弗朗索瓦,程序员就像次要的神。他们从一个想法和对一些随机比特和字节的访问开始,然后 voilà!从混沌中,他们创造了一种新的生命,在我们的 Linux 系统中成形。这真是太神奇了,mon ami。(mon ami 法语,我的朋友)
是的,当然,弗朗索瓦。你说得很对。这也有点吓人。啊,这种力量。这种责任。从无到有创造出东西的纯粹乐趣。不仅仅是吓人,mon ami,而且令人陶醉。说到陶醉,我们的客人很快就要到了。今晚托斯卡纳听起来不错。你为什么不去酒窖把 1997 年的蒙特普尔恰诺高贵葡萄酒拿上来?Vite,弗朗索瓦!他们随时都会到。(Vite 法语,快点!)
但是他们已经到了。Bon soir,mes amis!非常荣幸再次在 Chez Marcel 见到你们,在这里,精致的 Linux 佳肴始终在菜单上。请坐。弗朗索瓦现在正在酒窖里拿今天的葡萄酒。在我们到达之前,我们正在谈论数字创造的乐趣,编程,您可能已经注意到这是本期杂志的主题。您在餐厅和家里使用的 Linux 系统是众多才华横溢且充满热情的程序员的产物,他们都致力于为这个社区贡献一些东西。有时他们创造的是一种控制论生命,各种化身的生物和机器人。如果您曾经坐在场边,心想自己也想加入这个创造者群体,那么今晚的菜单就是为您准备的。啊,弗朗索瓦,merci。请为我们的客人倒酒。慷慨一点!(Bon soir 法语,晚上好;mes amis 法语,我的朋友们;Chez Marcel 法语,在 Marcel 家;merci 法语,谢谢)
学习新事物的一种方法是通过游戏,Java 也是如此。IBM 提供了一种名为 Robocode 的东西,这是一个编程环境,您可以在其中创建 Java 机器人,让它们在屏幕上的竞技场中战斗。每场战斗都会经历几个回合,并收集统计数据,以便您可以了解您最喜欢的机器人的表现。根据这些信息,您可以调整各种参数,使您的机器人更高效。每 30 步而不是每 100 步停止和转弯会增加您成功的机会吗?找出答案的方法是进行更改、编译、运行并观察结果。对于 Java 新手程序员来说,这是一个很好的入门;它也可能让人上瘾。
要开始使用 Robocode,您需要 Java 开发者工具包。您可以从 java.sun.com/j2se 免费获取副本;只需下载您需要的软件包即可。我在我的系统上使用了 RPM 安装,但您也可以为其他 Linux 发行版获取 GNU tar shell 脚本。我可能应该警告您有关安装的信息——二进制文件没有安装在标准 bin 目录中。要继续,我必须更改我的 PATH 以反映这一点
export PATH=$PATH:/usr/java/jdk.1.3.1_02/jre/bin
安装 Java 后,前往 IBM alphaWorks 获取您的 Robocode 软件包副本,网址为 robocode.alphaworks.ibm.com/home/home.html。您会发现安装过程非常轻松,因为实际上没有什么需要编译的。只需使用 Java 运行安装程序,使用以下命令
java -jar robocode-setup.jar您遇到的第一件事是一个窗口,要求您接受许可协议。接下来会建议一个安装目录。我接受了默认设置,即我的主目录中名为 robocode 的目录。安装完成后,您可以使用以下命令启动程序
cd $HOME/robocode ./robocode.sh当您启动程序时,您将看到 Robocode 竞技场,机器人坦克在那里进行战斗。单击菜单上的“战斗”,然后选择“新建”。将出现一张卡片,要求您为即将到来的战斗选择机器人。所有这些都以“sample.”为前缀,并且每个都有预先编程的特定特征集。例如,从 sample.MyFirstRobot 和 sample.Spinbot 开始。在您继续并单击“开始战斗”按钮之前,请选择战场选项卡。对于我的 1024 × 768 桌面,我选择了一个不错的、朴素的 800 × 600 战场。最后,有一些规则需要遵循,这些规则在“规则”选项卡下定义,包括枪支冷却速率和不活动时间。请注意这些,但现在接受默认值。准备好了吗?Allons,mes amis。按下“开始战斗”。(Allons 法语,我们走吧;mes amis 法语,我的朋友们)
您会得到像 Sitting Duck 这样的机器人,它只是坐在那里等待被炸毁。您也可以使用 Crazy,这是一个运动和射击模式似乎主要是随机的机器人。每个机器人都可以加载和修改,使其行为与原始编程定义不同。
如果像我一样,您对这场战斗的结果并不完全满意,那么是时候开始编码并修改您的机器人了。当您第一次决定修改您的机器人时,Robocode 将构建 Jikes 编译器(它甚至会告诉您去喝杯咖啡)。Oui,mes amis,我自己也在问同样的问题。程序员应该多大年纪才能开始学习真正的 java?要查看机器人编辑器和正在进行的游戏,请查看图 1。(Oui 法语,是的;mes amis 法语,我的朋友们)
最简单的学习方法是使用示例机器人,然后在您感觉更舒服时自己冒险。当编译器准备就绪时,您将看到 Robocode 的开发环境。单击“文件”,然后单击“打开”,然后选择“sample”。您将获得一个新列表,其中包含所有示例机器人(例如 Ramfire)。每个机器人的代码都有很好的文档记录,因此新程序员可以快速掌握正在发生的事情的概念。例如,当您的机器人撞到墙壁时应该做什么
/** * onHitWall: Handle collision with wall. */ public void onHitWall(HitWallEvent e) { // Bounce off! reverseDirection(); }
机器人类的各种方法都很容易掌握,例如 ahead()、back()、fire()、fireBullet()、donothing() 等等。您将在安装目录下的 javadoc/index.html 中找到 API 的文档。
弗朗索瓦,如果您能好心为我们的客人续杯,我想与他们分享另一个类似的编程环境。
Andreas Agorander 的 DroidBattles 的工作原理与 Robocode 类似。然而,该程序没有使用 Java 作为其语言,而是使用了一种类似汇编程序的语言。在这个低级别上,它尽可能接近您的软件创作的核心。该程序本身是使用 2.X Qt 库构建的,因此运行 KDE 2.X 的用户应该可以轻松构建该程序。但是,mes amis,在您构建它之前,它必须先到您手中,或者更确切地说,您必须先找到它。最新的源代码可在 www.bluefire.nu/droidbattles/index.html 获得。(mes amis 法语,我的朋友们)
这个安装的奇怪之处在于,存档中的所有文件都盖上了未来的日期戳,这在我进行 ./configure 步骤时给我带来了一些麻烦。为了使事情正确,我使用了 touch 命令为所有内容盖上当前日期的戳记。
tar -xzvf droidbattles-1.0.4.tar.gz cd droidbattles-1.0.4 ./configure make make install
DroidBattles 令人着迷的地方在于,您不仅在代码中构建机器人,还在硬件中构建机器人,添加 CPU、内存、引擎、等离子枪和扫描仪。当您通过键入 droidbattles & 启动程序时,您将获得如图 2 所示的控制面板。要进行战斗,您需要创建和编程至少一个机器人。按下面板顶部的“机器人创建器”按钮是释放您的机械战士的第一步。

图 2. DroidBattle 的控制面板
您将看到一个用于机器人物理属性的购物清单,以及一个用于代码的窗口。对于那些从未看过汇编程序的人来说,代码看起来会有点奇怪,但不会持续太久。这些指令是针对 CPU 本身的——不是您计算机中的 CPU,而是您机器人上的 CPU。这些指令并不复杂,DroidBattles 附带了完整的用户手册;只需单击面板上的“文档”即可。
顺便说一句,如果您继续为您的机器人添加大量硬件,您可能可以组装它,但系统不会让您运行它。“为什么?”你问。配置编辑器定义了我们在构建机器人时必须遵守的参数。例如,您定义了设备或内存的最大数量,以及这些项目的成本。此外,机器人有一个最大成本,并且每个设备都需要花钱。(不要害怕,mes amis,这是虚拟货币。)成本取决于特定设备的性能。等离子枪的价格从 50 美元到 3,500 美元不等。这些参数允许您在有限的框架内混合和匹配各种特性。使用两把等离子枪但只有一半的处理能力,您在战斗中获胜的机会会更大吗?进行更改,保存您的机器人并找出答案。(mes amis 法语,我的朋友们)
最后,当您完成后,单击“机器人创建器”中的“测试”,然后选择“快速战斗”。您需要选择至少两个机器人才能进行战斗,但它们可以是相同的机器人。战场出现(见图 3),游戏开始。单击“播放”并观看乐趣。随着战斗的进行,您可以单击“暂停”,然后切换到单步模式。在测试模式下运行时,请注意弹出的调试窗口,该窗口显示内存位置、寄存器和正在执行的指令。

图 3. DroidBattle 战场
这一切都非常 Geeky 并且非常有趣。您可能还想关注 Andreas 的页面,因为他正在设置 DroidBattle 服务器。
好吧,mes amis,恐怕今天的时间过得太快了。开始编程之路最困难的方面之一是决定您想创造什么。像 Robocode 和 DroidBattles 这样的程序为您搭建了舞台,并将您带入一场比赛,在其中代码看起来更像是游戏而不是工作。(mes amis 法语,我的朋友们)
再次感谢您,mes amis。您光临 Chez Marcel 总是令人愉快。放松。喝完您的葡萄酒。享受。下个月见。A votre santé!Bon appétit!(mes amis 法语,我的朋友们;Chez Marcel 法语,在 Marcel 家;A votre santé 法语,为您健康干杯!;Bon appétit 法语,祝您胃口好!)
Marcel Gagné (mggagne@salmar.com) 是 Salmar Consulting Inc. 的总裁,该公司是一家系统集成和网络咨询公司,也是 Addison-Wesley 出版的《Linux 系统管理:用户指南》的作者。