Android综合程序设计(2048游戏)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
山东轻工业学院实验报告成绩
实验项目名称实验七、 Android综合程序设计(2048游戏)
一、实验目的
通过进行一个较为完整的Android应用程序开发,学习综合运用课程所学的相关Android开发知识的,进行移动软件设计的相关能力。在模拟软件开发的过程中,掌握从问题发现、系统分析、系统规划到代码实现中每一步所要做的工作。掌握实际软件开发的过程和方法。
二、主要仪器设备、试剂或材料
微型计算机;JDK、eclipse、ADT、Android SDK等软件包
三、实验内容
运用Android制作一个简单的2048小游戏。
2048游戏的制作属于电子游戏中的益智类小游戏,它做到了娱乐性、趣味性、教育性相统一。益智类的游戏即是需要去开动大脑去思考从而获得游戏的胜利。简单的益智类游戏可以使玩家在娱乐中不断的开发大脑。这样一来就实现了在娱乐中学习
四、程序设计思路、运行及及结果分析
设计思路:
(1)初始化
进入游戏,初始化4*4表格,并随机产生两个数字(2或者4);二维数组this.tables 表格循环存入数据;random1, random2 ,random11, random22四个随机数可以确定两个2的xy位置;
方法newNumber里面,根据位置i,j和级别num可以确定一个新的数字;创建背景cell和cell上面的数字标签cellLabel;并根据num确定是否显示cellLabel;最后给cell关联一个data数据;特别说明这里的number:num不是精灵上面的数字而是精灵的级别,比如number=11 则数字是1024。
(2)游戏结束的判断
每次发生卡片移动,都要检查游戏还能否继续,是否已经结束。使用函数CheckComplete()完成游戏是否失败的检查。
(3)游戏的计分
在卡片的每一次移动的时候判断是否有两个相同数字进行相加,凡是有相见的两个数字其相加所得的和需要存入计分中,其中如果游戏获得了最高分要对最高分进行保存。public class BestScore {
private SharedPreferences sp;
public BestScore(Context context){
sp = context.getSharedPreferences("bestscore", context.MODE_PRIV ATE);
}
public int getBestScore(){
int bestscore = sp.getInt("bestscore", 0);
return bestscore;
}
public void setBestScore(int bestScore){
Editor editor = sp.edit();
editor.putInt("bestscore", bestScore);
mit();}}
1、设计页面
在设计整个2048游戏之前先得设计一个2048的游戏界面,只有有了游戏界面,才能够进行2048这一款游戏的下一步设计,这是创建2048小游戏的最基础的步骤。
2048这一款游戏的界面是4*4方格的,于是就需要在界面上设置4*4的方格,有了这些方格之后才能在方格上面装卡片(Card),然后才能继续游戏。
2、设计游戏
在2048游戏的界面设计好了之后,要求完成最核心的玩法就是卡片在于界面上4*4的移动,于是下一步的操作就是对卡片的具体设置,以下是一部分关键代码。
(1)创建一个卡片
private Card getCard(int num){
Card c;
if (cards.size()>0) {
c = cards.remove(0);
}else{
c = new Card(getContext());
addView(c);
}
c.setVisibility(View.VISIBLE);
c.setNum(num);
return c;
}
(1)类Card继承了FrameLayout,目的是作为游戏中的卡片,卡片各个数字和样式的
实现:
public void setNum(int num) {
this.num = num;
if (num<=0) {
label.setText("");
}else{
label.setText(num+"");}
switch (num) {
case 0:
label.setBackgroundColor(0x00000000);//透明色
break;
case 2:
……
default:
label.setBackgroundColor(0xff3c3a32);
break;
} }
}else{
c = new Card(getContext()); addView(c); }
c.setVisibility(View.VISIBLE); c.setNum(num);
return c; }
(2) 类Card继承了FrameLayout,目的是作为游戏中的卡片,卡片各个数字和样式的实现:
public void setNum(int num) {
this.num = num;
if (num<=0) {
label.setText("");
}else{
label.setText(num+"");}
switch (num) {
case 0:
label.setBackgroundColor(0x00000000);//透明色
break;
case 2:
…… default:
label.setBackgroundColor(0xff3c3a32);
break; } }
(2)卡片设计好了之后根据游戏要求判断在某一操作下同一方向上的卡片是否可以
相加,可以相加的部分进行数据合并。//合并相同数据
int addscode = 0;
for(int p=0;p<4;p++)
{ for(int q=3;q>0;q--){
if(arrays[q][p]==arrays[q-1][p]&&arrays[q][p]!=0){
flag_move = true;
rrays[q][p]+=arrays[q-1][p];
addscode+=arrays[q][p];
arrays[q-1][p]=0;
q--;
}}}
3、事件监听
对于2048这个游戏经过之前对游戏界面的设计、对游戏元素卡片的创建和定义好了之后,最终目的是要使我们能够控制卡片进行移动,目标是使卡片能够根据我们的命令进行向上、向下、向左、向右的四个方向上的移动,这个需要加上4个方位的事件监听。
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
float X=e2.getX()-e1.getX();
float Y=e2.getY()-e1.getY();
final int FLING_Min_DISTANCE =50;
if(X>FLING_Min_DISTANCE&&Math.abs(velocityX)>Math.abs(velocityY)){
toRight();
}else if(X<-FLING_Min_DISTANCE&&Math.abs(velocityX)>Math.abs(velocityY)){ toLeft();
}else if(Y>FLING_Min_DISTANCE&&Math.abs(velocityX) }else if(Y<-FLING_Min_DISTANCE&&Math.abs(velocityX) toUp(); } return false; } 4、结果展示 游戏开始界面