您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于Linux的GTK+图形界面编程——扫雷游戏设计
基于Linux的GTK+图形界面编程——扫雷游戏设计I基于Linux的GTK+图形界面编程——扫雷游戏设计摘要本篇课程设计主要说明使用Linux下的GTK+2.0库开发一个简单的扫雷程序,建立一个图片矩阵,由于图片控件不能接收事件,必须将它们放到事件盒中,才能接收到事件。这样就能处理鼠标事件以及鼠标事件对应的图片显示处理,并对用户的操作做出提示。最后可以完成基本的扫雷任务,由于本人能力有限,无法设计自定义的游戏级别,只能使用规定了的游戏级别。关键词:linux;扫雷;GTK+;游戏基于Linux的GTK+图形界面编程——扫雷游戏设计IIGUIPROGRAMMINGBASEONGTK+——MINESWEEPERGAMEDESIGNABSTRACTThiscoursedesignmainlydescribehowtodevelopaminesweepergamebyGTK+libraryinLinux.FirstIcreateamatrixofpicture,Imustputtheyoneventboxforwidgetofpicturecan’treceiveevent.Whenusersclickonthepicture,theprogramcandealwithdisplayofpicturesanddisplaysometips.Thisprogramcanmanageoperatorofminesweeper.Butduetothelimitofmyability,userscan’tdefinethelevelofthegame,theycanonlyusedefinedlevel.Keywords:linux;minesweeper;GTK+;Game目录1引言.........................................................................41.1课程设计的目的.........................................................41.2系统性能要求...........................................................41.3功能的实现.............................................................42系统概要设计................................................................52.1概要设计...............................................................52.2系统功能组成...........................................................52.3主要流程图.............................................................53功能实现....................................................................73.1产生雷的位置...........................................................73.2建立游戏界面...........................................................7在建立图像界面的时候,首先是创建主窗口,然后是创建一个表用于排版。然后创建需要的数量图片控件,并将事件盒与其对应。然后在窗口的下面显示旗标的个数,然后创建一个重新开始的按钮,然后显示整个图形了并进入消息循环。.................73.3鼠标左击事件处理......................................................103.4雷都被标中............................................................123.5选择菜单..............................................................12参考文献.....................................................................15致谢.........................................................................16附录.........................................................................17基于Linux的GTK+图形界面编程——扫雷游戏设计41引言1.1课程设计的目的扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。不久之后,“方块”被改写成了游戏“Rlogic”。在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆·安德森在“Rlogic”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。1981年,微软公司的罗伯特·杜尔和卡特·约翰逊两位工程师在Windows3.1系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。因此设计一个linux下的简单的扫雷游戏。1.2系统性能要求能够在linux使用的小型gtk游戏,能够处理用户的点击操作等。这款游戏的玩法是在一个9*9(初级),16*16(中级),16*30(高级),或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个)。由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。扫雷游戏的目标是尽快找到雷区中的所有不是地雷的方块,而不许踩到地雷。点开的数字是几,则说明该数字旁边的8个位置中有几个雷,如果挖开的是地雷,则会输掉游戏。1.3功能的实现1)对于用户左键点击,能够挖雷,以及判别挖到的是雷或者不是雷,并且显示相关的信息2)对于用户右键点击,能够标记,并且显示相关的信息3)如果用户全部标记了雷,或者挖到雷,显示用户输赢信息基于Linux的GTK+图形界面编程——扫雷游戏设计52系统概要设计2.1概要设计在整个程序的设计过程当中,主要是GTK界面的设计,还有一些对于扫雷处理的一些基本算法,比如深度优先搜索等。界面布局是模仿系统自带的布局,并在雷区中建立二维的图片矩阵,由于图片不能产生事件③,因此需要将图片放在事件盒中,以监听事件。游戏中有3个难度等级,分别为初级、中级和高级,不同等级的雷区大小和雷的个数都是不相同的,等级在菜单中选择。初级的雷区为8*8的矩阵,并有10个雷;中级的雷区为16*16的矩阵,并有40个雷;初级的雷区为16*28的矩阵,并有90个雷。排雷过程中使用的只有鼠标,右键标记一个地方为雷,左键点击时提示被点击的单元旁边8个单元。2.2系统功能组成(1)建立雷区的图形(2)处理鼠标事件,右键左键的点击,并进行处理(3)菜单选择,选择游戏的难度扫雷游戏雷区雷数设计处理鼠标事件建立游戏界面产生雷的位置计算无雷旁边雷得个数鼠标左击事件处理建立雷区图形鼠标右击事件处理建立菜单栏和按钮建立其他文字提示图2.1主要功能图2.3主要流程图基于Linux的GTK+图形界面编程——扫雷游戏设计6开始建立主窗口和一些不会变动的构件建立图像构件和事件盒,并将图像构件放入事件盒中,将每个事件盒的左击和右击事件的回调函数设置好,建立表,将所有要显示的构件加入表,将表加入主窗体进入消息循环如果未被探索则显示成红旗标志如果按下标志为1,将未被探索的空白显示成初始化的图像按到雷将被按到的那个雷显示成爆炸的图像找出其他没被标记的雷并显示,并显示被错误标记的红旗游戏结束被按到的被探索?递归显示旁边可以显示的数字和空白将旁边8个中未被探索的显示成空白,并设置按下标志N计算被红旗标中的雷realmine和红旗的个数retRet==realmineret等于旁边雷得个数NYYNYYN右键事件左键释放左键压下删除图像构件、事件盒、表、按钮等构件选项被选中图2.2详细流程图基于Linux的GTK+图形界面编程——扫雷游戏设计73功能实现3.1产生雷的位置程序首先是创建一个二维数组并且附初值0,然后产生小于矩阵长和宽乘积的数,这个数可以唯一的表示成数组的一个坐标,这个坐标就作为一个雷,同样产生其他雷的位置。产生坐标的时候需要判断那个地方是否已经被标记为雷了。因此这个矩阵中为1表示是那个地方是雷,为0就不是雷。在产生的过程中将坐标周围的8个坐标的记录雷个数的元素加1,这样产生的数组就是一个所要使用的数组。当“重新开始”按钮被点中,或者选项被选中,程序将重新产生新的数组。srand((int)time(NULL));for(i=0;imc;++i){while(1){t=rand()%rc;x=t/c;y=t%c;if(ime[x][y]==0)break;}ime[x][y]=1;for(k=0;k8;++k){tx=x+dir[k][0];ty=y+dir[k][1];if(inTheRectangle(tx,ty))cot[tx][ty]++;}}3.2建立游戏界面在建立图像界面的时候,首先是创建主窗口,然后是创建一个表用于排版。然后创建需要的数量图片控件,并将事件盒与其对应。然后在窗口的下面基于Linux的GTK+图形界面编程——扫雷游戏设计8显示旗标的个数,然后创建一个重新开始的按钮,然后显示整个图形了并进入消息循环。voidwin_create(intr_pram,intc_pram,intmc_pram){inti,j;/*图中显示的方框个数*/r=r_pram;c=c_pram;mc=mc_pram;init();gtk_widget_set_size_request(window,46*c,46*(r+3));/*设置窗口的大小*//*创建表*/table=gtk_table_new(r+3,c,TRUE);/*创建图像和事件盒*/for(i=0;ir;++i)for(j=0;jc;++j){image[i][j]=gtk_image_new_from_file(img[D_INIT]);e_box[i][j]=gtk_event_box_new();gtk_container_add(GTK_CONTAINER(e_box[i][j]),image[i][j]);gtk_widget_show(image[i][j]);gtk_widget_show(e_box[i][j]);gtk_table_attach_defaults(GTK_TABLE(table),e_box[i][j],j,j+1,i+2,i+3);gtk_signal_connect(GTK_OBJECT(e_box[i][j]),button_press_event,G_CALLBACK(clicked_image),i*c+j);gtk_signal_connect(GTK_OBJECT(e_box[i][j]),button_release_event,G_CALLBACK(release_image),i*c+j);}/*显示字符:旗标:*/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);g
本文标题:基于Linux的GTK+图形界面编程——扫雷游戏设计
链接地址:https://www.777doc.com/doc-8563945 .html