人生最大的幸福,是发现自己爱的人正好也爱着自己。
大连民族学院本科毕业设计(论文)基于安卓的"经营冷饮店"游戏设计摘要随着社会与科技的发展人们越来越注重移动、便携与方便而随着这股潮流的发展手机应用游戏应运而生安卓系统作为一个市场占有超过50%的手机平台其应用游戏的发展非常迅猛本论文提出一款基于安卓系统的"经营冷饮店"游戏设计并对其具体开发与实现进行了剖析在游戏制作过程中实现了用户与手机之间的良好的人机交互使用户更好的参与到游戏中去此款游戏为模拟经营类游戏其内容主要包含"游戏开始""选择游戏难度""玩家进货、定价""游戏主画面""游戏结束"这5个模块主要介绍了每个模块的功能设计方法模块和模块之间的逻辑结构和数据处理本论文主要对此款游戏的总体设计需求分析和内部数据的具体处理和计算进行了详细的阐述并对游戏的具体设计与实现进行了简要的说明在一定安卓理论的基础上介绍了部分关键代码与关键函数的应用对游戏中应用到的相关计算机图形学实现应用动画的过程做了具体介绍最后展示成果截图并对其进行简单介绍然后论文进行整体总结与归纳关键词:游戏;安卓;人机交互The Subject of Undergraduate Graduation Project (Thesis) of DLNUAbstractWith the development of society and technologygrowing emphasis has been on mobilportable and convenient.With this trendmobil application game come into being.Android System as a market share over 50% of the mobile phone systemthe application of Android has been developed very rapid.This paper presents an Android game called "The Cold Drink shop" and its specific development and realization are explained. The game is good human-computer interaction and the users will be better involved in the game.This game is business simulation gameits topics include "the start of the game""select the game difficulty""player purchase and pricing""the main game screen""the end game" of these five modules. It is introduction the function of each module the design method and logical structure and data processing modules and between modules.This thesis focuses on the overall design of this gameneeds analysisand internal data processing and calculation in detail. And game specific design and implementation of a brief description. On the basis of the theory of Android it is introduction of the application of the keys code and functions. Specificintroduction to the computer graphics applications animation process applied to the game.Finally show the results and be a brief introductionand then the paper overall summary and summarized.Key Words:Game;Android;Human-computer interaction目录摘要IAbstract II1 前言 11.1 游戏的目的与意义 11.2 Android游戏的发展趋势 11.3 系统调研 11.3.1社会可行性分析11.3.2技术可行性分析21.3.3经济可行性分析22 Android开发工具及系统特点32.1开发工具32.2系统特点33游戏总体设计 53.1游戏模块划分53.2游戏设计逻辑63.2.1天气影响因素 63.2.2声誉影响因素 64 游戏设计84.1游戏需求分析84.1.1对功能的规定84.1.2对性能的规定84.2游戏数据分析84.2.1游戏固定数据存储格式84.2.2玩家进货价格生成94.2.3商品腐败值计算方法104.2.4商店声誉计算方法104.2.5顾客购买率计算方法115游戏具体设计与实现125.1游戏各Activity功能125.1.1开始Activity 125.1.2选择Activity 125.1.3准备Activity 125.1.4游戏进行Activity 135.2游戏中动画原理实现135.2.1图片的加载135.2.2顾客的走动和购买的实现135.2.3下雨、下雪的背景实现146游戏实现及效果15结论17参考文献 18致谢191 前言1.1 游戏的目的与意义现如今电子游戏已慢慢渗透进人们生活中并在扮演着越来越重的角色可以说随着它的迅猛发展现今的电子游戏已经不仅仅是一种娱乐而是形成了一种文化现象本游戏的制作属于电子游戏中的经营类游戏经营类游戏即是你在虚拟世界中开一家店铺以把店铺经营好使店铺在金钱和等级上达标简单的经营类游戏可以使玩家体验到娱乐与消遣但当游戏更加靠近现实把现实中开店所遇到的各种有利因素、不利因素都添加进去之后经营游戏可以算是一种对现实的模拟1.2 Android游戏的发展趋势随着社会的发展人们的工作压力与日俱增与此同时相应的减压放松的方式也慢慢发生了变化人们更趋于在家或者工作闲余时间以电子游戏的方式达到娱乐的目的一次也就意味着电子游戏的利润空间和发展空间是十分宽广的而作为现代人不可或缺随身携带的手机设备则作为一类游戏的载体有着广泛的发展空间而Android作为主流智能手机系统之一研究和开发相应应用游戏是时代发展的趋势现如今Android的市场份额占总体智能手机市场份额的50%以上相对于前几年来说其发展势头势不可挡以至于越来越多的开发商加入了Android应用开发的行列在2010年Android市场份额仅占4.7%左右并其市场只有不到20000个应用程序但在2011年初这个数字就已经超过了25万字大关而随着越来越多的应用的诞生由于其的多元化和普遍性越来越高其发展趋势已开始渐渐逼近世界智能手机龙头苹果公司推出的ios系统而在多个Android的应用程序排行榜中无论是按照使用量或者人气或者收入70%以上的应用排行榜榜首都是游戏可见Android游戏应用已渐渐深入人心Android手机游戏应用开发已渐渐占据市场主流1.3 系统调研1.3.1社会可行性分析随着手机的发展与普及以及互联网技术的扩展人们对移动通讯的需求必将需要实现多元功能化通过移动通讯连接到Internet上实现数据应用等资源共享提高了数据的资源利用并能及时的到更新在这样的外界环境之下手机娱乐应用的推广得到保证1.3.2技术可行性分析Android系统平台是一个基于Linux开源的手机操作系统它由Google公司在2007年11月5日正式发布的Android平台是由操作系统、中间件、界面和应用软件组成是第一个要为移动终端创造的一款真正开放的完整的操作系统[1]说道Android操作系统平台的优势不得不提到最突出的两个特点"免费"和"开源"免费:Android免费提供其操作系统让移动过电话制造商可以免费搭载Android操作系统使得手机的制作成本大大降低渐渐使得Android普及开源:Android手机制作操作系统代码的开放性不仅让开发者可以在统一开放平台进行程序开发而且可以解决现今市场不同智能机之间因文件格式不同造成的信息交流不便、程序内容无法移植等问题;并且Android的开机源码就意味着手机使用者不必在被动地接受移动电话制造商默认的设施和环境使用者完全可以根据自己的想法自定义手机的配置1.3.3经济可行性分析作为现金炙手可热的Android手机游戏由于其拥有大量玩家的基础因此开发商络绎不绝对其投资的广告商也源源不断2 Android开发工具及系统特点2.1开发工具Eclipse是一个市场占有率很高的Java IDE工具Android推荐使用Eclipse来开发Android应用并为其提供了专门的插件:Android Development Tools(ADT)2.2系统特点Android的底层建立在Linux系统之上它采用一种软件叠层的方式进行构建这种软件层结构使得层与层之间互相分离分工明确保证了层与层之间的低耦合当下层的层下或者层内发生改变时上层应用程序无须做任何改变([1]Android疯狂讲义)Android系统主要由5部分组成:* 应用程序层* 应用程序框架* 函数库* Android运行时* Linux内核图2.1如图2.1所示:应用程序层为系统的核心应用程序如电子邮件客户端、地图、浏览器等这些程序主要都是Java编写玩家主要通过这些应用程序来实现对手机的操作应用程序框架提供了大量API供开发者使用开发者自己开发的应用的功能模块主要遵守了框架的约定那么其他应用程序也能使用这个功能模块函数库包含了一套被不同组件所使用的C/C++库的集合一般来说Android开发者不能直接调用这套C/C++库集但可以通过它上面的应用程序框架来调用此库Android操作系统运行时由2个部分组成:Android核心库和Dalvik虚拟机其中Android核心库主要为Java语言提供了大部分的功能而虚拟机则负责运行Android应用程序[2]Linux内核系统基于Linux2.6之上搭建的在Android平台上Linux内核提供了安全性、内存管理、进程管理、网络协议栈和驱动模型等核心系统服务并且linux也是硬件层与软件层之间的抽象层3游戏总体设计3.1游戏模块划分本游戏主要分为4个部分:游戏开始选择游戏难度玩家进货、定价游戏主画面游戏结束游戏具体的流程图如图3.1所示:图3.1玩家进入游戏首先看到开始界面选择开始游戏进入游戏天数选择界面游戏根据玩家选择的天数令玩家运行冷饮店相应的天数当玩家选择出游戏天数之后进入进货定价的管理界面在此界面玩家可以看到"冷饮店"主要出售2种货物:甜甜圈和冷饮甜甜圈需要玩家自己定义配方和出售价格然后选择每种配料进货多少冷饮需要玩家选择出需要进货数量和确定出售价格当全部设置完毕玩家选择"开始"按钮进入游戏主逻辑在游戏主逻辑中玩家可以根据购买顾客反应情况来调整售价并在不需要操作的情况下选择加快速度令游戏速度加快避免不必要的时间浪费游戏主逻辑计算一天从早上6点到晚上18点当游戏进行到18点的时候主逻辑画面会自动跳转到游戏进货、定价界面中去玩家进行下一天的进货设置最后当游戏运行天数与玩家选择天数相同时跳出提示框通知玩家在固定天数内赚的钱数并提示游戏结束选择是否重新开始或者退出程序3.2游戏设计逻辑"经营冷饮店"这款游戏的主要设计逻辑是基于为了更真实的模拟出在各种因素综合作用影响的情况下玩家是否能在时间和初始金额固定的情况下令一家"冷饮店"得到最大的利润游戏中为了增加游戏的复杂性和难度增加了天气商店声誉玩家自定义售价和甜甜圈配料选择等因素来影响顾客购买情况3.2.1天气影响因素游戏中天气会随机发生变化一共有四种天气:晴天雨天雪天和阴天顾客会随着天气的变化而改变购买需求当天气为晴天会有较多的顾客会购买商品并且购买冷饮的顾客会多于购买甜甜圈的顾客当天气为雨天购买商品的顾客数量会大幅度减少购买甜甜圈和冷饮的顾客基本比率为1:1当天气为雪天或者阴天购买商品顾客数量普通但是雪天购买甜甜圈的顾客大幅度增多阴天购买2种商品数量基本一致每一件商品都具有一定的腐败值这个数值顾客是看不到的但当商品腐败值到达一定程度就会提示顾客并把这部分商品的数量从库存里面去除天气情况会严重影响商品的腐败值晴天商品腐败严重当天没有售完的商品第二天都会腐败;雨天和阴天商品腐败值为晴天的一半雪天商品腐败值为晴天的三分之一而当当天商品没有卖完进入第二天销售时则首先出售的是玩家新进货的商品全部出售完毕才会出售之前没买完的商品玩家在进货期间物价会在一定范围内波动而这个范围会随着天气的变化而改变晴天、阴天物价普通雨天、雪天由于交通不便物价较高并且随着游戏时间的推移物价范围会缓慢上升3.2.2声誉影响因素声誉是一家"冷饮店"是否盈利的非常重要的一个影响因素每天"冷饮店"客流量基本相同天气会影响一部分顾客是否愿意购买商店内商品声誉是另一个会影响顾客是否购买商品的因素当商店声誉分为6个阶段10%以下、10%到20%、20%到40%、40%到60%、60%到80%与80%以上每个阶段顾客购买率都不一样例如:晴天商店声誉10%那么将有10%*(1+10%)的顾客会购买商品由此可见商店声誉的重要性而决定商店声誉主要为顾客购买商品前和购买商品后是否满意每个顾客购买商品之前会判断商品价格是否合理如果商品价格过高则顾客会觉得太贵不予购买并且对"冷饮店"的声誉会有一定的负面影响当顾客购买完商品会根据商品的质量与价格评判如果商品质量差和价格也较高则对"冷饮店"声誉影响不好如果商品的质量与价格都是一般可以接受则商店声誉不受如果商品性价比较高时"冷饮店"的声誉则会有正面的影响4 游戏设计4.1游戏需求分析4.1.1对功能的规定本游戏做开发的是基于Android的"经营冷饮店"游戏软件主要实现玩家可以在自己选定的时间内经营一家"冷饮店"并获得自己的最终利润"经营冷饮店"这款游戏需要实现主要功能如下:(1)游戏框架设计;(2)游戏中各个Activity之间实现数据传输;(3)顾客类的设计与实现(4)甜甜圈类的设计与实现(5)背景类的设计与实现(6)冷饮类的设计与实现(7)游戏主逻辑的实现(8)天气类的设计与实现(9)游戏的开始和退出功能实现4.1.2对性能的规定本游戏在设计上本着方便、使用及娱乐性高的宗旨在对界面进行设计过程中始终坚持清晰明了在性能方面能够实现效率高不易出错的有点由于是手机游戏对游戏的性能要求更加严格内存的占有量也必须有一定的限制游戏的主界面应该力求美观赏心悦目游戏触摸控制模块应做到易懂、易操作准确率高不易出错4.2游戏数据分析4.2.1游戏固定数据存储格式由于本游戏程序中需要存储的数据量较小所以本游戏中数据通过Android中的SharedPreferences来存储SharedPreferences主要通过key-value来保存数据SharedPreferences的数据总是保存在/data/data<package name>shared_prefs目录下面 SharedPreferences总是以XML格式保存XML格式文件是一个只有一个根节点的树状存储格式的文件相对于对一般文件的查找XML的查找速度显然更快表4.1为游戏中SharedPreferences中数据key-value的值:表4.1 key-value对照表数据名key-value值初值玩家选择天数dateNum(1)现在第几天NowdateNum1总资金sum_money 1000甜甜圈售价donut_money糖(库存)sugar_num面粉(库存)flour_num配料(库存)other_num糖(食谱)sugar_cook_num 1面粉(食谱)flour_cook_num 1配料(食谱)other_cook_num 1天气weather(2)声誉reputation饮料数量drinking_num饮料定价drinking_value 0当前已售甜甜圈sold_donut当前已售饮料sold_drink表4.1中(1)处玩家选择天数初值需要在玩家选择时赋值;(2)中天气的初值是游戏每次随机产生的4.2.2玩家进货价格生成在玩家进货、定价管理界面系统会随机产生不同商品的当前进货物价每种商品物价范围基本一致其前三天价格初始化都是1到6之间但随着时间的推移物价的波动会略微上调其计算方法如下:首先生成一个1-6的随机价格money判断天数如果是3天后那么money = money + money * ( nowDays / Days ) (4.1) 其中nowDays为当前天数Days为玩家选择的总天数4.2.3商品腐败值计算方法商品的腐败值每隔一天计算一次封装在donuts类和soft_drink类里每过一天商品腐败值会根据前一天天气状况来进行计算如果前一天天气是晴天则腐败值donut_decay或者drink_decay增加100如果前一天天气下雨或者阴天则腐败值donut_decay或者drink_decay增加50如果前一天天气为雪天则腐败值donut_decay或者drink_decay增加30而当腐败值大于等于100的商品则从库存里面删除4.2.4商店声誉计算方法影响商店声誉的主要是商品价格当商品为甜甜圈的时候商品配料也同样影响商品的声誉在生成顾客Person类的初始化中每个顾客类都会根据当天天气状况随机生成需要购买的商品之后随机生成最优商品价格和可以忍受的最贵商品价格如果商品时甜甜圈则还需要随机生成最优配料数和可以忍受的最低配料数在这里配料数是指玩家在开始售货之前设定的食谱中糖、面粉和配料数的总和随机生成的商品最优价格和可以忍受的最贵商品价格是在一定范围内生成的而这个范围是根据当前第几天来设定的各种数据生成的计算公式如下:首先随机生成数n数n的范围在8-15之间其次计算商品配料数m:m = sugar + flour + other (4.2)公式(4.2)中sugar代表食谱中的糖flour代表食谱中的面粉other代表食谱中的配料(1)饮料的最优价格计算公式:drinkminMoney = n + n * ( nowDays / Days ) (4.3) (2)饮料的可以忍受最贵价格计算公式:drinkmaxMoney = drinkminMoney * 1.5 (4.4) (3)甜甜圈最优价格计算公式:donutminMoney = n * m + n * ( nowDays / Days ) (4.5)公式(4.5)中因为甜甜圈是3种材料综合生成所以计算价格需要n*m(4)甜甜圈可以忍受最贵价格计算公式:donutmaxMoney = donutminMoney * 1.5 (4.6) 规定生成甜甜圈最佳配料数为13-25生成甜甜圈最低配料数为5-12之间则当此顾客准备购买饮料时需要先判断用户定价是否低于顾客预期可忍受的最贵价格如果价格不能忍受则商店声誉度reputation = reputation - 1并且顾客放弃购买此商品若低于顾客预期可忍受的最贵价格则判断是否低于或等于顾客预期的最优价格如果低于或等于最优价格则reputation = reputation + 1若顾客购买甜甜圈则分5中情况讨论:1)难吃:商品价格在顾客预期最优价格之内但是甜甜圈配料数低于最低配料数此时声誉减12)生气:商品价格在顾客可以忍受价格之间并且甜甜圈配料数低于最低配料数此时声誉减23)太贵:顾客购买前判断商品在其预期价格可以忍受价格之上则顾客放弃购买声誉减14)高兴:商品价格在顾客预期最优价格之内并且商品配料在顾客预期最佳配料之上则商店声誉加15)普通:不属于以上情况的即普通商店声誉不改变4.2.5顾客购买率计算方法顾客购买率主要根据商店声誉来计算的每天生成的顾客数量基本一致约为360人左右声誉最大值为100最小值为0当声誉小于10时10%的顾客会购买商品当声誉大于等于10小于20时20%的顾客会购买商品当声誉大于等于20小于40时30%的顾客会购买商品当声誉大于等于40小于60时40%的顾客会购买商品当声誉大于等于60小于80时50%的顾客会购买商品当声誉大于等于80时60%的顾客会购买商品5游戏具体设计与实现5.1游戏各Activity功能Android应用最重要、最常见的组成单元为Activity Activity对于Android相当于Servlet对于Web应用的作用Activity可以看做一个画面当建立一个新的Activity的时候其实相当于建立一个全新的画面这个画面有自己的生存周期统一由ActivityManager进行管理Activity的管理方式类似于栈最先启动的Activity最后关闭最后启动的Activity最先关闭5.1.1开始Activity开始Activity类名为Start_Activity其布局在布局文件中加载有一个按钮点击进入新Activity--选择Activity在开始Activity中背景音乐开启一直持续到游戏结束音乐大小用户可以用手机自带的音量调节键调节5.1.2选择Activity选择Activity类名为Choose_Activity由布局文件夹Layout下布局的xml文件进行布局主要功能为用户选择开店游戏天数SharedPreferences也在此Activity中进行初始化并存储在其中数据也在此处进行初始化5.1.3准备Activity准备Activity的类名为preActivity此类主要是用户进货、定价操作界面本类中也使用布局文件夹Layout下布局的xml文件进行布局在类里添加监听器和处理此类运用Android中TabHost进行分页设置把一个Activity分成两部分一部分为甜甜圈一部分为冷饮在甜甜圈和冷饮部分上方都可看到当前资本与游戏当天天数和开业后天气情况用户可以选择需要进货的商品选择完毕之后选择开业按钮即可如果选择错误想要重新选择则可以点击重置按钮则游戏会重置到之前没有选择时的状态甜甜圈和冷饮部分数据分别为甜甜圈类Donuts和冷饮类Soft_drink分类暂存数据当用户选择"开业"按钮时则之前用户选择的数据会提交到SharedPreferences的存储文件中去使得数据不会丢失5.1.4游戏进行Activity游戏进行Activity的类名为GamingActivity此类可以说是整个游戏的最重要部分此Activity主要加载了一个SurfaceView的类整个绘画背景天气顾客购买的动画和部分用户操作都封装在继承了SurfaceView的GamingSurfaceView中SurfaceView是Android中View类的子类View是一个超类几乎包含了所有屏幕类型每个View类都有一个绘画的画布SurfaceView主要用于刷新较频繁的动画、游戏绘图它是一个新起的单独线程而View则必须在UI主线程中更新画面在GamingSurfaceView中首先建立一个线程以定时刷新画面在刷新过程中每次调用Draw方法和logic方法在Draw方法中处理画图从背景开、建筑物、商店到顾客购买时间等顾客和背景的画图是把画笔和画笔当做参数传到Person类和Background类中在这两个类中分别都设置draw方法和logic方法这样使得画图的分工更加明确逻辑性更强在这个类中用户主要会观察顾客购买情况为了增加用户的互动性用户可以随时调整甜甜圈和饮料的出售价格同时用户可以点击调整速度按钮控制游戏速度的快慢以便于观察游戏中顾客的购买情况或者免于浪费更多的时间5.2游戏中动画原理实现5.2.1图片的加载Android中位图的渲染和操作主要是基于Bitmap的图形类来进行Android支持的图片格式有png、jpg、bmp等其中尤以png格式的图片更加方便可以通过修改图片调整图片的透明度Android的图片加载主要通过画布类Canvas来进行的Canvas有一系列的方法可以进行绘制图片本游戏中图片都是通过Canvas.drawBitmap()方法进行绘制的当图片过大或者过小时Canvas提供了一个缩放位图的函数对指定大小的矩形在画布指定位置上进行缩放但在操作前后需要加入save()和restore()两个方法分别用于保存当前画布状态和恢复上次保存画布的状态5.2.2顾客的走动和购买的实现顾客走动图片是一张包含顾客向右走动的所有动作帧每帧的大小相同顾客不同动作之间间距相同且除了顾客本身以外其他部分都为透明的png格式图片该图片如图5.1所示:图5.1首先参数m_walkCurrentFrame记录顾客当前走路是哪一帧顺序应该为0、1、2、1、0、2、1、0、2......然后获得图片的宽width则小人其中一帧的宽即为framew = width / 3再用Canvas方法scale()函数修改顾客的大小并用Canvas方法clipRect()设置一个宽高跟小人相同大小的可视区域画图的时候按照设置的可视区域画则顾客的另外2帧的图片部分就被屏蔽了然后用drawBitmap方法进行绘制其中注意要根据当前m_walkCurrentFrame是多少来绘制例如当m_walkCurrentFrame为1的时候即要显示中间那帧不能直接使用需要显示图片的xy坐标要使中间的图片的左上角坐标为xy则要从x- framewy处开始绘制这样由于之前已经剪切了一个可视区域则图片横坐标x- framew到x处图片是看不到的x+framew到x+framew*2是看不到的同理顾客购买物品的时候也是使用了一个包含顾客购买动作的5帧动作帧图片在此不再介绍5.2.3下雨、下雪的背景实现下雨背景的实现相当于滚动背景的实现模拟雨水的图片为一张png的用白色画笔画出长短不一线段其他地方都是透明的图片然后生成2个Bitmap对象图片都加载雨水的图片第一张图片随着时间推移向下移动5个单位第二张图片在屏幕正上方紧接着第一张每次也移动5个单位当任意一张图片移动到屏幕之外把该张图片位置放到屏幕正上方继续向下移动5个单位下雪背景的与下雨背景的实现基本相同仅仅是图片不同在此不作具体描述6游戏实现及效果如图6.1为游戏开始界面点击图中"开始游戏按钮"进入选择游戏天数界面图6.1如图6.2所示为用户选择天气界面其中有5个选项可供选择用户可按照自己意愿选择游戏天数点击按钮后进入游戏准备界面图6.2如图6.3与图6.4所示在游戏准备界面中用户可以选择冷饮或者甜甜圈选项卡在甜甜圈和冷饮选项卡中用户可以根据第二天天气情况决定进货数量和食谱想要增加数量点击"+"按钮即可如果用户想要重新选择。