谈谈 C 和 Win32 编程

作者:杨超

本文地址:http://sokoban.ws/blog/?p=214

我是一个业余的编程爱好者,绝大部分编程的经历来自于编写推箱子游戏。说来断断续续也有十年的 Win32 编程经验了,在Windows平台上先后写过两个推箱子程序(2002, 2004-2005),一个 Color Lines 的克隆(2003),一个结合了滑块和跳棋因素的 Toads and Frogs 游戏 (2007),还有几个推箱子的变种(2010)。这些基本上都是2D的逻辑类游戏。不过我最满意的还要算是和 anian 合作的 SokoFind (2009, 2011)了,一个推箱子关卡的搜索工具,虽然我只编写了其中的图形界面部分。

最近两年,我主要使用 Ubuntu 平台的时间比较多,也接触了非 Win32 平台的编程,包括编写了三个不同平台的推箱子程序: JavaApplet 《SokoPlayer》,基于JavaScript 和 HTML5 的画布(canvas)特性的网页程序《SokoPlayer HTML5》,和在 Linux 下基于 GTK+ 的自由软件《USokoban》。

再加上早前的一个GBA上的推箱子程序,我一共写过5个平台(Windows, GBA, Java, Linux 和 Web)上的6个推箱子程序。

此外,还尝试在另外两个平台编写推箱子程序未果。一是 Flash 平台,主要是 Flash 技术不够开放,找不到好用的免费开发工具和在线教程。二是 Android 平台,已经成功编译并修改了例子程序,但由于时间和技术等各方面原因,还是未能继续。后来出现了非常优秀的《Soko++》程序后,我就失去了编写 Android 推箱子的动力了,毕竟很难写得比《Soko++》更好。

我的Windows编程知识仅局限于用C语言直接调用Win32 API,从来没有用过MFC或者.net或者更新的一些框架,也不懂C#F#等语言。也许对推箱子这样一类的小应用,直接用 C + Win32 API 的方式来编写更划算一些,可以用一些小巧的第三方编译器就能完成编译。而微软似乎从来没有打算提供此类简单易用的开发工具。据飞漫软件CEO魏永明《“自主”操作系统——为什么及如何》一文的观点,原生应用的编程语言对操作系统和生态系统至关重要。微软有自己比较独特的一套开发环境,而这样的编程环境我感觉对业余开发者而言不太方便。所以我用的都是第三方Win32编译工具,主要有下面三个。

1. Digital Mars C/C++ Compiler

2. LCC-Win32

3. MinGW

我觉得这些第三方工具特别方便好用。比如 Digital Mars C Compiler 才区区3M,解压后就直接能用。我用它来编译《M2 Sokoban》的命令如下:

D:\dm\bin\rcc.exe -32 m2.rc
D:\dm\bin\dmc.exe -L/exet:nt/su:windows m2.c sokoban.c puzzles.c m2.res gdi32.lib

第一个命令是编译资源文件,第二个命令则完成对C源代码的编译和连接。SokoFind 最初就是用 Digital Mars 编译的,后来几乎没有修改也可以用 LCC-Win32 和 MinGW 来编译。

不过最近我感觉 Win32 平台已经越来越不重要了。随着平板电脑和浏览器技术的发展,我越来越喜欢在浏览器上完成大部分事情。而在 Windows 和 Linux 下使用 Firefox 浏览器几乎没有任何区别。如果下次我又想写一个新的益智逻辑小游戏,我会选择用JavaScript+HTML5写一个能在浏览器上运行的,而不会选择用C+Win32 API写一个只能在Windows上运行的。如近一两年写的地理小测验系列SokoLines,都是HTML5网页游戏。

 

此条目发表在 推箱子, 编程 分类目录。将固定链接加入收藏夹。

评论功能已关闭。