版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于嵌入式系统的游戏程序设计0引言随着近年來计算技术、通信技术的飞速发展,特别是互联网的迅速普及和3c(计算机、通信、消费电子)合 一的加速,微型化和专业化成为发展的新趋势,恢入式产品成为信息产业的主流。恢入式系统被定义为以 应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗 严格要求的专用计算机系统。嵌入式系统是面向用户、面向产品、面向应用。而广泛用于制造工业、过程控制、通信、仪器、仪表等, 消费类产品,如果独立于应用口行发展,则会失去市场。恢入式处理器在功耗、体积、成本、可靠性、速 度、处理能力、电磁兼容性等方而均受到应用要求的制约,这些也是各个半
2、导体厂商z间的竞争热点。嵌入式处理器的应用软件是实现嵌入式系统功能的关键。软件要求周化存储,软件代码要求高质量、高可 靠性。1开发平台一个完整的嵌人式系统结构如图1所示,设汁中采用的硕件平台为基于intel xscale架构的pxa255开发板, cpu 运算速度为 400 mhz, flash 为 32 mb 容最的 intel strata flash, sdrm 容量为 64 mb, usbslave 支持usb1. 1, lcd支持640x480分辨率。图】决入式系统结构山图1可以看出,一个完整的嵌入式系统不仅包含有硬件平台,还有运行于该换件平台的操作系统和基于 该操作系统的应用软件,
3、而嵌入式linux只是众多嵌入式操作系统中的一个。从20世纪80年代末开始,陆续出现了一些嵌入式操作系统,例如比较著名的有vxwork, psos, neculeus, qnx, ecos, lynx, palm os和windows ce,这些专川操作系统都是商业化产品,其高昂的价格使许 多低端产品的小公司望而却步;而且源代码的封闭性也人人限制了开发者的积极性。另外,结合国内实情, 当前国家对自主操作系统的人力支持,也为源码开放的linux推广提供广阔的发展前景。再者,对上层应 用开发者而言,嵌入式系统需要的是一套高度简练,界面友善,质量可靠,应用广泛,易开发、多任务, 并ji价格低廉的操作
4、系统。基于以上悄况,采用嵌入式linux操作系统作为开发的软件平台。2交叉编译工具链在嵌入式系统软件的开发过程中,交叉编译工具链是极为重要的一环,设计并制作良好的交叉编译工具链 是顺利实现软件开发的重要保障。2. 1 arm-linux的gcc交叉工貝链设计采用的linux操作系统是经过修改与裁剪的arm-linux;使用的开发工具是非图形开发工具gcc。gcc 交叉编译工具一般悄况下需自行制作,制作方法较为简单,这里不做详细介绍。制作一条比较完整的 arm-linux gcc交义工具链主耍丿口到如下软件包:binulils 工具包(flp: / / ftp. gnu. org / gnu /
5、 binutils);gcc 编译器(ftp: / / ftp. gnu. org / gnu / gcc);glibc 函数库(ftp: / / ftp. gnu. org / gnu / glibc);glibc-linuxthrcads 包(ftp: / / ftp. gnu. org / gnu / glibc);linux 内核(ftp: / / flp. kernle. org / pub / linux / kernel)o如果linux内核低于2. 6版木,还应下载相应的内核补丁。(ftp: / / ftp. arm. linux. org. uk / pub / linux
6、/ arm / kernel / v2. 4 / )2. 2 sdl图形库为使程序运行的界面更加友好和美观,在设计中要使川到图形函数接口,这就意味着要向前面的工具链(采 用gcc工貝链版木为3. 3. 2)添加第三方的图形函数库。设计中采用的sdl(simple directmedia layer)图形 库为免费的跨平台多媒体应用编程接口,具冇丰富的两数库,便f开发者使用。2. 21 sdl常用到的开发包(i)sdljmage:提供显示多种格式的图像显示接口,它支持bmp, png, jpeg, gif, tiff等;sdl_draw:提供画点线圆等儿何图形的接口(sdl_gfx也含冇这样的功
7、能hllp: / / www. ferzkopp. net/ joomla / content / view / 19 / 14 / );sdl_ttf:捉供显示ttf文字的接口 ;sdl.mixcr:提供播放各种声音文件的接口。把sdl编译到工具链用的并非pc机本身带的gcc编译器,而是要用到第2. 1节已经做好了的交叉编译工具链。其中使用的pkg-config工具版木要在0. 15. 0版木或以上。sdl 以及与 sdl 安装相关或有依赖关系的软件有:alsa-lib-l 0. 15, audiofilc-o. 2. 6, csound-0. 2. 38, freetype-2 1 9,
8、jpegsrc v6b, libid3tag-0. 15 1 b, libmad-0 15. lb, libpng-1 2. 22, madplay-0.15. 2b, sdl-l. 2. 12, sdl_draw-l. 2. 11, sdl_gfx-2. 0. 15, sdl_image-l. 2. 6, sdl_mad-0. i, sdl_mixer-l. 2. 8, sdljtf-2. 0. 9, tiff-3. 8. 2, tslib-1 3, zlib-1 2. 3。2. 2. 2交义编译的主要步骤主要步骤为:(1)设定环境变就:prefix 为安装卜|录;cross 为 arm4j
9、nux: pkg_config_path 为 pkgcon-fig 的路 径;arch在这里设成arm: host注意耍是arm-linux,而不是i386-linux(这与前面做arm-linux-gcc 不一样);build设置为i386-linux<»编译时一定要指定cc, nm, ar等变量,让它们跟交叉编译器对应 的工具关联起來,否则编译时将会采用pc机linux的gcc编译器进行编译,不能达到交叉编译的目的。(2)按顺序依次编译如下软件:zlib编译命令行:. / configuresharedprcfix=$prefix: make: make install o
10、freetype编译命令行:./ configurehost=$(host)-build=$(build)-prefix=$prefix: make: make installolibpng编译命令行:./ configurehost=$(host)一build=$(build)prefix=$prefix; make; make installlibtiff编译命令行:./ configurehost=$(host)build=$(build)-prefix=$(prefix) / usr-without-xenable-zlib with-zlib-include-dir=$(preflx
11、) / includewith-zlib-lib-dir=$(prefix) /libwith-jpeg-include-dir=$(prefix) / include with-jpeg-lib-dir=$(prefix) / lib; make; make installtslib编译命令行: configurehost=$(host)build=$(build)-prefix=$(prefix)-cache-file=$(arch)-linux. cache syscon fdir=$(prefix / etcenable-static &&; make; make in
12、stallslibmad编译命令行: / configurehost=$(host)build=$(build)prefix=$(prefix); make: make installlibid3tag编译命令行: / configurehost=$(host)-build=$(build)prcfix=$(prefix); make make installmadplay编译命令彳亍: / configure-host=$(host)-build$(build)-prefix=$(prefix); make; make installalsa编译命令行: / configure-host=$
13、(host)-build=$(build)-prefix=$(prefix)-disable-esd-disable-video-di-rectfb: make;make install oaudiofile编译命令行: / configure-host=$(host)-build=$(build)-prefix=$(prefix)-disable-esd-disable-video-di-rectfb: make;make install oesound编译命令行: / configure-host=$(host)-build=$(build)-prefix=$(prefix)-disabl
14、e-esd-disable-video-di-rectf'b: make; make install osdl编译命令行: configurehost=$(host)build=$(build)prefix=$(prefix)with-esd-exec-prefix=$(prefix)disable-video-directfb; make; make installosdljmage编译命令行:./configurehost=$(host)-build=$(build)prefix=$(prefix)with-sdl-exec-prefix=$(prefix)enable-sdhes
15、t; make; make installsdlff编译命令行:./configiire-host=$(host)-build=$(build)-prefix=$(prefix)-wilh-freetype-exec-prefix=$(prefix);make; make installosdl_draw编译命令行:./configure-host=$(host)-build=$(build)prefix=$(prefix)-wilh-sdl-exec-prefix=$(prefix); make;make installsdl_mixer 编译命令行:./configurc-host=$(h
16、ost)-bui)d=$(buiud)-prcfix=$(prefix)-with-sdl-cxcc-prcfix=s(prefix); make; make install sdl_mad编译命令行:/ configurehost=$(host)-build$(build)prefix=$(preftx)with-sdl-exec-prefix=$(prefix); make: make install至此,整个工具链就制作完成,打包并做好备份。这个工具链并不限于只川于制作该工具的linux操作系 统上使用,同样可用于别的linux环境。3开发环境设置嵌入式系统通常为-个资源受限的系统,直接
17、在嵌入式系统的硕件平台上编写软件比较因难,有时甚至是 不可能的。-般嵌入式软件开发采用的办法是先在通用计算机上编写程序,然厉通过交叉编译,生成h标 平台上可运行的二进制代码格式,最后下载到目标平台上的特定位置上运行。仅安装好linux系统和开发工具,还没冇真正完成设计所需要的开发环境。sdl只是一个图形的函数库, 它向上提供图形曲数接口,向下调川系统图形引擎来画图。它支持的图形引擎有很多,这里采川linux内 核自带的fnmwbuffer,代码简洁,十分适用于嵌入式软件开发。如果在开发板上的linux的/ dev /目录及其子目录下没冇找到fbo或fbl或其他类似名称的设备时,则很 有可能正在
18、使用的内核没有framebuffer驱动。此时只能重新定制内核,选择对framebuffer支持和相关的 驱动,再进行内核编译。4主要解决问题对于一个人机对弈的嵌入式五子棋游戏來说,主要应解决图形显示、人工智能算法、键盘事件处理3个问 题。4. 1图形显示图形显示问题包括如何设计友好的人机交互界面;如何将光标和棋显示在正确的位置上;如何在棋盘移 动光标时去掉旧位置上的光标痕迹;如何在光标与棋子叠加时去除光标痕迹;如何进行下棋厉的图像处理 问题;如何从方形图片得到圆形棋子;如何进行汉字的显示问题等。由于采川的开发板lcd规格为640x480像素,根据这个规格设计所使用的背景图片、黑棋子、白棋子、
19、光 标。为了使界面更加友好,采用图片字体显示,而不使用sdl_ttf中的字体。棋盘与棋子采用3d效果,黑、h棋子与光标三者的图片大小一致,都是25x25像素,且背景色的色度空 间都选用rgb(255, 0, 255),也就是粉红色。通过调用sdl函数库中的sdl_setcolorkey函数把粉红色 作为过滤色。因此在显示这些图片时,看不到粉红色的背景,看起来就像图片做了切割样。光标在新的位置重画后,即使使用sdl_updaterect两数把幕个屏幕都刷新,原來的位置仍然还冇光标的图 像存在,一直到程序的退出。解决这个问题釆用的办法是当光标要在某个位置显示时,先把这个位置上与 光标图片大小一样的
20、区域记录起來,再显示光标,当光标移动时,把记录起來的图片重新画冋到原來的位 置,然后在画光标之前记录新的目标区域,如此重复。用上面的方法解决光标的重画还存在一些问题,也就是当下棋时,光标离开这个位置时,使用下棋z前所 记录的图片來重画了这个位置,结果就是当光标离开时,这个位置的棋子突然消失。一个简单而又实用的 方法就是在选择下棋时,同时把棋子画到棋盘还有先前记录区域的图片上。这样就算棋盘上的棋子擦掉了, 还可以从记录区域的图片上将它重新画出来。4. 2对弈算法对于一个对弈游戏來说,算法的智能性是非常重要的,但高智能的算法往往意味着要花费更多的cpu资源 和更多的内存资源,而这两项对嵌入式系统来
21、说,往往都是非常缺乏的。由于嵌入式硕件资源的限制,使用了一个较简单的算法。利用一个15x15的二维全局数组來记录下棋的情 况,i表示是人下的棋子;2表示是机器下的棋子,0表示是空位。当机器下棋时,使用4个断数linex, liney,hne45, linel35从水平、垂直、45。角、135。角4个方向搜索,遇到对手的棋子就把分数加10。记录每个方 向上可下棋位置的分数,选择分数高的位置下棋子。4. 3键盘事件处理键盘事件响应问题包含如何及时响应键盘敲击,如何得到键值,如何作岀e确的响应。考虑到软件的可移 植性,没冇直接使用linux系统的事件处理函数來处理键盘事件,而是采用sdl本身的键盘响
22、应事件函数, 代码简洁淸晰。5五子棋游戏设计与实现main主函数主要调用初始化函数lnitgraph()与控制两数gamecontrok),这两个都是全局两数,返回类型都 是void。inilgr叩h()丄要进行程序初始化和图片装载;gamecontrol()是上要的游戏控制函数。5. 1 initgraph()函数initgraph()先调用 sdl_init(sdl_init_audi-o | sd1_init_v1deo)初始化一个终端屏幕,再使用sdl_setvideomode(640, 480, 16, sdl_swsur-face)把它设置成合适的模式。其中的“640, 480”表
23、示 这是个640x480像素的屏幕;16代表的是色深。sdl中使用sdi.surface结构來记录屏幕区域或图片,过程用到的所有图片都使用这个结构來存取。sdl.creatergbsurface函数用來创建-个sdl_surface实例,而img_load函数则可以把一张图片装载到 一个si)i_surface中去,接着使用sdl_setcolor-key函数來设置透明色,这里把rgb(255, 0, 255)设置成 透明色。因此,显示出来的图片中颜色为rgb(255, 0, 255)的区域都成了透明的。sdl.blitsurface函数用來把一个sdl.surface的某一部分或全部画到另一
24、个sdl.surface上去。如果目标 sdl_surface是折幕,那就是要在折幕上显示此sdl_surface,当然要使用sdl_updaterect把这个区域刷新一下才能看到结呆。因为经常要显示图片和擦除图片,所以这也比较麻烦,再加上要光标移动时不仅要画出光标,更是耍在画z前保存这块区域的图片。所以把sdl.blitsurface 装成个町以保存区域图片的画图两数showpicture05. 2 gamccontroio函数gamecontrol()是程序的卞要控制模块。sdl_event是记录事件的数据结构,通过sdl_pollevent(&evenl) 可以得到键盘和鼠标事件。对event结构的判断可得到想要的按键值和按键的动作。电脑卜棋的位趕主要是通过调用coniputcrthink函数得到的。cornputcrthink函数采丿ij第4. 2节的对弈算 法,调用linex, liney, iine45, line 135对某个位置进行水平、垂直、45。角和135。角4个方向的5个棋子内 的范围进行扫描。如扫描水平这条线时,先从这个点向左扫描,遇到对手下的棋子把分数加10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 剃须盒产业规划专项研究报告
- 医疗器械箱产业深度调研及未来发展现状趋势
- 外科植入用心瓣膜产业规划专项研究报告
- 体育赛事5G网络直播方案
- 国际金融学(2022秋)-3学习通超星期末考试答案章节答案2024年
- 康茄舞鼓产业链招商引资的调研报告
- 物流公司办公设备配送方案
- 物业管理电动汽车充电解决方案
- 化妆台梳妆台产业深度调研及未来发展现状趋势
- 伸缩警棍产业规划专项研究报告
- 幼儿园班级区域环境创设课件
- 组织行为学教案英文版
- 《叙事式心理治疗》精品PPT
- 2022中国听障用户数字产品体验调研报告
- ADAScog(老年痴呆量表—认知)
- 非婚生育子女情况声明
- 脱硫检修方案
- 乐理试题(音程-三和弦)
- 汽轮机主油箱系统(课堂PPT)
- 数据管理制度
- 减速器拆装实训教案
评论
0/150
提交评论