1、 学校代码: 10128 学 号: 201320201007 嵌入式系统综合设计说明书 题 目:基于android平台的数字移动乐游戏 学生姓名:李乐峰 学 院:信息工程学院 班 级:计算机13-1班 指导教师:刘志强 王晓强 张志华 田雨 二 〇 一 六 年 七 月 基于android平台的数字移动乐游戏 摘要 现如今,基于android平台的游戏已经慢慢的渗透了我们每个人的生活中,扮演着越来越重要的角色。可以说,随着手机软件的迅猛发展,手机游戏已不仅仅是一个
2、简单的供人们消遣、娱乐的活动,它已成为一种潮流、一种文化,就如同如今的我们离不开手机一样,几乎人们的每一个手机上都会下载一款游戏。 基于android平台的数字游戏—2048,它是一款益智类的游戏,集娱乐性、趣味性、教育性于一身。益智类游戏有助于开发人类的大脑,通过开动大脑去获取游戏的胜利。这样通过娱乐获取知识,做到了在娱乐中学习,娱乐中成长。 本文通过对基于android平台的数字移动乐游戏的初步研究,确定了开发一款2048游戏。该款游戏主要实现了用户通过注册登录后进入游戏界面,然后进行向左、右、上、下滑动,相同的卡片进行相加,游戏结束时得到相应的分数,同时可以看到自己的历史最高分,以及
3、排行榜功能,通过这些功能,使得用户在如今倍感压力的社会下,拥有一丝轻松之感。 关键词:android;游戏;数字 Based on the android platform of digital mobile games Abstract Today, based on the android platform game has slowly infiltrated each person's life, plays a more and more important role. so to speak, with the
4、 rapid development of Internet, mobile phone games is not only a simple diversion, a form of entertainment for people, it has become a trend, a kind of culture, just as we cannot leave a mobile phone now, almost every phone people download a game. Based on the number of the android platform game -
5、2048, it is a puzzle games, more interesting and entertaining and educational. Educational games help to develop the human brain, through the brain to get the victory of the game. Such access to knowledge through entertainment, accomplish the learning in the entertainment, entertainment. This artic
6、le through to the preliminary research on the digital game based on android platform, determine the development of a 2048 game. Games mainly realizes the user login through registration after entering the game interface, and then to the left, right, up, down, the same card in addition, to obtain the
7、 corresponding score at the end of the game, at the same time as you can see their own history, and the ranking function, through these function, makes the users in today under the pressure of society, have a relaxed feeling. Key Words:Android;Game;Digit 目录 第一章 设计任务与要求 1 1.
8、1设计任务 1 1.2 设计要求 1 第二章 设计方案 3 2.1 设计思想 3 2.2 设计功能 4 第三章 软件设计 7 3.1 布局设计 7 3.1.1 整体布局 7 3.1.2 设计游戏布局 7 3.2 主界面的实现 8 3.2.1 欢迎界面 8 3.2.2 登录界面 9 3.2.3 游戏界面 10 3.3 总体结构 12 3.3.1 系统模块流程图 12 3.3.2 登录模块 12 3.3.3 注册模块 13 3.3.4 游戏逻辑模块 13 3.3.5 排名模块 14 3.3.6 其他功能模块 15 3.4 源程序清单及注释 15 3.4.1
9、 欢迎界面模块 15 3.4.2 登录模块 16 3.4.3 注册模块 18 3.4.4 游戏逻辑模块 19 3.4.5 排名模块 27 3.4.6 其他功能模块 28 第四章 调试过程 30 4.1 系统调试 30 4.1.1 游戏整体调试 30 4.1.2 游戏模式调试 30 4.2 实验步骤 30 4.3 遇到的问题 31 4.3.1 环境构建 31 4.3.2 软件编程 31 4.4 解决的方法 31 4.4.1 环境搭建 31 4.4.2 软件编程 31 4.5 调试结果 32 第五章 总结 35 致谢 36 参考文献 37 第一
10、章 设计任务与要求 1.1设计任务 基于android平台的数字移动乐游戏,利用Eclipse集成开发环境+SDK+ADT环境,通过查看虚拟机,开发出一款益智类游戏。其设计任务如下: 1. 实现由欢迎界面到登录界面到游戏界面的跳转。 知识点:登录欢迎界面,activity跳转。 2. 在登录界面可以进行用户登录,可以包含用户名,便于实现排行榜的功能。 3. 进入游戏界面后可对屏幕中的卡片进行向左、右、上、下滑动,实现相同卡片的相加,从而得到相应的得分。 4. 实现重新开始游戏,结束的判断。 5. 成绩排行榜功能,实现最高成绩或前三名。 知识点:显示可以用ListVi
11、ew或TextView;游戏结束或开始可以让用户输入用户名;游戏成绩可以存储在文件或偏好设置中。 对各个用户的最高分进行显示,即排行榜功能,可利用一个button按钮来实现。同时每一个用户在玩游戏时可以看到自己的历史最高分。 6. 设计一个退出按钮。 第一次点击退出按钮,提示(并不退出程序);第二次点击退出按钮,成功退出程序。知识点:程序结束,activity结束;获取当前时间;button的onclick()事件;toast提示框。 1.2 设计要求 对项目实现分析、编码、测试等,主要实现功能包括如下: 1.实现界面的设计,通过自定义TextView以FrameLayout实现;
12、 2.完成不同卡片的数字移动; 3.对分数的总结,以及游戏重新开始,结束的判断; 4.随机数字产生等。 环境要求:操作系统:Windows 10 平台:Eclipse集成开发环境+SDK+ADT 开发语言:Java 文档环境:Windows Office 第二章 设计方案 2.1 设计思想 设计游戏界面,利用linearlayout线性布局,嵌套三个linearlayout,嵌套的第一个linearlayout用于显示得分,第二个linearlayout显示历史最高分,第
13、三个linearlayout中设计三个button按钮,实现重新开始、排行榜和退出功能。其中在游戏界面中间设计一个4*4的表格,采用自定义控件。 设计自定义控件时,首先要创建一个card类继承FrameLayout帧布局,通过card类定义每一个小卡片。然后再创建一个类继承自GridLayout表格布局,在其中实现屏幕显示16个小卡片,并可以在游戏开始时产生两个随机数。 在设计2048游戏最核心的就是算法的实现: 1. 在游戏开始时可以随机生成数字2或4,生成0时不显示是将卡片为0时的背景色与定义每一个小卡片的背景色相同。 2. 判断上下左右滑动。 确定手按下的那个位置和抬起手
14、的位置之间的位移量,为了避免不仅限于平移,所以在判断上下左右滑动时需要先判断在x和y轴方向谁的位移量的绝对值大,若x(y)轴位移量的绝对值大,则再进行判断,若位移量为负数,则向左(下)滑动;如果位移量为正,则向右(上)滑动。 3. 实现上下左右滑动。 其基本原理是:以向左滑动为例讲解,其他的方向基本相似。左右是对于列进行判断,上下是对于行进行判断。当判断是向左滑动时,主要对列进行判断。除掉第一列以外的卡片,判断右边是否存在一个大于零的卡片,如果存在,再判断其相邻左边的卡片是否为零如果为零,则将左边的卡片的值置为右边卡片的值,并将右边卡片清零;如果相邻左边的卡片与右边卡片值相同,则将左边卡片
15、的值乘2。 向左可以移动有两个条件:(1)右侧卡片不为零,左边为零,则可直接平移到左边。(2)左侧卡片于右侧卡片大小相同,则将左侧卡片乘2,右边清零。 此外,在设计基于android平台的数字移动乐游戏,除了核心算法以外其他基本设计如下: 1. 同时具有记录分数功能。 游戏通过上下左右滑动,将在游戏相同卡片情况下的卡片累加起来,得到相应的得分。在MainActivity类中增加就和函数,设置清零函数。 2. 游戏可以终止。 当游戏出现16个卡片全被铺满且相邻两个卡片之间不相同,则游戏结束。 3. 重新开始游戏。 直接调用游戏开始游戏的函数,并将分数清零。 4. 退出游戏
16、 第一次点击退出按钮,提示(并不退出程序);第二次点击退出按钮,成功退出程序。利用Handler第一次点击距离第二次点击按钮时间延迟在2秒钟内,则退回到桌面,否则不退出。 5. 游戏排行榜功能。 首先说明一下:排行榜功能,实现了对于所有用户的历史最高分进行排名。取得前三的用户以及所对应的最高成绩。 将用户和历史最高分数通过getString()方法读取出来,分别放到两个数组里,然后进行对历史最高分进行排序。排序时同时将账户名进行调换,用户最大成绩以及相应的用户,然后通过ListView显示出来。此过程需要在游戏界面设计一个button按钮,点击后跳转到另一个activity页面,将所
17、有用户的成绩排序显示出来。 6. 用户注册和登录。 注册:用户可以进行注册有三个条件: (1)得到已经存在的用户数量,如果为为空,直接进行注册。不为空进行第二步。 (2)通过查找已经存在的用户名,该用户名不存在,则可以进行注册。 (3)输入的用户名和密码不为空,则可以进行注册。 通过偏好设置,将注册的用户名和密码保存在user中,同时记录number的个数。 登录:主要通过注册得到的用户信息与登录的信息进行比较,账户密码均相同则登录成功,执行跳转进入游戏界面。否则提示密码错误或用户不存在。 2.2 设计功能 基于android平台的数字游戏主要提供的功能如下: 1
18、 用户点击此APP进入欢迎界面,间隔2s后进入用户注册登录界面。 通过编写welcome.xml以及编写一个welcome.java继承activity父类,通过使用使用Handle对象处理handleMessage方法,利用intent实现从本界面经过2秒钟的时间跳转到user界面。 在界面中设置宽高为match_parent,通过如下代码插入图片。 android:background="@drawable/xmb" 2. 登录成功后,进入游戏界面。 登录界面保存数据采用偏好设置,首先要对用户进行保存。通过SharedPreferences对象的edit()方法,来获取E
19、ditor对象;然后调用Editor对象的put()方法把数据存放到SharedPreferences对象中。put()方法有两个参数,第一个是存储数据的键信息,第二个是存储数据的值信息。最后要调用Editor对象的commit()方法来把数据保存到XML文件中,如果不调用commit()方法数据是不会写入到文件中的。然后要调用SharedPreferences对象的get()方法来读取,该方法有两个参数,第一个是要读取数据的键信息,第二个是默认返回值,即如果没有读取到相关数据,可以使用这个值作为默认值返回。 从登录界面进入游戏界面采用intent跳转。 3. 开始游戏,同时记录得分。
20、记录分数只需要将在向上下左右滑动时,在左边卡片相加的结果累加起来即可。那么需要编写一个求和函数add(int s),最后将求得的score显示出来。 4. 具有重新开始游戏功能。 编写一个startgame()函数,将16个卡片清零,并随机生成两个数字2或4,分数清零。 5. 具有记录历史最高分功能。 编写一个判断函数,首先需要当前的历史最高分读取出来,然后与游戏结束所得道的分数进行比较,小于则将游戏结束所得的分数保存在某个用户下的max1中,否则不变化。 6. 具有游戏结束功能并在游戏结束时进行提示是否重新开始。 编写一个游戏结束函数,判断游戏结束如在设计思想中提到的,提示重新开
21、始利用AlertDialog对象调用方法实现。 7. 具有排行榜功能,对每个用户的最高成绩排序显示出来。 设计两个数组,一个用于记录用户账户,另一个用于记录该用户得到的历史最高分。通过偏好设置将每一个用户名记录在用户数组里,每一个用户的最高分记录在成绩数组里,通过下标相同确定每一个用户所对应的成绩。然后利用冒泡排序对成绩进行比较,显示出来。 8. 具有退出功能。 第一次点击退出按钮,提示(并不退出程序);第二次点击退出按钮,成功退出程序。 在这个功能,利用Handler,第一次点击距离第二次点击按钮时间延迟在2秒钟内,则退回到桌面,否则不退出。
22、 第三章 软件设计 3.1 布局设计 3.1.1 整体布局 首先是进入欢迎界面,再进入用户登录界面,最后进入游戏界面。需要在res/layout建立welcome.xml,user.xml,activity _main.xml文件。在AndroidManifest.xml中依次进行增加活动,并仅设置welcome.xml为程序入口。 图3.1.1 整体布局 3.1.2 设计游戏布局 采用linearlayout线性布局,规定最外层线性布局的方向为垂直方向,将所有的控件处于同一列中。嵌套三
23、个linearlayout和一个自定义控件。第一个linearlayout布局方向为水平,且包含两个textview文本视图,一个显示“成绩:”,另一个计算得分;第二个linearlayout布局方向也为水平,同样包含两个textview文本视图,一个显示“历史最高分:”,另一个显示最高的分数;中间加了一个自定义的gridlayout布局,形成4*4的表格;最后一个linearlayout布局方向为水平,包含三个按钮:第一个是重新开始,第二个是排行榜,第三个是退出按钮。 图3.1.2 设计游戏布局 3.2 主界面的实现 3.2.1
24、欢迎界面 1.本界面主要通过编写welcome.xml以及编写一个welcome.java继承activity父类,通过使用使用Handle对象处理handleMessage方法,利用intent实现从本界面经过2秒钟的时间跳转到user界面。 2.在界面中利用设置宽高为match_parent,通过如下代码插入图片。 android:background="@drawable/xmb" 图3.2.1 欢迎界面 3.2.2 登录界面 登录界面采用线性布局方式,嵌套了三个l
25、inearlayout。第一个linearlayout包括一个textview,显示账户;一个editText输入账户名。第二个linearlayout同样包括一个textview显示密码;另一个editText输入密码;最后一个linearlayout包括注册和登录两个按钮。通过点击两个按钮可以实现实现相应的功能。点击登录通过两个activity的跳转,实现从用户界面跳转到游戏界面。 图3.2.2 登录界面 3.2.3 游戏界面 本界面通过利用linearlayout线性布局,嵌套三个linearl
26、ayout,嵌套的第一个linearlayout用于显示得分,第二个linearlayout显示历史最高分,第三个linearlayout中设计三个button按钮,实现重新开始、排行榜和退出功能。其中在游戏界面中间设计一个4*4的表格,利用gridlayout布局实现。 通过布局的结合使得游戏界面分为三部分,上边为记录游戏所得分数以及历史最高分,中间用于显示16个卡片,实现游戏的正常运行。最下边为三个按钮,实现重新开始游戏,查看排行榜,退出游戏。点击排行榜,跳转到另一个界面,查看最高分数的前三名。点击退出游戏,第一次提示再按一次退出,在间隔2秒钟按下第二次则退出有游戏,释放相应的资源
27、 图3.2.3 游戏界面 3.3 总体结构 3.3.1 系统模块流程图 系统流程图如图3.3.1: 图3.3.1 系统模块流程图 3.3.2 登录模块 图3.3.2 登录模块流程图 3.3.3 注册模块 图3.3.3 注册模块流程图 3.3.4 游戏逻辑模块 图3.3.4
28、判断滑动方向模块图 图3.3.5 游戏逻辑模块 3.3.5 排名模块 图3.3.5 排名模块流程图 3.3.6 其他功能模块 图3.3.6 退出流程图 3.4 源程序清单及注释 3.4.1 欢迎界面模块 public class Welcome extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { //生命周期,回调函数
29、 super.onCreate(savedInstanceState); setContentView(R.layout.welcome); mHandler.sendEmptyMessageDelayed(0, 2000); } Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub
30、 super.handleMessage(msg); Intent intent = new Intent(); intent.setClass(Welcome.this, User.class); startActivity(intent); finish(); } }; } 该模块主要利用mHandler.sendEmptyMessageDelayed(0, 2000),超过2秒钟进入handleMessage方法中执行跳转,通过利用intent执行 intent.setClass(Welco
31、me.this, User.class);startActivity(intent);使得从welcome.class跳转到User.class界面,并释放资源。
同时需要在welcome.xml中插入图片。代码如下:
33、ber=sharedPreferences.getString("number", "");
int a,b;
if(number==""){a=0;}//a用户个数
else {a=Integer.parseInt(number);} //再注册记录用户个数
String name;
String mima;
for(b=0;b 34、 "");
String jmima=sharedPreferences.getString(mima, "");
if(jname.equals(et1.getText().toString())||jmima.equals(et2.getText().toString())){
if(jname.equals(et1.getText().toString())&&jmima.equals(et2.getText().toString())){
a1=b;
finish();
Intent intent =ne 35、w Intent(User.this,MainActivity.class);
startActivity(intent);
break;
}
else if(jname.equals(et1.getText().toString())){
Toast.makeText(User.this, "密码错误", Toast.LENGTH_SHORT).show();
break;
}
} }
if(b==a)
Toast.makeText(User.this, "账户未注册", 36、 Toast.LENGTH_SHORT).show();
}
});
点击登录按钮,通过点击监听,判断输入的账户和密码对于已经保存的账户和密码是否一致,如果一致则通过跳转进入游戏界面;如果登录名不相同,则显示账户未注册;登录名相同,密码不同。则提示密码错误。
3.4.3 注册模块
实现注册的部分代码:
bt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String name;
String m






