高工论文发表嵌入式24点游戏设计
所属栏目:电子技术论文
发布时间:2014-09-15 14:02:27 更新时间:2014-09-15 14:24:25
[摘要]随着手机软件技术及游戏软件的发展,手机游戏业也进入了一个新的移动游戏时代。好多大学设置了嵌入式游戏设计课程,24点游戏设计是在嵌入式系统环境下,使用标准C语言编程实现24点益智游戏。游戏中包含计算机出题模块、计算机计算模块、时间模块、难度和得分模块、表达式计算模块等。该类课程设计对培养适应社会需求的嵌入式技术人才有着重要意义。
[关键词]高工论文发表,嵌入式技术,24点,游戏设计
一、引言
24点游戏设计是通过C语言在基于ARM微处理器上实现计算24点的游戏。该游戏属于益智小品,操作简单、短小精悍、易于上手,对技术指标和显示屏要求都不高[1]。24点的游戏规则是:给定4个一定范围内的整数,任意使用+、-、*、/、( ),构造出一个表达式,使表达式最终结果为24,其中每个数字只能使用一次。本游戏要求机器与玩家进行模拟比赛,例如先由机器给玩家出4个数,玩家通过自己的计算得出结果并将结果输入给机器,如果答案是无解,也输入给机器。机器进行验证,如果答案正确进入下一环节,如果不正确,机器给玩家以提示。然后玩家出4个规定范围内的数,由机器计算并将结果显示给玩家。最后比较机器与玩家解题时所用的时间,时间短的为胜。胜者可进行加分等相应处理。出题时4个整数的范围鉴于普通玩家的水平初定于13以内,因为我们经常用扑克牌作24点游戏的工具,在扑克牌中最大的数值是K也就是13。可以通过机器计算时所用的时间长短进行调整,用来增加或者降低难度。根据实际情况也可以将出题的4个数最大值增加,但是对于玩家,过大的数较难计算,所以还需要在实践中检验效果[2]。
二、嵌入式24点游戏概述
1.计算机出题模块
功能要求:计算机随机出4个数并显示,玩家通过计算,将包含4个数和加减乘除四则运算的表达式输入计算机,计算机对表达式进行运算,判断是否等于24,然后给予响应提示[3]。
2.计算机计算模块
功能要求:计算机得到1~13范围内的4个数,计算并判断该4个数是否可以组成结果为24的表达式。
3.时间模块
功能要求:从20秒开始倒记时,并显示。对于20秒的时间,需要从系统时间那里获得。另外在时间进行的同时,玩家要进行录入等操作,所以可以将时间设置为一个任务,以免和主任务冲突。
4.难度和得分模块
难度分为4级,1级难度出题范围为1~10,2级为1~11,3级为1~12,4级为1~13。
得分设计是:玩家每成功1次成绩加10。判断得分每得到30分难度增加1。
5.主界面模块
在游戏开始时显示界面并提供玩家选择出题还是做题,图1显示了24点游戏流程图。
图1:24点游戏流程图
三、24点游戏算法部分
1.出题的实现
在标准C语言中有随机函数rand()可用,但是在这里,在嵌入式平台上却达不到要求:每次重新开机后随机函数rand()给出的4个数字是相同的。鉴于每次开机时系统时间是不同的,我们通过对系统时间的调用,得到“秒”这个值。再与随机函数rand()给出的数进行处理,并对13以内的数进行取模运算,得到需要的数字。
2.计算24点
计算24点基本原理是穷举4个整数所有可能的表达式,然后对表达式求值。
因为能使用的4种运算符+、-、*、/都是2元运算符,所以只考虑2元运算符。2元运算符接收两个参数,输出计算结果,输出的结果参与后续的计算。
由上所述,构造所有可能的表达式的算法如下:
(1) 将4个整数放入数组中。
(2)在数组中取两个数字的排列,共有P(4,2) 种排列。对每一个排列的+、-、*、/运算符:
①根据此排列的两个数字和运算符,计算结果。
②改表数组:将此排列的两个数字从数组中去除掉,将①计算的结果放入数组中。
③对新的数组,重复步骤(2)。
④恢复数组:将此排列的两个数字加入数组中,将①计算的结果从数组中去除掉。
可见这是一个递归过程。步骤(2)就是递归函数。当数组中只剩下一个数字的时候,这就是表达式的最终结果,此时递归结束。
3.中缀到后缀转换算法
计算后缀表达式算法:我们知道在表达式中经常会用到“(”或者“)”作用是优先计算括号内的数,但是计算机无法直接考虑括号问题,所以需要算法解决。其中,最传统的方法就是先把一个普通的表达式即中缀表达式转换为不需要括号的后缀表达式,在计算后缀表达式得出结果。玩家将会输出一代数表达式,代数表达式是由操作数和运算符连接起来的合法的串。操作数可以是一个变量,比如x、y、z,也可以是一个常量,比如5、4、0、9、1等。运算符是一个表示操作数间数学或逻辑操作的符号。大家熟悉的运算符有+、-、*、/等。根据操作数和运算符的定义,现在可以写出一个表达式的示例,如x+y*z。
一个代数表达式有三种表示方法:
● 中缀表示:就是我们熟悉的这种用操作数包围着运算符的表示法,比如x+y,6*7等。
● 前缀表示:顾名思义,前缀表示法中,运算符要放到操作数前面,比如+xy,*+xyz等。
● 后缀表示:它与中缀和前缀表达式不同之处在于,后缀表示法中,运算符放在操作数之后,如xy+,xyz+*等。
另外我们要用到运算符的结合性这个概念。运算符的结合性规定了同优先级的运算符间的运算次序。对有左结合性的运算符而言,计算次序是从左到右,而对右结合性的运算符,是从右到左计算。*、/、+、-都具有左结合性[4]。
由于使用中缀表示法时还要考虑运算符的优先级和结合性的问题,我们换用前缀和后缀表示。前缀和后缀表示相比中缀表示的优点在于计算表达式值的时候不需要考虑运算符的优先级和结合性。比如,x/y*z用前缀表示就变成了*/xyz,用后缀表示就变成xy/z*。前缀和后缀表示都能使表达式值的计算变得容易得多。所以,实际上我们要做的就是由用户扫描中缀表达式;将其转换成前缀或后缀形式,然后计算其值,而不用考虑括号和运算符的优先级。举例:假设我们想要把表达式2*3/(2-1)+5*(4-1)转换成后缀形式,得到的后缀表达式是23*21-/541-*+。
四、总结
与嵌入式技术相结合的24点游戏用户可以通过携带手机或PDA等电子产品,随时随地想玩就玩,游戏的操作方便。人们从游戏中可以得到放松并通过玩24点游戏增加思考并提高学习能力。
基金项目:北京信息科技大学《嵌入式系统及安全》课程建设项目
[参考文献]
[1]胡昭民.游戏设计概论(第3版).北京:清华大学出版社,2011
[2](美)Scott Jacobs. 游戏编程精粹7[M].北京:北人民邮电出版社,2010
[3]王小妮、魏桂英、杨根兴.嵌入式组件设计[M].北京航空航天大学出版社,2012
[4](美)Andrew Binstock.程序员实用算法[M].北京:机械工业出版社,2009