Jun 03

游戏中不可缺少动画. 在之前的图形界面实现中, 程序是基于用户输入事件驱动的, 除非使用单独的线程, 否则无法实现动画. 所以, 把程序改为基于时间驱动, 并使用精灵(Sprite)的概念. 精灵包含一个或者多个图像资源(帧), 以及其它状态信息. 这时, 使用C++来开发会更接近这种抽象.

主循环每隔一个时钟周期轮询所有的精灵, 获取它们的当前图像帧, 并blit到屏幕上页面. 也可以让它们自己blit到屏幕上面.

这就要求, 所有的逻辑处理都必须由开发者分解成流水线, 流水线的每一个片段都能在一个时钟周期内完成, 而且所有逻辑的流水线也必须能在一个时钟周期内完成.

while(1){
    foreach(sprites as s){
        s->tick();
    }
    others->tick();
    sleep();
}

Written by benegg at 2009-06-03 17:31:44 | tags: ,

Jun 01

在前一篇日志(连连看游戏开发实践(1) – 算法)中, 已经做了一个命令行下的文字界面的连连看. 这一回, 我要给它加一个图形界面外壳, 将数字转换为图片显示, 用鼠标点击代替输入文字坐标.

程序运行界面如下:

Continue reading »

Written by benegg at 2009-06-01 22:57:22 | tags: , , ,

May 31

从本篇文章开始, 我将写一序列游戏开发的文章, 讲述做一个连连看游戏的例子, 既锻炼自己, 也帮助别人. 最终, 游戏会加上网络功能.

连连看算法

如图, 为了找出A, B两点之间的连接路径, 首先过这两点作4条线段, 线段的两端便是地图边缘, 两条与横坐标轴平行, 另两条与纵坐标轴平行. 先考虑与横坐标轴平行的两条.

在两条线段上各取一点C和D, 此两点处在一条与纵坐标轴平行的直线上. 那么, ACDB这条路径便是一条可能的A, B两点的连通路径.

Continue reading »

Written by benegg at 2009-05-31 13:41:30 | tags: ,