2009年3月22日星期日

Flash Music-Bubble


swf(28.7kb) fla(337kb)
 
  又把音乐泡泡用flash做了一遍, 又一次体会到了flash的好处. 就是不用动态地用程序生成物体. 而是用编辑器放上去,确定位置之后再用程序控制行为, 而且flash把事件和动画两个东西协调得很好, 不需要象c那样全部在主循环里那么麻烦. 这个版本完整性比前面的作品提高了很多 (意思是我克服懒惰的能力加强了~) . 但还是有两点没做好, 一个是没有明确的指导,玩家可能一开始摸不着头脑; 还有就是音乐是随机的,而且缺乏节奏,不好听.

ps. mp3占了25k以上..
--------------------
今天晚上又完善了一下, 加上了开场动画; 并且使用手工写的旋律代替随机生成的乐谱. 里面有超级马力和superstar等乐曲的片段. 曲谱的数据结构是一个数组,1~10代表音符,0代表休止符. 另外还有一个节奏表,可以控制基本的播放速度. 音符数量和关数相同.. 一共8关, 挑战性不强, 可能音乐游戏的乐趣主要还是让人放松的吧, 但mp3文件我是从touch the bubble2里偷来的,音色不好听,刺耳,如果换成钢琴的就好了.

2009年3月16日星期一

Tic-Tac-Toe




  swf(4.42kb) fla

  这是参加indie-go比赛的作品(这也拿得出手~). 详细情况都写在那上面了.
  可能是flash不熟,另外规划也不周密, 有很多小毛病. 本来只是用flash随便画几条线,一看还挺像回事,于是就产生了黑板和粉笔的概念,如果再配上写字的声音可能就更有新鲜感了. 这周准备再把music bubble完善一下.

   对了,我为什么要用flash呢? 因为它生成文件小,而且人人电脑上都能跑,而且不用下载安装. ddraw虽然很小很快,但画面模糊,而且只支持bmp. d3d8虽然支持旋转和多格式图片,但必须加上d3dx,这样生成的exe会大很多. opengl就更别提了,又慢又不默认支持图片. 为啥我这么关心size呢? 这其实是个原则问题,因为我总觉得在这样的时代,一个小游戏应该是以小取胜,它创造的乐趣必须(远远)超过占用的空间和cpu, 否则就更没有存在的理由了. 又或者是我有强迫症~

2009年1月8日星期四

Touch the Bubble


exe (22k) src (13k)

前两天看到game7z上推荐了一个音乐泡泡的游戏, 很有创意的音乐游戏. 正好可以用到上次做的mid函数, 就花了两个下午自己也模仿了一下. 使用的是八音盒的音色.

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个角度的图片. 想来想去没什么可玩的地方, 就这样发出来了.