GTK+程序跨平台移植:把【GTK弹球小游戏"uunubt"!】从ubuntu10.10移植到Windows XP下。

原创 2011年01月07日 16:25:00

下面我把它移到XP下编译运行:

1,首先在XP上需要安装依赖环境(详情可参考http://blog.csdn.net/uunubt/archive/2011/01/07/6122373.aspx);

     我发现网上好多链接都失效了,所以建议到我开源邮箱下载:uunubt@yahoo.cn  00000000

 

2,这里是以前在ubuntu10.10下的【GTK弹球小游戏"uunubt"!】文章:  http://blog.csdn.net/uunubt/archive/2010/11/12/6005174.aspx    

 

3,拷入源码编译运行:

 

 

#include <gtk/gtk.h>
#include <stdio.h>

gint sx=0;

gint sy=0;

gint ex=1;

gint ey=1;

gint barx=250;

gint diameter=50;

GtkWidget *window;

GtkWidget *da;

gint single =0;

 

static void destroy(GtkWidget *widget,gpointer data)

{

gtk_main_quit();

}

 

void press(GtkWidget *widget,GdkEventKey *event)

{

g_print ("press: %x/n",event->keyval);

switch(event->keyval)

{

case 65361: //左键

//g_print ("Rigth/n"); //use debug

if (barx>0 )

barx = barx - 10;

else

barx = 0;

break ;

case 65363: //右键

//g_print ("Left/n"); //use debug

if (barx<500 )

barx = barx + 10;

else

barx = 500;

break ;

case 32: //空格键

single = 1;

//g_print ("Stop/n"); //use debug

break;

case 65293: //回车键

single =0;

//g_print ("Begin/n"); //use debug

 

break;

default:

break;

}

}

 

 

gboolean my_expose(GtkWidget *da,GdkEventExpose *event,gpointer data )

{

GdkGC *gc1,*gc2,*gc;

GdkColor color;

gc1 = gdk_gc_new(da->window);

color.red = 0;

color.green = 65535;

color.blue = 0;

gdk_gc_set_rgb_fg_color(gc1,&color);

gc2 = gdk_gc_new(da->window);

color.red = 65535;

color.green = 0;

color.blue = 0;

gdk_gc_set_rgb_fg_color(gc2,&color);

gc = gc1;

gdk_draw_rectangle(da->window,gc,TRUE,barx,480,100,20);

gc = gc2;

gdk_draw_arc(da->window,gc,TRUE,ex,ey,diameter,diameter,0,64*360);

g_object_unref(G_OBJECT(gc1));

g_object_unref(G_OBJECT(gc2));

 

return TRUE;

}

 

void leave_notify_event(GtkWidget *widget, GdkEventMotion *event)

{

gint x, y;

GdkModifierType state;

GdkRectangle rect;

if (event->is_hint)

gdk_window_get_pointer(event->window,&x,&y,&state);

else{

x = (gint)event->x;

y = (gint)event->y;

state = (GdkModifierType)event->state;

}

barx = x;

rect.x = 0;

rect.y = 470;

rect.width = 600;

rect.height = 30;

gdk_window_invalidate_rect(da->window,&rect,FALSE);

 

}

 

gboolean inBar()

{

if(ex >=barx && ex <= (barx+100))

return TRUE;

return FALSE;

}

 

gboolean chPosition()

{

gint tempx=ex;

gint tempy=ey;

 

if ( single == 1)

{

return TRUE;

}

if(((ex == 0) && (ey > sy)) ||( (ey == 0) && (ex>sx)))//daiwei+()

{

ex++;

ey++;

}//右下

else if(((ey == (480-diameter)) && (ex < sx) && (inBar())) || ((ex == (600-diameter)) && (ey < sy) ))//daiwei+()

{

ex--;

ey--;

}//左上

else if(((ey == 0) && (ex <sx)) || ((ex == (600-diameter)) && (ey > sy)))//daiwei+()

{

ex--;

ey++;

}//左下

else if(((ey == (480-diameter)) && (inBar()) && (ex > sx)) || ((ex == 0) && (ey < sy)))//daiwei+()

{

ex++;

ey--;

}//右上

else if(ey == (500-diameter) )

{

return FALSE;

}

else

{

ex = 2*ex - sx;

ey = 2*ey - sy;

}

sx = tempx;

sy = tempy;

gdk_window_invalidate_rect(da->window, NULL, FALSE);

return TRUE;

}

 

int main(int argc, char *argv[])

{

 

gtk_init(&argc,&argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_widget_set_events ( GTK_WIDGET(window), GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK|GDK_BUTTON_PRESS_MASK );

g_signal_connect(G_OBJECT(window),"delete_event", G_CALLBACK(gtk_main_quit),NULL);

g_signal_connect(G_OBJECT(window),"key_press_event", G_CALLBACK(press),NULL);

gtk_widget_add_events( GTK_WIDGET(window), GDK_KEY_PRESS_MASK |GDK_KEY_RELEASE_MASK|GDK_BUTTON_PRESS_MASK);

g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(destroy),NULL);

gtk_signal_connect(GTK_OBJECT(window),"leave_notify_event", GTK_SIGNAL_FUNC(leave_notify_event),NULL);

da = gtk_drawing_area_new();

gtk_widget_set_size_request(da,600,500);

gtk_container_add(GTK_CONTAINER(window),da);

g_signal_connect(da,"expose_event",G_CALLBACK(my_expose),NULL);

gtk_widget_show_all(window);

g_timeout_add(10,(GSourceFunc)chPosition,NULL);

gtk_main();

return 0;

}

 

4,发现和ubuntu下有点区别:键盘可用,鼠标移动无效。后台多个DOS命令行很烦,可以看到终端信息,呵呵。

  

相关文章推荐

Windows XP下搭建GTK+开发环境

Windows XP下搭建GTK+开发环境今天终于可以写这篇文章了,GTK+虽然本身是跨平台的,我也一直在Ubuntu8.04下使用,不过有时候在Windows XP下也有用到的需要,可是弄了很长的一...
  • uunubt
  • uunubt
  • 2011年01月07日 13:20
  • 1195

Windows XP下GTK开发环境搭建

Windows XP下GTK开发环境搭建 GTK下载地址:ftp://ftp.gtk.org/pub/gtk/ 下载GTK压缩文件,解压到无空格,无中文字符的目录X. 设置环境变量PKG_CON...

Silverlight.XNA(C#)跨平台3D游戏研发手记:(七)向Windows Phone移植之双向交互

继完成游戏主体框架搭建后,接下来我将通过SL.XNA模式中Silverlight控件与XNA对象之间双向交互操作的例子,向大家进一步讲解框架的拓展使用及简单的承载演示。在此之前大家需要理解Window...

Silverlight.XNA(C#)跨平台3D游戏研发手记:(六)向Windows Phone移植之框架构建

海量的美术、庞大而繁杂的人员与资源配备使得网游和端游开发难度系数高居不下;移动开发时代的来临为游戏设计师们提供了第三条绿色通道,这是一次愈加趋近梦想的迅捷契机。作为一个专情的人,深爱着C#,毋庸置疑的...

跨平台Windows下MinGW +MSYS +GTK+Eclipse+opencv环境搭建

首先声明一下,本篇内容在网上有一个原始版本,经过我亲自对照其内容在windows上搭建环境,发现有些内容已经过时,有些链接已经不存在,所以我根据原文的思路修改了一些内容,加入了一些新内容,同时对网上的...

GTK跨平台语音识别系统

  • 2013年11月14日 01:20
  • 201KB
  • 下载

PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第二篇(算法)

背景:   上一节,我们已经把消灭星星的界面搭建好了,流程也跑通了。 这一篇涉及到程序的算法,也许是最难的部分了,理解起来需要多花点时间,而且我提供的算法未必就是最好的,如果读者有更优更好的算法,希...

PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第一篇(界面)

背景:    来自星星的你电视剧很火,消灭星星游戏也很火,好像星星都很火,笔者就以星星为主题开始这篇博文。消除类的游戏挺受欢迎的,从2013年度app store最赚钱的游戏--粉碎糖果传奇,到总是...

PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第四篇(关卡)

背景:    本来打算把第三篇和第四篇合并都一起,但以前计划分开,就还是分来吧;一般的游戏涉及到关卡的话,一般都会建立一个数组来存放各种定义参数,消灭星星关卡比较容易,不需要建立数组,只有两个参数l...

PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第三篇(分数)

背景:    经过消灭星星第二篇算法,最高的山峰已经过去了,剩下的都是小沟小河,没什么难度了。这一节笔者继续完成消灭星星的分数篇,这节主要包括:触摸提示得分 比如4 blocks 80 points,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GTK+程序跨平台移植:把【GTK弹球小游戏"uunubt"!】从ubuntu10.10移植到Windows XP下。
举报原因:
原因补充:

(最多只允许输入30个字)