-
最近文章
近期评论
- [坑]POI补完计划#1 | qiancl 在 推箱子游戏的一个箱子推动路径搜索算法 (二) 上的评论
- [坑]POI补完计划#1 – qiancl 在 推箱子游戏的一个箱子推动路径搜索算法 上的评论
- HZF 在 推箱子是PSPACE完全问题 上的评论
- sokoban 在 马拉松简史 上的评论
- 跑步世界 在 马拉松简史 上的评论
文章归档
- 2021 年八月
- 2021 年五月
- 2021 年四月
- 2021 年二月
- 2021 年一月
- 2020 年十一月
- 2020 年十月
- 2020 年九月
- 2020 年八月
- 2020 年七月
- 2020 年四月
- 2020 年三月
- 2020 年一月
- 2019 年十二月
- 2019 年十一月
- 2019 年十月
- 2019 年八月
- 2019 年五月
- 2019 年四月
- 2019 年二月
- 2019 年一月
- 2018 年十月
- 2018 年七月
- 2018 年五月
- 2018 年四月
- 2018 年三月
- 2018 年一月
- 2017 年十二月
- 2017 年十一月
- 2017 年十月
- 2017 年九月
- 2017 年八月
- 2017 年七月
- 2017 年六月
- 2017 年五月
- 2017 年四月
- 2017 年三月
- 2017 年二月
- 2017 年一月
- 2016 年十二月
- 2016 年十一月
- 2016 年十月
- 2016 年九月
- 2016 年八月
- 2016 年七月
- 2016 年六月
- 2016 年五月
- 2016 年四月
- 2016 年三月
- 2016 年二月
- 2016 年一月
- 2015 年十二月
- 2015 年十一月
- 2015 年十月
- 2015 年八月
- 2015 年六月
- 2015 年五月
- 2015 年四月
- 2015 年三月
- 2015 年二月
- 2015 年一月
- 2014 年十二月
- 2014 年十一月
- 2014 年十月
- 2014 年九月
- 2014 年八月
- 2014 年七月
- 2014 年六月
- 2014 年五月
- 2014 年四月
- 2014 年三月
- 2014 年二月
- 2014 年一月
- 2013 年十二月
- 2013 年九月
- 2013 年七月
- 2013 年六月
- 2013 年四月
- 2013 年二月
- 2012 年十二月
- 2012 年十一月
- 2012 年十月
- 2012 年八月
- 2012 年七月
- 2012 年五月
- 2012 年四月
- 2012 年二月
- 2011 年十一月
- 2011 年九月
- 2011 年八月
- 2011 年七月
分类目录
博客链接
功能
月归档:十月 2012
谈谈 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个推箱子程序。 … 继续阅读
GBA上的推箱子程序
作者:杨超 本文地址:http://sokoban.ws/blog/?p=678 GBA是日本的任天堂公司于2001年3月发行的一款掌上游戏机。国庆在老家翻出了我十年前手抄的GBA硬件技术文档和GBA使用的ARM7tdmi微处理器的指令和汇编语言技术文档。那是我在2002年大三暑假的时候对着电脑上的PDF文件抄的,抄这玩意大概花了我一个月的时间。当时抄的目的只有一个,就是为了写一个在GBA上运行的推箱子程序。 之所以有写一个GBA上的推箱子程序的想法,主要有那么几个原因。一是当时我有一部GBA,二是从同学JimmyZ那里弄到一个基于gcc的GBA开发包DevKitAdv,三是我对推箱子莫名的喜爱,在那之前已经写过一个Windows下的推箱子程序了。 虽然我费了很大力气抄写了技术文档,但最终用到的却不多。因为GBA是没有操作系统的,程序直接运行在硬件上,所以对我来说还是有比较多新奇的东西。如检查按键可以直接读取某固定地址的内存。下面代码判断A和L键是否同时按下。 #define REG_P1 *(u16*)0×4000130 #define KEY_A 1 #define KEY_L 512 short int key=REG_P1; if( (key & KEY_L)==0 && (key & KEY_A)==0 ) {…} 对显存的操作要复杂一些,十年之后我扫了几眼源代码还是不能明白个大概。显存主要支持背景和小精灵(sprite)等面向2D游戏的功能。 经过一番努力,先是在当年的8月底成功编写出一个可以在模拟器上运行的推箱子程序,用的时间似乎比抄技术文档的时间还少。我主要用VisualBoyAdvance来测试。 再过了几个月,有了烧录卡之后,在GBA真机上也成功运行了。GBA在运行一个卡带之前,要先CRC验证,若验证不对则终止运行,而模拟器往往忽略这个验证。所以要在真机上运行,还要用一个工具把正确的CRC写到二进制文件的恰当位置。我当时编译使用的批处理文件如下,其中GBARM就是用来计算并写入CRC的。 path=C:\devkitadv\bin gcc -o skb.elf skb.cpp -lm objcopy -O binary skb.elf … 继续阅读