基于Linux的GTK图形界面编程扫雷游戏设计

上传人:gg****m 文档编号:215059440 上传时间:2021-11-24 格式:DOCX 页数:28 大小:351.60KB
返回 下载 相关 举报
基于Linux的GTK图形界面编程扫雷游戏设计_第1页
第1页 / 共28页
基于Linux的GTK图形界面编程扫雷游戏设计_第2页
第2页 / 共28页
基于Linux的GTK图形界面编程扫雷游戏设计_第3页
第3页 / 共28页
基于Linux的GTK图形界面编程扫雷游戏设计_第4页
第4页 / 共28页
基于Linux的GTK图形界面编程扫雷游戏设计_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《基于Linux的GTK图形界面编程扫雷游戏设计》由会员分享,可在线阅读,更多相关《基于Linux的GTK图形界面编程扫雷游戏设计(28页珍藏版)》请在金锄头文库上搜索。

1、基于Linux的GTK+图形界面编程扫雷游戏设计摘要本篇课程设计主要说明使用Linux下的GTK+2.0库开发一个简单的扫雷程序,建立一 个图片矩阵,由于图片控件不能接收事件,必须将它们放到事件盒中,才能接收到事件。这 样就能处理鼠标事件以及鼠标事件对应的图片显示处理,并对用户的操作做出提示。最后可 以完成基本的扫雷任务,由于本人能力有限,无法设计自定义的游戏级别,只能使用规定了 的游戏级别。关键词:linux;扫雷;GTK+;游戏MINESWEEPERGUI PROGRAMMING BASE ON GTK+GAME DESIGNABSTRACTThis course design mainl

2、y describe how to develop a minesweeper game by GTK+ library in Linux. First I create a matrix of picture, I must put they on event box for widget of picture cant receive event. When users click on the picture, the program can deal with display of pictures and display some tips. This program can man

3、age operator of minesweepe匸 But due to the limit of my ability, users cant define the level of the game, they can only use defined level.Key words: linux; minesweeper; GTK+; Game1引言41.1课程设计的目的41.2系统性能要求41. 3功能的实现42系统概要设计52. 1概要设计52.2系统功能组成52. 3主要流程图53功能实现73. 1产生雷的位置73.2建立游戏界面7在建立图像界面的时候,首先是创建主窗口,然后是

4、创建一个表用于排版。然后创建需 要的数量图片控件,并将事件盒与其对应。然后在窗口的下面显示旗标的个数,然后创 建一个重新开始的按钮,然后显示整个图形了并进入消息循环。73. 3鼠标左击事件处理103.4雷都被标中123. 5选择菜单12参考文献15致谢16附录171引言1-1课程设计的目的扫雷最原始的版本可以追溯到1973年一款名为“方块叩勺游戏。不久之后,“方块”被改写成了游戏“Rlogic二在“RlogiL里,玩家的任务是作为美国海军 陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年 后,汤姆安德森在Rlogic-的基础上又编写出了游戏“地雷二由此奠定了现代

5、扫雷游戏的雏 形。1981年,微软公司的罗伯特杜尔 和卡特约翰逊两位工程师在Windows 3.1系统上加 载了该游戏,扫雷游戏才正式在全世界推广开来。因此设计一个linux下的简单的扫雷游戏。1.2系统性能要求能够在linux使用的小型gtk游戏,能够处理用户的点击操作等。这款游戏的玩法是在一个9*9(初级),16*16(中级),16*30(高级),或自定义大小的方块 矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个)。由玩家逐个翻 开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。扫雷游戏的目标是尽快找到雷区中的所有不是地雷的方块,而不许踩到地

6、雷。点开的数 字是儿,则说明该数字旁边的8个位置中有儿个雷,如果挖开的是地雷,则会输掉游戏。1.3功能的实现1)对于用户左键点击,能够挖雷,以及判别挖到的是雷或者不是雷,并且显示相关的 信息2)对于用户右键点击,能够标记,并且显示相关的信息3)如果用户全部标记了雷,或者挖到雷,显示用户输赢信息2系统概要设计2.1概要设计在整个程序的设计过程当中,主要是GTK界面的设计,还有一些对于扫雷处理的一些 基本算法,比如深度优先搜索等。界面布局是模仿系统自带的布局,并在雷区中建立二维的 图片矩阵,由于图片不能产生事件,因此需要将图片放在事件盒中,以监听事件。游戏中有3个难度等级,分别为初级、中级和高级,

7、不同等级的雷区大小和雷的个数都 是不相同的,等级在菜单中选择。初级的雷区为8*8的矩阵,并有10个雷;中级的雷区为 16*16的矩阵,并有40个雷;初级的雷区为16*28的矩阵,并有90个雷。排雷过程中使用的只有鼠标,右键标记一个地方为雷,左键点击时提示被点击的单元旁 边8个单元。2.2系统功能组成(1) 建立雷区的图形(2) 处理鼠标事件,右键左键的点击,并进行处理(3) 菜单选择,选择游戏的难度图2. 1主要功能图2.3主要流程图图2. 2详细流程图3功能实现3.1产生雷的位置程序首先是创建一个二维数组并且附初值0,然后产生小于矩阵长和宽乘积的数,这个 数可以唯一的表示成数组的一个坐标,这

8、个坐标就作为一个雷,同样产生其他雷的位置。产 生坐标的时候需要判断那个地方是否己经被标记为雷了。因此这个矩阵中为1表示是那个地 方是雷,为0就不是雷。在产生的过程中将坐标周围的8个坐标的记录雷个数的元素加1, 这样产牛的数组就是一个所要使用的数组。当“重新开始按钮被点中,或者选项被选中,程 序将重新产生新的数组。srand( (int )time( NULL);for (i = 0; i me; +i)while ( 1 )t = rand() % rc;x = t / c; y = t % c;if (imefxlfyl = 0 ) break;imexy = 1;for ( k = 0;

9、k v & +k )tx 二 x + dirk0; ty = y + dirkl;if (inTheRectangle( tx, ty )cottxty+;3.2建立游戏界面在建立图像界面的时候,首先是创建主窗口,然后是创建一个表用于排版。然后创建需要的数量图片控件,并将事件盒与其对应。然后在窗口的下面 显示旗标的个数,然后创建一个重新开始”的按钮,然后显示整个图形了并进 入消息循环。void win_create( int r_pram, int c_pram, int mc_pram )int i, j;/客图中显示的方框个数勺r = r_pram; c 二 c_pram; me = mc

10、_pram;init();gtk_widget_set_size_request( window, 46*c, 46*( r+3 ); /*设置窗口的大小*/*创建表*/table = gtk_table_new( r+3, c, TRUE );/*创建图像和事件盒勺for (i = 0; i r; +i)for(j = 0;jc;+j)imageij = gtk_image_new_from_file( imgD_INIT);e_boxi|j = gtk_e ven t_box_ne w(); gtk_container_add( GTK_CONTAINER( e_boxij), image

11、ilj); gtk_widget_show( imageij);gtk_widget_show( e_boxij); gtk_table_attach_defaults( GTK_TABLE( table ), e_boxij, j, j+1, i+2, i+3 ); gtk_signal_connect( GTK_OBJECT( e_boxi|j), nbutton_press_eventH,G_CALLBACK( clicked_image ), i*c+j);gtk_signal_connect( GTK_OBJECT( e_boxij), button_release_event, G

12、_CALLBACK( releasejmage), i*c+j);/*显示字符:”旗标:n*/slabel = gtk_label_new( ”旗标:”);gtk_table_attach_defaults( GTK_TABLE( table ), slabel, 1, 2, r+2, r+3 ); gtk_widget_show( slabel);get_main_menu( window, &mainbar);gtk_table_attach( GTK_TABL玖 table ), mainbar, 0, c, 0, 1, GTK.FILL, GTK_SHRINK, 5, 5 ); gtk

13、_widget_show( mainbar);/*显示旗标个数可sprintf( buffer, %d/%d, 0, me );label = gtk_label_new( buffer );gtk_table_attach_defaults( GTK_TABL玖 table ), label, 2, 3, r+2, r+3 ); gtk_widget_show( label);八创建垂新开始按钮可rebutton = gtk_button_new_withabel( ”重新开始”);gtk_tab 1 e_attach_defau 11s( GTK_TABL玖 table ), rebutt

14、on, c/2-1, c/2+1, 1,2); gtk_widget_show( rebutton );gtk_signal_connect( GTK_OBJECT( rebutton ), button_press_eventH,G_CALLBACK( game_start), NULL);gtk_widget_show( table);gtk_container_add( GTK_CONTAINER( window ), table ); gtk_widget_show( window);gtk_main();图3.1游戏开始3.3鼠标左击事件处理当左键按到的是一个数字的时候,而且旁边8个中雷的个数和红旗的个数相同的时候, 扩展周围可以显示的区域,其中使用了递归,但是被每个只背访问一次,因此递归的深度不 深。for ( k = 0; k v & +k )tx = x + dirk0; ty = y + dirkl;if (inTheRectangle( tx, ty ) & distxty = INITIAL) dfs_display( tx, ty, 1 );当左键按到的是一个数字的时候,并且处于压下的状态时,而且旁边8个中雷的个数和 红旗的个数不相同的时候,程序将其周围8个未被标记的图像更改成一个空

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号