觉知的机器
GTK+2.0俄罗斯方块游戏设计
Life is real only then, when “I am”
G.I.GURDJIEFF
编 写:
觉知的机器
甘肃兰州安宁机器工作室
2012年09月07日
目录 目录
目录
一 Gtk介绍 3
1.1 为什么使用Gtk+2.0 . . . . . . . . . . . . . . . . . . . . . . . 3
二 Gtk编程特点 5
2.1 类型转换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 事件处理模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1 事件和信号 . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.2 事件定义 . . . . . . . . . . . . . . . . . . . . . . . . . 7
三 Gtk绘图方式 9
3.1 内存中绘图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
四 游戏的结构 12
4.1 主程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2 Diamond类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.3 Mass类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.4 DataBase类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
FSF 2012 the machine of awareness 1
目录 目录
摘要
作者用Gtk+2.0编写了俄罗斯方块游戏,作为Gtk+2.0学习的练习,
在这里将心得写出来和大家分享。 游戏用方向键控制俄罗斯方块的移动与
变换,当某行方块全满,自动清除,游戏只是个示例,没有计分系统。
运行环境:Debian6.0,gtk+-2.20.1,编程环境:emacs23.1,gcc-4.4.5,
make-3.81。
FSF 2012 the machine of awareness 2
1 GTK介绍
一 Gtk介绍
GTK+最初是GIMP的专用开发库,后来发展为Unix-like系統下开发
图形界 面 的 应 用 程 序 的 主 流 开 发 工 具之一。 GTK+是自 由 软 件,并且
是GNU计划的一部分。GTK+的许可协议是LGPL。
最初,GTK+ 是作为另一个著名的开放 源 码 项 目 —— GNU Image
Manipulation Program (GIMP) —— 的 副 产 品 而 创 建 的。 在 开 发 早 期
的GIMP 版 本 时, Peter Mattis 和Spencer Kimball 创 建 了GTK (它 代
表GIMP Toolkit),作 为Motif
1
工具包的替代,后者在那个时候不是免
费的。(当这个工具包获得了面向对象特性和可扩展性之后,才在名称后面
加上了一个加号。)
与其他很多部件工具箱不同,GTK+ 并不基于Xt
2
。 这一决策优劣
互见:优点是GTK+可以应用于其他系统,其灵活性也很强;而缺点就
是它无法利用以传统方法为X11定制的X资源数据库。 GTK+ 最早應用
於X Window System,如今已移植至其他平台,諸如Microsoft Windows、
DirectFB
3
,以及Mac OS X的Quartz
4
.
1.1 为什么使用Gtk+2.0
Gtk+是自由软件,意味着每个人不仅可以自由地获得和使用这个工具
包,还可以在满足某些条件的情况下修改并重新发布它。 它得到了积极的
开发与维护,围绕它有一个充满活力的社区。
GTK+ 是可移植的。 这意味着用户可以在许多平台和系统 上运行它。
另一方面,开发人员可以把软件提供给众多用户,却只要编写一次程序,
还可以使用许多不同的编程和开发平台、工具和编程语言。 所有这些都可
1
Motif 最初是由OSF(开放基金协会)开发的一个工业标准的GUI(图形用户接口)。 1996年,OSF
与X/Open 合并为Open Group,1997年初,X 联盟结束,并将其归属的项目移交给Open Group。
Open Group 继 续开 发和 支持X窗 口系 统, Motif, CDE,和 其 他技 术。 2000年5月15日, Open
Group 使用公共许可证向开放源代码团体发布了Motif 的源代码。 在开放系统(如Linux)上,可以
使用免费的Motif。
2
Xt Intrinsics又名Xt 或X Toolkit, 是X Window 的函式庫。 Intrinsics 首先提供物件導向的程
式設計架構,並引進了「widget」的概念。 Motif、OpenLook 和Lesstif 等即以Xt 為基礎。Athena
Toolkit也是衍生自Xt Library。 但一些知名的工具箱如FLTK, GTK, 和Qt 並不使用Xt library, 反
是直接使用Xlib.
3
DirectFB是一个轻量级的提供硬件图形加速,输入设备处理和抽象的图形库,它集成了支持半透明
的视窗系统以及在LinuxFramebuffer驱动之上的多层显示。 它是一个用软件封装当前硬件无法支持的
图形算法来完成硬件加速的层。 DirectFB是为嵌入式系统而设计。 它是以最小的资源开销来实现最高的
硬件加速性能。
4
Quartz是 位 於Mac OS X的Darwin核 心 之 上 的 繪 圖 層, 有 時 候 也 認 為 是CoreGraphics。
Quartz直接地支援Aqua,藉由顯示2D繪圖圖形來建立使用者介面,包含即時繪製(rendering)和
次像素(sub-pixel)精準的反鋸齒。
FSF 2012 the machine of awareness 3
1.1 为什么使用Gtk+2.0 1 GTK介绍
以理解为更多的潜在用户,您可以利用更好地满足需求的更广泛的技能和
工具。
GTK+ 是采用软件开发中的最新技术开发的,使用现代的软件意味
着,您不会陷在过时的工作中,而跟不上时代的发展。 持续的维护和开发
也意味着您拥有影响工具包的未来发展方向的能力。
FSF 2012 the machine of awareness 4