基于Android平台的手机俄罗斯方块分析设计文档00_第1页
基于Android平台的手机俄罗斯方块分析设计文档00_第2页
基于Android平台的手机俄罗斯方块分析设计文档00_第3页
基于Android平台的手机俄罗斯方块分析设计文档00_第4页
基于Android平台的手机俄罗斯方块分析设计文档00_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1 绪论41.1 课题背景41.2 开发平台相关介绍42.1 游戏功能分析53.1游戏执行总流程63.2游戏界面设计73.3方块形状设计74游戏功能模块算法分析84.1游戏方块控制功能84.2游戏显示更新功能114.3游戏速度更新功能114.4游戏积分等级功能125游戏规则126游戏运行截图137附加核心代码13基于Android平台的手机俄罗斯方块分析设计文档1 绪论中国手机用户已超过6亿,具有庞大的潜在用户群,便携性,对于Android开放式平台,技术门槛低,手机游戏前景广阔手机游戏业务全面崛起:手机游戏的市场规模已经超过了手机音乐,成为名副其实的“无线娱乐产业之王”单机游戏占据较大市

2、场份额:受到网速和资费的制约,目前手机网游份额较小,单击游戏占据市场主要份额。手机游戏成为中国移动通信热点:运营商将手机游戏作为新的业务增长点;众多无线运营商、手机制造商、平台技术提供商和游戏开发商的大力投入运营模式是手机游戏发展的关键:如何构建移动运营商与SP、CP 之间良好的产业合作关系,如何建立适合手机网络游戏发展的收费模式和推广渠道,是摆在产业界面前的重要课题 。1.1 课题背景 俄罗斯方块是家喻户晓的益智小游戏,它由俄罗斯人阿列克谢帕基诺夫在1984年6月利用空暇时间所编写的游戏程序,故此得名,俄罗斯方块的基本规则是移动、旋转、和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行

3、并且消除得分。它看似简单却变化无穷,俄罗斯方块上手及其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。由于俄罗斯方块具有的教学性、动态性与知名度,所以常拿来做游戏程序设计的练习教材。以前玩的都是别人写好的,决心自己做一个,并与别人一起分享这份快乐,同时也运用下自己所学知识。1.2 开发平台相关介绍 Android 有丰富的功能,因此很容易与桌面操作系统混淆。Android 是一个分层的环境,构建在 Linux 内核的基础上,它包括丰富的功能。UI 子系统包括:窗口,视图。用于显示一些常见组件(例如编辑框、列表和下拉列表)的小部件。Android 包括一个构建在 WebKit 基础上的可

4、嵌入浏览器,iPhone 的 Mobile Safari 浏览器同样也是以 WebKit 为基础。Android 提供多种连接选项,包括 WiFi、蓝牙和通过蜂窝(cellular)连接的无线数据传输(例如 GPRS、EDGE 和 3G)。Android 应用程序中一项流行的技术是链接到 Google 地图,以便在应用程序中显示地址。Android 软件栈还提供对基于位置的服务(例如 GPS)和加速计的支持,不过并不是所有的 Android 设备都配备了必需的硬件。另外还有摄像支持。过去,移动应用程序努力向桌面应用程序看齐的两个领域分别是图形/媒体和数据存储方法。Android 通过提供对 2

5、D 和 3D 图形的内置支持,包括 OpenGL 库,解决了图形方面的挑战。由于 Android 平台包括流行的开源 SQLite 数据库,因此缓解了数据存储的负担。图 1 显示一个简化的 Android 软件层次结构。应用程序架构。如前所述,Android 运行在 Linux 内核上。Android 应用程序是用 Java 编程语言编写的,它们在一个虚拟机(VM)中运行。需要注意的是,这个 VM 并非您想象中的 JVM,而是 Dalvik Virtual Machine,这是一种开源技术。每个 Android 应用程序都在 Dalvik VM 的一个实例中运行,这个实例驻留在一个由 Linu

6、x 内核管理的进程中2 游戏分析俄罗斯方块游戏游戏方块控制功能游戏显示更新功能游戏速度更新功能游戏积分等级功能2.1 游戏功能分析2.1俄罗斯方块功能描述图(1)游戏方块控制功能:通过条件判断,实现对游戏方块的左移,右移,快速下降,自由下落,旋转功能,以及行满消除的功能。(2)游戏显示更新功能:当游戏方块左右移动,下落,旋转时,要清除先前的游戏方块,用新坐标重绘游戏方块,当消除满行时,要重绘游戏地板的当前状态。(3)游戏速度更新功能:当游戏玩家的积分达到某一条件时,则下降速度会随之增长(4)游戏积分等级功能:当游戏玩家的分数到达一定值时,游戏等级会随之提高。3总体设计Start初始化界面随机显

7、示方块组合下落是否停止方块匀速下落能否出现下一个方块组合End3.1游戏执行总流程3.1游戏执行总流程图3.2游戏界面设计 初始设计精确制图 布局设计最终设计实现图3.3方块形状设计如图最终设计实现图,中间显示20行10列的网格,表示主界面,则设置int Array_FKXZ = new int2010,数组Array_FKXZ中值为1,则将对应的方块染成红色,值为0,则染成白色;如若Array_FKXZ184=1;Array_FKXZ174=1;Array_FKXZ175=1;Array_FKXZ165=1;则对应方块染成红色时,将显示如下图样式:以此方法,即可将7中不同形状的方块组合显示出

8、来。4游戏功能模块算法分析4.1游戏方块控制功能对方块控制,实际都是对二维数组Array_FKXZ的控制,左右移动、自由下落、旋转分别由函数left(Canvas canvas)、right(Canvas canvas)、FreeDown(Canvas canvas)、up(Canvas canvas),具体实现为:public void FreeDown(Canvas canvas)/canvas.drawCircle(300, 300, 50, BottomPaint);for(int x=0;x20;x+)for(int y=0;y10;y+)if(Array_FKXZxy=1)int

9、temp=0;temp=x-1;Array_FKXZxy=0;Array_FKXZtempy=1;Array_tempxy=0;Array_temptempy=1;/这里有可能会影响旋转if(temp=0)Dstop = true;Lstop=false;Rstop=false;time=1000;else if(Arraytemp-1y=1)Dstop=true;Lstop=false;Rstop=false;time=1000;for(int x=0;x20;x+)for(int y=0;y10;y+)if(Dstop=true&Array_FKXZxy=1)Arrayxy=Array_F

10、KXZxy;Array_FKXZxy=0;DrawSquare2(x, y,canvas);scoreAdd();public void left(Canvas canvas)for(int x=1;x20;x+)for(int y=0;y10;y+)if(Array_FKXZxy=1)int temp=0;temp=y-1;Array_FKXZxy=0;Array_FKXZxtemp=1;if(temp = 0)Lstop = true;for(int x=0;x20;x+)for(int y=0;y=0;x-)for(int y=9;y=0;y-)if(Array_FKXZxy=1)int

11、 temp=9;temp=y+1;Array_FKXZxy=0;Array_FKXZxtemp=1;if(temp = 9)Rstop = true;for(int x=0;x20;x+)for(int y=0;y10;y+)DrawSquare2(x, y,canvas);public void up(Canvas canvas)Lstop=false;Rstop=false;int xz = new int42;int temp = new int33;int temp1 = new int33;int xx=0,countX=1,countY=1,cx=0,cy=0,cx1=0,cy1=

12、0,cy2=0;for(int x=0;x20;x+)for(int y=0;y10;y+)if(Array_FKXZxy=1)xzxx0=x;xzxx1=y;xx+;for(int i=1;ixzi-10)countX+;if(xzi1xzi-11)countY+;if(countX=3)if(xz10xz00)cx=xz10;elsecx=xz20;for(int i=1;ixzi1)xzi1=xzi-11;cy=xz31;if(countY=3)if(xz11xz01)cy=xz11;elsecy=xz21;for(int i=1;ixzi0)xzi0=xzi-10;cx=xz30;cx

13、1=cx;cy1=cy;cy2=cy;if(cy=9)/贴近又边界,不能旋转if(countX=3|countY=3)for(int i=0;i3;i+)for(int ii=0;ii3;ii+)tempiii=Array_FKXZcx+1cy-1;cy+;cy=cy1;cx-;for(int i=0;i3;i+)for(int ii=0;ii3;ii+)temp1ii2-i=tempiii;for(int i=0;i3;i+)for(int ii=0;ii3;ii+)Array_FKXZcx1+1cy1-1=temp1iii;cy1+;cy1=cy2;cx1-;else if(countX=

14、4)for(int i=0;i4;i+)Array_FKXZxzi0xzi1=0;Array_FKXZxz00xz01+=1;else if(countY=4)for(int i=0;i4;i+)Array_FKXZxzi0xzi1=0;Array_FKXZxz00+xz01=1;for(int x=0;x20;x+)for(int y=0;y10;y+)DrawSquare2(x, y,canvas);4.2游戏显示更新功能当方块发生变化,左右移动、下落、旋转时,界面都需更新显示,即发生相应动作后,就重绘,执行DrawSquare2(int x,int y,Canvas canvas)4.3

15、游戏速度更新功能游戏速度指方块自由下落的速度,这里方块下落是在FDown这个进程中执行的,handler.postDelayed(FDown, time)中的第二个参数time指下降速度,将time值设置变小,下降速度就会随之加快。4.4游戏积分等级功能游戏玩家将一行消除时,相应得到100积分,并在界面显示,然后积分每增长1000,等级加1,并在界面显示public void scoreAdd()int count=0;for(int x=0;x19;x+)for(int y=0;y10;y+)if(Arrayxy=1)count+;if(count!=10)count=0;else if(c

16、ount=10)System.out.println(count);score+=100;/积分加100count=0;for(int i=x;i19;i+)int temp=i;for(int ii=0;ii10;ii+)Arrayiii=Arraytemp+1ii;if(score!=0&score%1000=0)lv+;/等级加15游戏规则玩家通过点触虚拟键盘,左右控制方块左右移动,按上代表旋转,按下代表加速向下移动,每满一行消除,获得相应积分100,积分每增长1000,等级加1,游戏速度加快6游戏运行截图7附加核心代码package com.yarin.android.Examples

17、_05_02;import ;import ;import ;import ;import ;import ;import ;import ;public class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable/控制循环booleanmbLoop= true;/定义SurfaceHolder对象SurfaceHoldermSurfaceHolder= null;int time=1000;intmiCount= 0;inty= 50;int scanX = 0;int Array

18、= new int2010;int Array_FKXZ = new int2010;int Array_temp = new int2010;int Array_next = new int44;int score = 0;int lv=0;int random1,random;Boolean Dstop=true,Lstop=false,Rstop=false;private Paint FKPaint,WQPaint,TPaint,TopPaint,BottomPaint,paint,ClearPaint = null;private Canvas canvas = null;publi

19、c GameSurfaceView(Context context)super(context);/ 实例化SurfaceHoldermSurfaceHolder = this.getHolder();/ 添加回调mSurfaceHolder.addCallback(this);this.setFocusable(true);mbLoop = true;/ 在surface的大小发生改变时激发public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)/ 在surface创建时激发publ

20、ic void surfaceCreated(SurfaceHolder holder)/开启绘图线程new Thread(this).start();/ 在surface销毁时激发public void surfaceDestroyed(SurfaceHolder holder)/ 停止循环mbLoop = false;public void init()int l=106;int r=131;int b=652;int t=627;int lx=374, rx=399, tx=4, bx=29;canvas= mSurfaceHolder.lockCanvas();FKPaint = ne

21、w Paint();WQPaint = new Paint();TPaint = new Paint();TopPaint= new Paint();BottomPaint = new Paint();paint = new Paint();ClearPaint = new Paint();ClearPaint.setColor(Color.BLACK);paint.setColor(Color.RED);TopPaint.setColor(Color.WHITE);TopPaint.setStrokeWidth(2);TopPaint.setTextSize(37);canvas.drawL

22、ine(0, 114, 480, 114, TopPaint);canvas.drawLine(0, 57, 240, 57, TopPaint);canvas.drawLine(240, 0, 240, 114, TopPaint);canvas.drawLine(0, 652, 480, 652, TopPaint);canvas.drawRect(0, 0, 240, 55, ClearPaint);canvas.drawText(分数:+score, 30, 42, TopPaint);canvas.drawRect(0, 59, 240, 112, ClearPaint);canva

23、s.drawText(等级: +lv, 30, 99, TopPaint);canvas.drawText(退出, 380, 360, TopPaint);TopPaint.setTextSize(30);canvas.drawText(下一个, 270, 72, TopPaint);BottomPaint.setColor(Color.BLUE);canvas.drawCircle(150, 764, 90, BottomPaint);canvas.drawCircle(330, 764, 90, BottomPaint);BottomPaint.setColor(Color.GREEN);

24、canvas.drawRect(150, 674, 330, 764, BottomPaint);BottomPaint.setColor(Color.RED);canvas.drawRect(150, 764, 330, 854, BottomPaint);FKPaint.setColor(Color.WHITE);for(int ii=0;ii20;ii+)for(int i=0;i10;i+)DrawSquare(ii, i, canvas);for(int i=0;i4;i+)for(int ii=0;ii4;ii+)DrawSquare3(i, ii, canvas);/ 绘图循环p

25、ublic void run()random = (int)(Math.random()*19);while (mbLoop)tryThread.sleep(200);catch (Exception e)synchronized( mSurfaceHolder )if(Dstop)for(int i=0;i4;i+)for(int ii=0;ii4;ii+)Array_nextiii=0;for(int x=0;x20;x+)for(int y=0;y10;y+)Array_FKXZxy=0;/if(Arrayxy=1)scanX=x;Draw();random=random1;/ 绘图方法

26、public void Draw()Dstop=false;init();random1 = (int)(Math.random()*19);switch (random)case 0:Array_FKXZ184=1;Array_FKXZ174=1;Array_FKXZ164=1;Array_FKXZ165=1;break;case 1:Array_FKXZ183=1;Array_FKXZ184=1;Array_FKXZ185=1;Array_FKXZ173=1;break;case 2:Array_FKXZ194=1;Array_FKXZ195=1;Array_FKXZ185=1;Array

27、_FKXZ175=1;break;case 3:Array_FKXZ186=1;Array_FKXZ174=1;Array_FKXZ175=1;Array_FKXZ176=1;break;case 4:Array_FKXZ184=1;Array_FKXZ174=1;Array_FKXZ175=1;Array_FKXZ165=1;break;case 5:Array_FKXZ173=1;Array_FKXZ174=1;Array_FKXZ184=1;Array_FKXZ185=1;break;case 6:Array_FKXZ185=1;Array_FKXZ175=1;Array_FKXZ174

28、=1;Array_FKXZ164=1;break;case 7:Array_FKXZ183=1;Array_FKXZ184=1;Array_FKXZ174=1;Array_FKXZ175=1;break;case 8:Array_FKXZ194=1;Array_FKXZ184=1;Array_FKXZ174=1;Array_FKXZ164=1;break;case 9:Array_FKXZ183=1;Array_FKXZ184=1;Array_FKXZ185=1;Array_FKXZ186=1;break;case 10:Array_FKXZ184=1;Array_FKXZ185=1;Arra

29、y_FKXZ174=1;Array_FKXZ175=1;break;case 11:Array_FKXZ184=1;Array_FKXZ173=1;Array_FKXZ174=1;Array_FKXZ175=1;break;case 12:Array_FKXZ194=1;Array_FKXZ184=1;Array_FKXZ185=1;Array_FKXZ174=1;break;case 13:Array_FKXZ184=1;Array_FKXZ185=1;Array_FKXZ186=1;Array_FKXZ175=1;break;case 14:Array_FKXZ185=1;Array_FK

30、XZ174=1;Array_FKXZ175=1;Array_FKXZ165=1;break;case 15:Array_FKXZ185=1;Array_FKXZ175=1;Array_FKXZ165=1;Array_FKXZ164=1;break;case 16:Array_FKXZ183=1;Array_FKXZ173=1;Array_FKXZ174=1;Array_FKXZ175=1;break;case 17:Array_FKXZ194=1;Array_FKXZ195=1;Array_FKXZ184=1;Array_FKXZ174=1;break;case 18:Array_FKXZ18

31、4=1;Array_FKXZ185=1;Array_FKXZ186=1;Array_FKXZ176=1;break;switch (random1)case 0:Array_next21=1;Array_next11=1;Array_next01=1;Array_next02=1;break;case 1:Array_next20=1;Array_next21=1;Array_next22=1;Array_next10=1;break;case 2:Array_next31=1;Array_next32=1;Array_next22=1;Array_next12=1;break;case 3:

32、Array_next23=1;Array_next11=1;Array_next12=1;Array_next13=1;break;case 4:Array_next21=1;Array_next11=1;Array_next12=1;Array_next02=1;break;case 5:Array_next10=1;Array_next11=1;Array_next21=1;Array_next22=1;break;case 6:Array_next22=1;Array_next12=1;Array_next11=1;Array_next01=1;break;case 7:Array_ne

33、xt20=1;Array_next21=1;Array_next11=1;Array_next12=1;break;case 8:Array_next31=1;Array_next21=1;Array_next11=1;Array_next01=1;break;case 9:Array_next20=1;Array_next21=1;Array_next22=1;Array_next23=1;break;case 10:Array_next21=1;Array_next22=1;Array_next11=1;Array_next12=1;break;case 11:Array_next21=1

34、;Array_next10=1;Array_next11=1;Array_next12=1;break;case 12:Array_next31=1;Array_next21=1;Array_next22=1;Array_next11=1;break;case 13:Array_next21=1;Array_next22=1;Array_next23=1;Array_next12=1;break;case 14:Array_next22=1;Array_next11=1;Array_next12=1;Array_next02=1;break;case 15:Array_next22=1;Arr

35、ay_next12=1;Array_next02=1;Array_next01=1;break;case 16:Array_next20=1;Array_next10=1;Array_next11=1;Array_next12=1;break;case 17:Array_next31=1;Array_next32=1;Array_next21=1;Array_next11=1;break;case 18:Array_next21=1;Array_next22=1;Array_next23=1;Array_next13=1;break;for(int x=16;x20;x+)for(int y=

36、3;y7;y+)DrawSquare2(x, y,canvas);for(int i=0;i4;i+)for(int ii=0;ii4;ii+)DrawSquare3(i, ii, canvas);if (mSurfaceHolder=null | canvas = null )return;/ 绘制后解锁,绘制后必须解锁才能显示mSurfaceHolder.unlockCanvasAndPost(canvas);handler.post(FDown);Handler handler = new Handler();Runnable FDown = new Runnable()Override

37、public void run() / TODO Auto-generated method stubinit();FreeDown(canvas);mSurfaceHolder.unlockCanvasAndPost(canvas);if(!Dstop)handler.postDelayed(FDown, time);public void DrawSquare(int x,int y,Canvas canvas)int l=106,r=131,b=652,t=627;l=l+y*27;r=r+y*27;t=t-x*27;b=b-x*27;if(Arrayxy=1)paint.setColo

38、r(Color.RED);canvas.drawRect(l, t, r, b, paint);elsepaint.setColor(Color.WHITE);canvas.drawRect(l, t, r, b, paint);public void DrawSquare2(int x,int y,Canvas canvas)int l=106,r=131,b=652,t=627;l=l+y*27;r=r+y*27;t=t-x*27;b=b-x*27;if(Array_FKXZxy=1)paint.setColor(Color.RED);canvas.drawRect(l, t, r, b,

39、 paint);public void DrawSquare3(int x,int y,Canvas canvas)int l=374,r=399,b=111,t=86;l=l+y*27;r=r+y*27;t=t-x*27;b=b-x*27;if(Array_nextxy=1)paint.setColor(Color.RED);canvas.drawRect(l, t, r, b, paint);elsepaint.setColor(Color.WHITE);canvas.drawRect(l, t, r, b, paint);public void FreeDown(Canvas canva

40、s)/canvas.drawCircle(300, 300, 50, BottomPaint);for(int x=0;x20;x+)for(int y=0;y10;y+)if(Array_FKXZxy=1)int temp=0;temp=x-1;Array_FKXZxy=0;Array_FKXZtempy=1;Array_tempxy=0;Array_temptempy=1;/这里有可能会影响旋转if(temp=0)Dstop = true;Lstop=false;Rstop=false;time=1000;else if(Arraytemp-1y=1)Dstop=true;Lstop=fa

41、lse;Rstop=false;time=1000;for(int x=0;x20;x+)for(int y=0;y10;y+)if(Dstop=true&Array_FKXZxy=1)Arrayxy=Array_FKXZxy;Array_FKXZxy=0;DrawSquare2(x, y,canvas);scoreAdd();public void left(Canvas canvas)for(int x=1;x20;x+)for(int y=0;y10;y+)if(Array_FKXZxy=1)int temp=0;temp=y-1;/(FreeDown1 x,y= +x+,+y);Arr

42、ay_FKXZxy=0;/(left x,temp=+x+,+temp);Array_FKXZxtemp=1;if(temp = 0)Lstop = true;for(int x=0;x20;x+)for(int y=0;y=0;x-)for(int y=9;y=0;y-)if(Array_FKXZxy=1)int temp=9;temp=y+1;Array_FKXZxy=0;Array_FKXZxtemp=1;if(temp = 9)Rstop = true;for(int x=0;x20;x+)for(int y=0;y10;y+)DrawSquare2(x, y,canvas);publ

43、ic void up(Canvas canvas)Lstop=false;Rstop=false;int xz = new int42;int temp = new int33;int temp1 = new int33;int xx=0,countX=1,countY=1,cx=0,cy=0,cx1=0,cy1=0,cy2=0;for(int x=0;x20;x+)for(int y=0;y10;y+)if(Array_FKXZxy=1)xzxx0=x;xzxx1=y;xx+;for(int i=1;ixzi-10)countX+;if(xzi1xzi-11)countY+;/(xz=+xzi0+ +xzi1);if(countX=3)if(xz10xz00)cx=xz10;elsecx=xz20;for(int i=1;ixzi1)xzi1=xzi-11;cy=xz31;if(countY=3)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论