llk_linux V1.0发布
项目主页http://llk-linux.sourceforge.net
2005年4月29日
1.将algorithm_get_points函数产生的链表进行倒序
2.修改algorithm_can_link,添加两个point指针参数,使它在不是直线连接的情况下返回折点位置.并修改llk_main中对该函数的调用.
3.添加函数ui_link和ui_draw_line函数,完成连线功能.并在鼠标电击回调函数中的消牌操作之前,调用此函数.为了看到连线,需要加入时间延迟100ms.
2005年5月15日
1.大改,大致内容如下(很多细节,不一一说明)
将GtkFixed换做GdkDrawingarea
完全控制drawingarea的绘图操作,实用doublebuf,建立一个pixbuf,所有游戏的绘图操作只针对pixbuf,
只有在需要重绘窗口的时候简单的将pixbuf拷贝到drawingarea中.
2.连线功能完成!之前的ui_link函数中有笔误,if判断应该p3.x与p4.x(误为p3.x)
3.完善了内存管理,所有需要释放的pixbuf均及时释放.
4.作弊选项,按F8可填满时间,提示和生命.
5.自选牌面
6.添加icon.
修复的小bug:
1.drawingarea_clicked函数中,将ui_link放在algorithm_link之前。
2.ui_game_wash中,生命值用完,结束游戏后,添加return。
===============================待完善功能=================================
1.声音,音乐
2.随机背景
3.网络对战
4.记分系统 公社下载
http://linuxfans.org/nuke/modules.php?name=Site_Downloads&op=geninfo&did=3552 正在下载…… 双人合作模式什么时候能够实现,这样就可以一台电脑两人同时玩了。 下一版,会添上。
双人合作。背景音乐,声效
不过要等段时间,因为我还不知道怎么播放声音(因为不想使用gnome,ML1.2不带gnome的) 那就不忙加声音,可以边玩边听mp3吗:)声音可以试试sdl_mixer 背景音乐可以不加,但是音效还是需要的。
既然音效要加,再加上背景音乐,也没什么麻烦的了
呵呵
多谢楼上的指教,刚看了sdl,用起来挺方便的
:mrgreen: :-D 不错,这几天正在WINDOWS下玩,没想到今晚竟然在论坛上看见一个专版,兴奋至极.
强烈支持,预祝超越WINDOWS版. :mrgreen:
多媒体效果能比上windows版就不错了(到现在声音问题都还没解决)
不过网络队战方面,打算在2.0版能做的比较好。
像QQ的连连看那样支持5人一起队战那种。
努力中………… 下一版,会添上。
双人合作。背景音乐,声效
不过要等段时间,因为我还不知道怎么播放声音(因为不想使用gnome,ML1.2不带gnome的)
你看看/usr/include/esd.h文件,胡正的黑客背单词就是用这个实现音效的,但他用的是C++。
黑客背单词中的sndserv.h
#ifndef __RW_SNDSERV_H__
#define __RW_SNDSERV_H__
#include <glib.h>
enum PLAY_METHOD {PM_MIX,PM_STOP_PRE,PM_AFTER_PRE};
class CSndserv
{
int fd;
public:
gboolean disable;
bool canplay;
CSndserv ();
~CSndserv ();
void play (const gchar *filename);
};
void play_file(const gchar *filename,PLAY_METHOD method);
#endif
黑客背单词中的sndserv.cpp
#include "sndserv.h"
#include "reciteword.h"
#include <cstdio>
#include <cstdlib>
#ifdef G_OS_WIN32
#include "windows.h"
#else
#include <esd.h>
#endif
extern CReciteWord* g_pReciteWord;
CSndserv::CSndserv()
{
#ifdef G_OS_WIN32
canplay = true;
#else
fd=esd_open_sound(NULL);//"localhost";
canplay = (fd>=0);
#endif
if (!canplay)
g_print("esd initialization failed,no sound will be play!\n");
}
CSndserv::~CSndserv()
{
#ifdef G_OS_WIN32
#else
if (fd>=0) esd_close(fd);
#endif
}
void
CSndserv::play(const gchar *filename)
{
#ifdef G_OS_WIN32
#else
if (fd>=0)
esd_play_file(NULL,filename,0); // ???
//esd_play_file ("reciteword", filename, 1);
#endif
}
//static CSndserv sndserv;
static gpointer play_file_mix(gpointer data)
{
g_pReciteWord->sndserv.play((gchar *)data);
g_free(data);
return NULL;
}
/*
static void play_file_after_pre(gpointer data,gpointer user_data)
{
g_pReciteWord->sndserv.play((gchar *)user_data);
return NULL;
}
class CThreadPool
{
GThreadPool *pool;
public:
CThreadPool();
~CThreadPool();
};
CThreadPool::CThreadPool()
{
pool = g_thread_pool_new(play_file_after_pre,NULL,1,FALSE,NULL);
}
CThreadPool::~CThreadPool()
{
g_thread_pool_free(pool,);
}
*/
void play_file(const char *filename,PLAY_METHOD method)
{
if ((!g_pReciteWord->sndserv.canplay)||(g_pReciteWord->sndserv.disable))
return;
//esd_play_file ("reciteword", filename, 1);//it can't return quickly :( when in typing,press wrong key will cause freezing.
// the system() function is inefficiency, should change to use thread to call esd_play_file().
/*gchar command[256];
sprintf(command,"esdplay %s &",filename);
system(command);*/
switch (method)
{
case PM_MIX:
{
#ifdef G_OS_WIN32
PlaySound(filename, 0, SND_ASYNC | SND_FILENAME);
#else
GThread * thread;
gchar *dup_filename = g_strdup(filename); //as in the new thread, filename may have already be freeed.
thread = g_thread_create(play_file_mix,(gpointer)dup_filename,false,NULL);//use GThreadPool may be more efficient.
#endif
break;
}
case PM_STOP_PRE: // it is hard to done,may need write my own esd_play_file.
{
break;
}
case PM_AFTER_PRE:// use GThreadPool can do this,but,it does seems very useful before PM_STOP_PRE is done.
{
//GThreadPool *threadpool;
break;
}
}
}
多谢,非常感激! 简单的音乐播放示例:
#include <glib.h>
#include <esd.h>
gint fd;
gboolean disable;
gboolean canplay;
void play(const gchar *filename)
{
if (fd>=0)
esd_play_file(NULL,filename,0);
}
int main( int argc,
char *argv[] )
{
fd=esd_open_sound(NULL);//"localhost";
canplay = (fd>=0);
if (!canplay)
g_print("esd initialization failed,no sound will be play!\n");
play("/home/yetist/Projects/chord.wav");
if (fd>=0) esd_close(fd);
return 0;
}
编译用:
gcc -o snd sndtest.c `pkg-config gtk+-2.0 --cflags --libs` -lesd 这个只能播放wav文件吧,
我看SDL的文档的时候也没有看到它支持midi
而播放背景音乐,要用midi 楼上有兴趣加入开发吧 :mrgreen:
页:
[1]
2