2008年12月20日星期六

mario demo


exe (31.5k) src (14.9k)

图片是从fc模拟器上截屏, 然后用windows画图程序一点一点弄的. 方块间碰撞检测困扰了很长时间, 今天又认真想了一遍, 总算行了.

Rectangle Collision Function

两矩形碰撞检测函数.
Rect定义:
typedef struct {
int x, y, w, h;
} Rect;

#define CL_RIGHT 1
#define CL_LEFT 2
#define CL_DOWN 4
#define CL_UP 8

检测到碰撞后函数返回0或上面几个值, 并且由src->x和src->y传出碰撞后的新位置.


int cl (Rect *dest, Rect *src, float oldx, float oldy)
{
int isbeat = 0;
float dy, dx0, dx1, dx, dy0, dy1;
float ix, iy; /* interpolation xy */

/* right */
if (oldx+src->w <= dest->x && src->x+src->w > dest->x) {
/* Y interpolation */
dy = src->y - oldy;
dx0 = dest->x-oldx-src->w;
dx1 = src->x+src->w-dest->x;
iy = dy * dx0 / (dx0+dx1) + oldy;
if (iy+src->h > dest->y && iy < dest->y+dest->h) {
src->x = dest->x - src->w;
isbeat |= CL_RIGHT;
}
}
else
if (oldx >= dest->x+dest->w && src->x < dest->x+dest->w) {
dy = src->y - oldy;
dx0 = oldx - dest->x-dest->w;
dx1 = dest->x+dest->w-src->x;
iy = dy * dx0 / (dx0 + dx1) + oldy;
if (iy+src->h > dest->y && iy < dest->y+dest->h) {
src->x = dest->x + dest->w;
isbeat |= CL_LEFT;
}
}
else
/* down */
if (oldy+src->h <= dest->y && src->y+src->h > dest->y) {
dx = src->x - oldx;
dy0 = dest->y-oldy-src->h;
dy1 = src->y+src->h-dest->y;
ix = dx * dy0 / (dy0+dy1) + oldx;
if (ix+src->w > dest->x && ix < dest->x+dest->w) {
src->y = dest->y - src->h;
isbeat |= CL_DOWN;
}
}
else
if (oldy >= dest->y+dest->h && src->y < dest->y+dest->h) {
dx = src->x - oldx;
dy0 = oldy-dest->y-dest->h;
dy1 = dest->y+dest->h-src->y;
ix = dx * dy0 / (dy0+dy1) + oldx;
if (ix+src->w > dest->x && ix < dest->x+dest->w) {
src->y = dest->y + dest->h;
isbeat |= CL_UP;
}
}

return isbeat;
}
}

2008年12月9日星期二

Music Breakout


打砖块demo
exe (26.5k) src (12k)

没有开始,结束,关卡,得分,道具,什么都没有, 我半途而废了, 因为总想着下一个游戏, 下下个游戏, 当前这个就没意思了. 不过最后加了一点不一样的地方, 就是音乐. 在碰到砖头时会播放<小星星>里的一个音节, 直到你听到一首乱七八糟没有节奏的歌曲. 拜midiOutShortMsg函数所赐, 我可以从128种乐器的声音中选择, 甚至还有枪声和鸟叫, 当碰到问号砖块时你就能听到. 当然把这个功能加入d2d了.

给谁玩呢? 也许可以给幼儿园小朋友做音乐课的耳力练习.

2008年12月6日星期六

七巧板

exe (91k) src (47k)

操作方法: 鼠标左键拖动, 右键旋转.

开发心得: ddraw没法旋转图片, 只好每块板弄了8个角度的图片. 想来想去没什么可玩的地方, 就这样发出来了.

2008年12月1日星期一

PingxPong

exe 24k src 14k

这么长时间总算弄出来个游戏. 这个是模仿的日本的一个flash小游戏PingxPong.

游戏分3个状态: 菜单和演示动画, 主游戏, 游戏结束. 用一个全局变量g_state来区别. 后来发现这个状态不就相当于flash里的贞嘛, g_state = 1就等于GotoAndPlay(1).

球碰到板时的反弹我做的不太好.

电脑的AI我是这样设计的: 球离自己1/3屏距离以外的时候就随机的改变vx, 靠边的时候就更大的概率回到中间. 1/3以内时就计算板到球的距离d, d越小就以越大的概率和速度靠近球. 另外AI还会随着比分的差距和增长有所变化, 例如到了9:9的时候虽然分差是0, 但接近比赛结束, 是关键时刻, AI一样会调很高.

2008年10月19日星期日

RPG plan

这几周一直在琢磨着做个rpg, 想法总是无法形成. 很想以福尔摩斯的为题材, 但怎样让游戏表现推理和思考的行为呢? 如果是做勇者斗恶龙类型的rpg又太不甘心, 那样的故事很俗套. 美术这一块也很差.