毕业设计(论文)-基于ARM9的五子棋游戏设计与实现.doc_第1页
毕业设计(论文)-基于ARM9的五子棋游戏设计与实现.doc_第2页
毕业设计(论文)-基于ARM9的五子棋游戏设计与实现.doc_第3页
毕业设计(论文)-基于ARM9的五子棋游戏设计与实现.doc_第4页
毕业设计(论文)-基于ARM9的五子棋游戏设计与实现.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录摘 要11 引言21.1 项目背景21.2 需求分析22 系统总体方案42.1 五子棋实现方案42.2 棋盘和棋子52.3 规则及解释62.4 五子棋攻防62.5 软硬件环境72.6 开发环境配置73 游戏设计与功能实现83.1 算法模块83.2 欢迎界面模块93.3 棋盘与棋子模块123.4 键盘响应模块143.5 帮助文档模块154 游戏测试165 结束语21参考文献22Abstract23致 谢24i德州学院 信息管理学院 2014届 计算机科学与技术专业 毕业设计 基于ARM9的五子棋游戏设计与实现(德州学院 信息管理学院,山东德州 253023)摘要摘 要:本项目是基于ARM9 处理器的嵌入式五子棋游戏,目的是实现嵌入式系统小游戏的设计与开发。该游戏基于Linux操作系统,采用Linux C语言设计实现了FrameBuffer显示机制、LCD显示控制和键盘通信模块。通过LCD控制器显示五子棋游戏相关信息,利用键盘技术来操控游戏的具体实施。该游戏的设计包括五子棋设计方案论述、棋盘与棋子、规则以及五子棋的攻防等问题,具体实现过程分为算法模块、欢迎界面模块、棋盘与棋子模块、键盘响应模块、帮助文档模块。关键词:嵌入式;五子棋;ARM9;Linux1 引言1.1 项目背景五子棋是起源于中国古代的传统黑白棋种之一,现代五子棋日文称之为连珠,英译为Ren ju,英文称之为Gobang,亦有连五子、五子连、串珠、五相、无相碰、五格等多种称谓。五子棋起源于古代中国,发展与日本,盛行于欧洲。它与围棋有两种出现的先后关系性说法,一说五子棋比围棋早,早在“尧造围棋”之前,民间就有类似于五子棋的游戏;一说产生于围棋之后,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。本世纪初五子棋传于欧洲并迅速风靡于全欧。通过一系列的变化,使五子棋这一简单的游戏复杂化、规范化。而最终成为今天的连珠五子棋,同时也成为一种国际比赛棋。ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权1。目前,采用ARM知识产权的微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正逐步渗入到我们生活的各个方面。目前,全世界有几十家大的半导体公司都使用ARM公司的授权,因此即使的ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争2。五子棋游戏不仅是一项游戏,而且还是一个能开发人智力的的工具,随着社会快速的发展以及人们在社会生产过程中竞争的不断加强,智力型开发已经被提上日程。尤其是对孩子的智力开发,复杂的游戏会让孩子产生排斥心理,过于简单的游戏则达不到想要的效果,而基于嵌入式系统的五子棋游戏的开发则是一个更好的选择,他不仅难度适中,操作简便,而且还具有很好的开发智力的功能。在国内以及国外都得到了很好地赞誉。1.2 需求分析对于一个人机对弈的嵌入式五子棋游戏来说,主要应解决五子棋游戏的图形显示、智能人工算法、键盘响应处理3个问题。(1)图形显示图形显示问题应该包括怎样设计友好的人机交互界面;怎样将棋子和光标显示在LCD正确的位置上;怎样在棋盘移动光标时去掉以前位置上的旧光标产生的痕迹;怎样在棋子与光标叠加时去除光标痕迹;怎样进行游戏后的图像处理问题;怎样从方形图片得到游戏所需的圆形棋子;怎样进行汉字在游戏过程中的显示问题等。由于该游戏所采用的LCD规格为640480像素,根据该规格设计所使用的黑棋子、白棋子、背景图片、光标3。为了使游戏界面更加友好,我决定采用图片字体显示方式,而不是使用SDL_ttf中的字体。棋子与棋盘采用3D效果,光标与黑、白棋子三者的图片大小完全一致,都是2525像素,并且背景的色度空间都是选用RGB(255,0,255),也就是我们所说的粉红色。通过调用SDL函数库中的SDL_SetColorKey函数把粉红色颜色作为过滤色3。因此在该游戏显示这些图片过程时,看不到粉红色的颜色背景,看起来就像图片被做了切割一样。光标在新的位置重画以后,即使使用SDL_UpdateRect函数把游戏的整个屏幕都刷新后,原来的位置仍存在以前光标的图像,一直到程序的退出后才消失4。解决这个问题我所采用的办法是当光标想要在游戏某个位置上显示时,先把该位置上与光标图片大小完全一样的区域记录下来,再显示光标图像,当光标移动时,把记录下来的图片重新显示到原来的位置上,然后在显示光标之前记录新的目标区域,如此重复。用以上所述的方法解决光标的重显问题还有一定的欠缺,也就是当游戏进行,光标离开该位置时,使用下棋之前所记录的图片来重显了该位置,结果就是当游戏光标离开该位置时,该位置的棋子就会突然消失。一个简便并且又实用的方法是在选择下棋过程时,同时把棋子画到棋盘还有先前记录区域的图片上。这样即使棋盘上的棋子被擦掉了,仍然可以从记录区域的图片上将所需重新显示出来。(2)智能对弈算法对于一个智能人机对弈游戏来说,五子棋游戏算法的智能性是非常重要的,但高智能的人工算法意味着要花费更多的嵌入式CPU资源和内存资源,而这两项对与基于ARM9的嵌入式系统来说,往往都是非常紧缺的5。由于三星系列ARM9嵌入式硬件资源的限制,使用了一个较简单的人工智能算法。利用一个1515的二维全局数组来记录该游戏下棋的情况,1表示是人下的棋子;2表示是机器下的棋子,0表示是空位。当机器下棋时,使用4个函数liney、linex、line135、line45从垂直、水平、135度角、45度角4个方向搜索,遇到游戏对手的棋子就把分数加10。记录每个方向上可下棋位置的分数,选择分数高的位置下棋子。(3)键盘响应处理键盘事件包含怎样及时响应键盘敲击,怎样得到键值,怎样作出正确的应答。考虑到软件的可移植性,没有直接使用Linux系统的事件处理函数来处理键盘事件,而是采用SDL本身的键盘响应事件函数,代码简洁清晰6。2 系统总体方案2.1 五子棋实现方案该设计可以分为以下几个模块:算法模块、欢迎界面模块、棋盘与棋子模块、键盘响应模块、帮助文档模块。各模块的具体功能如下:(1)算法模块:人机对战时电脑的智能算法7。每当人走晚一步棋后,电脑都需要扫描棋盘,并根据计算后的结果确定落棋位置。该游戏的核心内容即为智能算法模块的设计与实现,这也是该游戏能正确运行的关键所在,通过对该模块的设计能够是我们对嵌入式系统研发有更好的了解。(2)欢迎界面模块:该部分读取BMP图片,并利用FrameBuffer加以显示。欢迎界面即为当系统运行后在ARM9三星开发板上会出现一个进入该游戏界面的帮助界面,该界面用于指导游戏玩家怎样正确对游戏进行运行以及操作,怎样正确退出游戏,从而保证游戏的正确运行。(3)棋盘与棋子模块:棋盘每个方格大小5050像素,棋子半径大小为30像素。棋盘颜色为23333(黄色),棋子为0(黑色)或65535(白色)。该模块同样是一个非常重要的模块,它涉及到游戏界面的友好程度,通过对该模块的设计可以较好地保证游戏玩家的使用。(4)键盘响应模块:利用已有的驱动程序,参考帮助文档,实现键盘响应。键盘模块是五子棋游戏能正确操作的关键环节,通过该模块来操作控制棋子在LCD上的显示,以及游戏玩家和机器正确的下棋位置。另外,该模块还是进入游戏等模块的关键部分。(5)帮助文档模块:制作26个英文字母的大小写和10个阿拉伯数字的字符库,利用FrameBuffer使用读取后的字符信息。五子棋游戏的操作流程图如图1所示。显示欢迎界面模式选择人机对战模式双人对战模式游戏开始玩家落子电脑落子分出输赢结束否开始 是 图1 五子棋游戏的操作流程图 2.2 棋盘和棋子现代五子棋棋盘,经过国际棋联的多次修改,最终定为15 15路,即棋盘由横竖各15条平行线交叉组成,共有225个交叉点;棋盘上共有五个星位,中间的星位称为天元,周围四点为小星,与围棋盘略有不同。五子棋的棋子和围棋相同,分黑白2种颜色,通常为散圆形,有一面凸起或二面凸起等形状,一副棋子总数为225枚,其中黑子113枚,白子112枚。关于计时,正规比赛按不同级别设置了不同的时间限制,一般的玩家都没有这个限制。2.3 规则及解释(1)黑棋先行,白棋随后。从天元开始相互顺序落子。(2)最先在棋盘的横向、竖向、斜向形成连续的相同色五个棋子的一方为胜利。(3)黑棋禁手判负、白棋无禁手。黑棋禁手包括“三、三”;“四、四”;“长连”。黑方只能用“四、三”去取胜。 (4)如分不出胜负,则定位平局。(5)对局中拔子、中途退场均判为负(6)五连与禁手同时形成,先五为胜。(7)黑方禁手形成时,白方应立即指出。若白方未发现或发现后不立即指正,反而继续落子,则不能判黑方负。五子棋是由两个人在一盘棋上进行对抗的竞技运动。在对局开始时,先由执黑棋的一方将一枚棋子的落在天元上,然后由执白棋的一方在黑棋周围的交叉点上落子。如此轮流落子直到某一方首先在棋盘的直线 横线或斜线上形成连续的五子或五子以上,则该方就算获胜。但是五子棋的特点是先行的一方优势很大。因此,在职业比赛种对黑方做了种种限制,以利公平竞争。黑白双方的胜负结果必须按照职业五子棋的规则要求来决定。2.4 五子棋攻防五子棋是一项对抗性很强的运动,在开局进入五手两打后,就开始进入了白刃战,相互争夺先手,任何一方都不能掉以轻心,要尽可能少犯错误,甚至不犯错误,否则将会导致速败。众所周知,连珠五子,连五为胜。有四才能有五,有三才有四,以此类推。所以,在五子棋的对局众进攻和防守都是从“二”和“三”的争夺开始的。“好的开始是成功的一半”,这条格言用在五子棋里再合适不过了。五子棋的点的选择十分关键。五子棋实际上是通过选择最佳的落点,加上正确的落子次序,一步一步地占领各个要点,最终获得胜利。对局的早期,选点的着眼点主要是使本方的棋子保持联系,为以后创造尽可能多的成三、成四的机会,同时尽量限制对方成为好形。由于在五子棋对弈过程中,通过行棋落点来控制对方的落点是可能的,比如活三 冲四的应点是可以预知的,完全有可能通过不断走出这样的先手来控制对方的着点直至胜利。所以,在对局的后期,就要在精确计算的前提下,尽早发动攻势,以取得棋局的控制权,否则一旦贻误战机,被对方抢先发动攻势,就会成为被控制的一方。当有多个攻击点可供选择时,要选择后续手段多,又不会被对方反先的着点。如果是黑方,还特别要注意进攻终被对方反击时出现的各种禁手点的可能性。进攻分为单攻棋和双攻棋,单攻棋指单线即单行或单向的攻棋子,包括三子攻棋(活三、填四)和四子攻棋(冲四、填五)。而双攻棋指双向或双行的攻棋。包括三、三攻棋(双活三、双填四、填四活三);四、三攻棋(冲四活三、冲四填四、填五活三、填五填四);四四攻棋(双冲四、双填五、填五冲四)。五子棋的取胜思路是由一个子开始,目标是运用各种方法在棋盘上发展出五连乃至长连而取胜。在这个发展过程中必然要经过由一子到两子 两子到三子 三子到四子的过程。因此说,把各种形状和各个方面上的二 三 四等子力结构烂熟于胸,做到举一反三,是学习五子棋的基本功,更是能灵活运用五种取胜技巧的基础。2.5 软硬件环境五子棋游戏用到了ARM2410S开发板上的以下硬件环境:LCD:液晶显示器Linux FrameBuffer显示接口2410S小键盘系统用到了以下软件环境:Readhat Linux 9.0arm-linux-gcc-3.4.1.tar.gzvi编辑器、gedit编辑器多线程 2.6 开发环境配置嵌入式五子棋游戏的开发是一个相当复杂的过程,要想开发嵌入式系统或游戏必须首先了解开发环境的配置,以下为开发环境的具体配置步骤:(1)安装Readhat Linux 9.0操作系统、开发软件包。在一台PC机上安装RedHat Linux9.0,选择Custom定制安装,在选择软件Package时最好将所有包都安装,需要空间约2.7G,如果选择最后一项:everything,即完全安装,将安装3张光盘的全部软件,需要磁盘空间大约5G8。因此建议提前为READHAT LINUX的安装预留大约5-15G的空间,具体视用户的硬盘空间大小来确定,在安装完Readhat后还要安装Linux的编译器和开发库以及ARM-Linux的所有源代码,这些安装后的总共空间需要大约800M。 (2)Readhat Linux 开发环境配置(IP地址、NFS服务、防火墙、MINICOM)。网络配置,包括配置IP地址、NFS服务、防火墙。网络配置主要是安装好以太网卡,对于一般常见的RTL8139网卡,READHAT9.0可以自动识别并安装好,完全不要用户参与,一次建议使用该网卡5。然后配置宿主机IP为21。对于READHAT9.0,它默认的是打开了防火墙,因此对于外来的IP访问它全部拒绝,这样其他网络根本无法访问他,即无法用NFS mount它,许多网络功能都无法使用。因此网络安装完毕后,应立即关闭防火墙。配置NFS:点击主菜单运行系统设置-服务器设置-NFS服务器。配置MINICOM:在linux操作系统Xwindow界面下建立终端,在终端的命令行提示符后输入minicom,回车,你就会看到minicom的启动界面。(3)Linux系统及应用程序的烧写: 超级终端设置(SecureCRT):运行Windows系统下的软件SecureCRT,安装完成后设置每秒位数为115200、数据位为8、奇偶校验为无、停止位为1、数据控制流为无。在此过程中还要设置好PC机实际连接的串口。 串口下载烧写(格式化flash、烧写vivi、烧写内核映象zImage、烧写根文件系统、烧写应用程序)。1 打开超级终端,先按住PC机键盘的Back Space键,然后启动2410-S,进入vivi控制台按照命令格式化flash分区,vivi-bon part 0 128k 192k 1216k 4288k:m 64704k 回车。2 格式化flash后,运行的是SDRAM中的vivi。注意如果这时重启或断电会丢失所有数据,否则必须使用Jtag重新烧写vivi。点击超级终端上的“发送文件”选择协议为Xmodem,选择镜像文件vivi,点击“发送”,10秒左右vivi就烧写到flash里了8。用同样的方式来烧写内核映象zImage、烧写根文件系统。 (4)ftp(FlashFXP)上传软件安装及测试。 3 游戏设计与功能实现3.1 算法模块基于ARM9的嵌入式五子棋游戏算法模块的设计与实现是该游戏能否正确运行的关键所在,也是该游戏中最为困难的部分9。算法模块在MyComper.h 文件中实现,外部函数接口如下: void ComputerThink(int (*condition)MAX_ROW_LINE) 参数说明:(*condition)MAX_ROW_LINE为1515的五子棋棋盘形势,函数调用后得到电脑落子后的棋局形势10。int IsGameOver(int (*condition)MAX_ROW_LINE)函数说明:判断是否有获得胜利的一方。若返回0,表示没有获胜的一方;若返回为1,表示白方获胜;返回2表示黑方获胜。3.2 欢迎界面模块欢迎界面模块是在游戏运行一开始所显示的界面,用于告诉玩家进行怎样的操作(人机对弈或人人对弈),该模块在readfile.h文件中实现,其外部接口函数如下:int fileopen(char *filename) if( (my_file = fopen(filename,r) = NULL )return 0; return 1; 函数说明:打开一个文件。参数说明:char *filename为待打开文件的文件名。int fileclose() if(my_file=NULL) printf(Unable to closefile source_data %sn);return 0; fclose(my_file); return 1; 函数说明:关闭一个文件。int GetWidth() int width =0; if(my_file=NULL) printf(Unable to read file source_data n); exit(0);else fseek(my_file,18L,SEEK_SET); fread(&width,4,1,my_file); return width;函数说明:读取bmp图片头文件从18位开始的4个字节的信息,该信息表示实际图片的宽度。int GetLength() int length =0; if(my_file=NULL) printf(Unable to read file source_data n); exit(0);else fseek(my_file,22L,SEEK_SET); fread(&length,4,1,my_file); return length;函数说明:读取bmp图片头文件从22位开始的4个字节的信息,该信息表示实际图片的长度。int GetOffSet() int offset =0; if(my_file=NULL) printf(Unable to read file source_data n); exit(0);else fseek(my_file,10L,SEEK_SET); fread(&offset,4,1,my_file); return offset;函数说明:读取bmp图片头文件从10位开始的4个字节的信息,该信息表示图片的数据起始位置。int GetConfectionary() int confectionary = 0; if(my_file=NULL) printf(Unable to read file source_data n); exit(0);else fseek(my_file,28L,SEEK_SET); fread(&confectionary,2,1,my_file); return confectionary;函数说明:读取bmp图片头文件从28位开始的2个字节的信息,该信息表示图片的颜色信息用多少字节来表示。void fileread(unsigned int (*buffer),int length,unsigned int position,int confectionary_length)int row;int red = 0; int green =0;int blue =0;if(my_file=NULL) printf(Unable to read file source_data n); exit(0);else fseek(my_file,position,SEEK_SET); for(row=0;rowlength;row+) fread(&blue,1,1,my_file); fread(&green,1,1,my_file); fread(&red,1,1,my_file); bufferrow=(int)(0.122*red)11)+(int)(green*0.244)5)+(int)(0.122*blue); 函数说明:读取从position到length的颜色信息,并将其存放到缓冲区中。参数说明:unsigned int (*buffer)为存放颜色信息的内存缓冲区。 int length为实际读取的信息长度。 unsigned int position为从该位置开始读取信息。 int confectionary_length为颜色信息用多少字节来表示。3.3 棋盘与棋子模块棋盘与棋子模块涉及到图形显示问题,具体包括如何设计友好的人机交互界面;如何将光标和棋子显示在正确的位置上;如何在棋盘移动光标时去掉旧位置上的光标痕迹;如何在光标与棋子叠加时去除光标痕迹;如何进行下棋后的图像处理问题;如何从方形图片得到圆形棋子;如何进行汉字的显示等问题11。棋盘与棋子模块在screen.h文件中实现,接口函数如下:int framebuffer_open ();函数说明:打开framebuffer缓冲区。void framebuffer_close();函数说明:关闭framebuffer缓冲区。static void DrawRectangle(int x0 ,int y0 ,int x1, int y1, int color) int x , y; int start_point_x; int start_point_y; int end_point_x; int end_point_y; unsigned short int *point = (unsigned short int *)Fb_dev.fb_mem; start_point_x = Get_Min(x0,x1); start_point_y = Get_Min(y0,y1); end_point_x = Get_Max(x0,x1); end_point_y = Get_Max(y0,y1); for( x = start_point_x;x=0;x+) for(y = start_point_y;y=0;y+) pointy*SCREEN_WIDTH+x = color ; / point = NULL;/ delete point;函数说明:画一个矩形,x0、y0、x1、y1分别是起点和终点的坐标位置,color是一个范围在065535颜色值。static void DrawRound(int centre_x ,int centre_y ,int radius , int color) int x , y; int start_point_x; int start_point_y; int end_point_x; int end_point_y; unsigned short int *point = (unsigned short int *)Fb_dev.fb_mem; start_point_x = centre_x -radius; start_point_y = centre_y - radius; end_point_x = centre_x +radius; end_point_y = centre_y+radius; for( x = start_point_x;xend_point_x;x+) for(y = start_point_y;yend_point_y;y+) if(x - centre_x)*(x - centre_x)+(y - centre_y)*(y - centre_y)(radius*radius) pointy*SCREEN_WIDTH+x = color ; / point = NULL; / delete point;函数说明:画一个圆形。centre_x和centre_y是圆心坐标的位置,radius是圆的半径大小,color是一个范围在065535颜色值。static void Screen_Color_Ctrl(int *buffer, int position )int i=0; unsigned short int *point = (unsigned short int *)Fb_dev.fb_mem; for ( i= 0; i640; i+) pointposition*640+i= bufferi; 函数说明:逐行的显示颜色。buffer是一个数组的指针,position是一个大小在0479680范围内位置值,显示的是buffer的颜色信息。static void ShowPicture(int (*buffer)SCREEN_WIDTH) int i = 0; int j = 0; unsigned short int *point = (unsigned short int *)Fb_dev.fb_mem; for ( i= 0; i480 ; i+) for (j= 0; j 640; j+) pointi*640+j = bufferij; 函数说明:利用内存缓冲区画图。参数说明:int (*buffer)SCREEN_WIDTH是480*680的数组指针,数组里存放的是24位bmp格式图片的颜色信息。static void DrawChar(int point_x, int point_y, int(*mychar)CAHRLINE ,int color) int i = 0; int j = 0; unsigned short int *point = (unsigned short int *)Fb_dev.fb_mem; for ( i= 0; i CAHRROW; i+)for (j= 0; j CAHRLINE; j+) if(mycharij=1) point(point_y+i)*640+point_x+j = color;函数说明:显示一个字符。point_x和point_y是左上角的位置,mychar是一个数组指针存放字符的位置信息,color是一个范围在065535颜色值。3.4 键盘响应模块键盘响应问题包含如何及时响应键盘敲击,如何得到键值,如何作出正确的响应,键盘响应模块在keyboard.h头文件中实现,接口函数如下:int KBD_Open(void)int i;fd = open(KEYBOARD, O_RDONLY | O_NONBLOCK);if (fd 0) printf(%s - Cant open keyboard!n, _FUNCTION_);return -1;for (i=0; isizeof(scancodes)/sizeof(scancodes0); i+)scancodesi=MWKEY_UNKNOWN;for (i=0; i sizeof(keymap)/sizeof(keymap0); i+)scancodeskeymapi.scancode=keymapi.mwkey;return fd;函数说明:打开键盘。void KBD_Close(void)close(fd);fd = -1;函数说明:关闭键盘。int KBD_Read(char* kbuf, unsigned int * modifiers, unsigned short * scancode)int keydown = 0;int cc = 0;char buf,key;cc = read(fd, &buf, 1);if (cc 0) if (errno != EINTR) & (errno != EAGAIN) & (errno != EINVAL) perror(KBD KEY);return (-1);else return (0);if (cc = 0)return (0);*modifiers = 0;if (buf & 0x80)keydown = 1;else keydown = 2;buf &= (0x80);*scancode = scancodes(int) buf;*kbuf = *scancode ;return keydown;函数说明:获得当前按下的键值(同时也是弹起的键)。参数说明:char* kbuf表示缓存键值。 unsigned int * modifiers代表键盘按下。 unsigned short * scancode代表键盘弹起。3.5 帮助文档模块帮助文档模块主要用于显示对游戏的操作说明,该模块在MyCharLib.h文件中实现,外部接口函数如下:void drawBigA( int(*p)20 )函数说明:在缓冲区P中存放“A”字母的点阵信息(只记录值为1的点)。参数说明:int(*p)20一个大小为x*20的缓冲区,其中x值实际为30。注意:其余25个大写字母、26个小写字母(函数原型为void drawSmalla(*p)20)以及10个阿拉伯数字(函数原型为void drawNum0(*p)20)的函数使用方法与其类似。void getChar( char c, int(*p)20 )函数说明:通过传入字母c,得到该字母或数字的画法p。参数说明:char c表示待要得到画法的字母。 int(*p)20存放传入字母的画法。void MyPrintf(int point_x,int point_y,int color,char *buffer ,int length) int mycharCAHRROWCAHRLINE=0; int i = 0; for(i = 0;ilength;i+,buffer+) getChar(*buffer,mychar); DrawChar(point_x+i)*CAHRLINE,point_y,mychar,color); 函数说明:传入坐标、颜色,待画字符串以及字符串的长度,将该字符串在指定坐标位置用特定颜色绘制。参数说明:int point_x和int point_y为待绘字符串坐标。 int color为待绘字符串颜色。 char *buffer为存放字符串缓冲区。 int length为字符串长度。4 游戏测试游戏测试主要是对程序的各种错误,漏洞,以及驱动的可移植性,进行及时的处理,调试的工作贯穿了整个设计的过程12。同时,裁剪后的Linux内核的健壮性也是经过反复测试的。基于ARM9的嵌入式五子棋游戏的开发是在Linux操作系统下进行的,对于Linux下开发环境的测试同样是非常重要的,尤其是arm-linux-gcc-3.4.1交叉编译器的安装以及对开发程序的交叉编译、在开发板上的运行13 14。基于ARM9的五子棋游戏的开发与实现首要为题是开发环境的搭配,嵌入式游戏的开发需要对vivi、内核映象zImage、烧写根文件系统root进行移植,移植后的开发版运行界面如图2所示。图2 开发板下linux系统界面图基于ARM9的五子棋游戏的开发源码是基于linux C的,其设计源码以及编译后的目标文件如图3所示。图3 开发板下五子棋程序图嵌入式五子棋游戏的执行测试过程如图4所示。图4 开发板下五子棋运行指令图嵌入式五子棋游戏结束游戏如图5所示。图5 开发板下五子棋游戏结束图基于ARM9的五子棋游戏在PC机linux系统下交叉编译器安装测试成功如图6所示。图6 Linux下交叉编译器安装成功测试图 基于ARM9的五子棋游戏的设计与实现是嵌入式系统开发多个模块综合运用的结果,通过该游戏我们可以实现多种功能的连接从而进一步更好的掌握嵌入式系统的研发15。基于ARM9的五子棋游戏的开发与实现效果展示如图7(Linux系统在开发板上的效果展示图)、图8(五子棋游戏在开发板上运行的欢迎界面)、图9(五子棋游戏在开发板上运行的帮助图)、图10(五子棋游戏在开发板上运行图)。图7 Linux系统在开发板上运行效果图图8 五子棋游戏在开发板上运行的欢迎界面图图9 五子棋游戏在开发板上运行的帮助图图10 五子棋游戏在开发板上运行图5 结束语 基于ARM9嵌入式五子棋游戏的设计,重点介绍了人机对弈智能算法模块、欢迎界面模块、棋盘与棋子模块、键盘响应模块、帮助文档模块等,详细的给出了设计思路,并给出了大部分的核心代码,阐述了LCD、FrameBuffer、键盘等多个硬件的驱动程序。由于时间和能力有限,该游戏的开发与设计只进行了简单的模块整合,实现了最基本的有关五子棋游戏的功能。但我相信,在此基础上还可以开发出更具特色、功能强大的嵌入式五子棋游戏。参考文献1 博创科技嵌入式系统实验指导书M2009:5-242 杜春雷ARM体系结构与编程M北京:清华大学出版社,2013:453-4663 刘洪涛基于ARM 9处理器的开发设计M北京:电子工业出版社,2012:86-1334 华清远见研发中心,FS_S5PC100平台用户手册M北京:电子工业出版社,2013:21-455 曹忠明,程姚根嵌入式Linux操作系统M北京:电子工业出版社,2012:76-826 赵炯Linux内核完全剖析M北京:机械工业出版社,2007:193-2347 温尚书,陈刚,冯利美嵌入式Linux应用程序开发M.北京:电子工业出版社,2011:124-1348 宋宝华Linux设备驱动开发详解M北京:电子工业出版社,2011:45-649 曾宏安嵌入式Linux C编程M北京:电子工业出版社,2012:112-14510 严蔚敏,吴伟明数据结构(C 语言版)M北京:清华大学出版社,2007:21-4511 王田苗,魏洪兴嵌入式系统设计与实例开发M北京:清华大学出版社,2008:154-15912美W.Richard StevensAdvanced Programing in t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论