android制作俄罗斯方块游戏完整.docx

上传人:b****2 文档编号:1903213 上传时间:2023-05-02 格式:DOCX 页数:56 大小:39.38KB
下载 相关 举报
android制作俄罗斯方块游戏完整.docx_第1页
第1页 / 共56页
android制作俄罗斯方块游戏完整.docx_第2页
第2页 / 共56页
android制作俄罗斯方块游戏完整.docx_第3页
第3页 / 共56页
android制作俄罗斯方块游戏完整.docx_第4页
第4页 / 共56页
android制作俄罗斯方块游戏完整.docx_第5页
第5页 / 共56页
android制作俄罗斯方块游戏完整.docx_第6页
第6页 / 共56页
android制作俄罗斯方块游戏完整.docx_第7页
第7页 / 共56页
android制作俄罗斯方块游戏完整.docx_第8页
第8页 / 共56页
android制作俄罗斯方块游戏完整.docx_第9页
第9页 / 共56页
android制作俄罗斯方块游戏完整.docx_第10页
第10页 / 共56页
android制作俄罗斯方块游戏完整.docx_第11页
第11页 / 共56页
android制作俄罗斯方块游戏完整.docx_第12页
第12页 / 共56页
android制作俄罗斯方块游戏完整.docx_第13页
第13页 / 共56页
android制作俄罗斯方块游戏完整.docx_第14页
第14页 / 共56页
android制作俄罗斯方块游戏完整.docx_第15页
第15页 / 共56页
android制作俄罗斯方块游戏完整.docx_第16页
第16页 / 共56页
android制作俄罗斯方块游戏完整.docx_第17页
第17页 / 共56页
android制作俄罗斯方块游戏完整.docx_第18页
第18页 / 共56页
android制作俄罗斯方块游戏完整.docx_第19页
第19页 / 共56页
android制作俄罗斯方块游戏完整.docx_第20页
第20页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

android制作俄罗斯方块游戏完整.docx

《android制作俄罗斯方块游戏完整.docx》由会员分享,可在线阅读,更多相关《android制作俄罗斯方块游戏完整.docx(56页珍藏版)》请在冰点文库上搜索。

android制作俄罗斯方块游戏完整.docx

android制作俄罗斯方块游戏完整

交通运输学院

面向对象程序设计

课程设计

学院交通运输学院班级信管09

姓名许文学号200900820

成绩指导老师刘应东

2012年7月8日

兰州交通大学交通运输学院课程设计任务书

所在系:

信息管理与信息系统课程名称:

面向对象程序设计指导教师(签名):

专业班级:

信管09学生姓名:

许文学号:

一、课程设计题目

基于安卓的俄罗斯方块游戏开发

二、课程设计的目的

(1)提高学生思考与分析项目的能力。

(2)提高并加强学生面向对象的编程思想。

(3)强化学生灵活的编写程序并解决问题的能力。

三、课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作量要求等)

1.写出详细设计说明

2.编写程序代码,调试程序使其能正确运行

3.设计完成的软件要便于操作和使用

四、工作进度安排

本课程设计一共安排3周时间,具体如下:

第1周:

完成分析与设计工作,对整个设计的功能及流程有清晰的认识;

第2周:

完成开发工作;

第3周:

对设计中存在的问题进行完善,完成设计报告。

五、主要参考文献

[1]刘志宏.Java程序设计教程.北京:

航空工业出版社,2010年7月

[2]单兴华.Java基础与案例开发详解.北京:

清华大学出版社,2009年9月

审核批准意见

系主任(签字)   年  月  日

指导教师评语及成绩

导师签字:

年月日

俄罗斯方块游戏在Android中的实现1

引言1

1游戏背景及功能概述1

1.1背景概述1

1.2游戏简介2

1.3功能概述2

1.4游戏操作方法4

2.游戏策划及准备工作5

2.1游戏策划5

2.2游戏开发平台6

2.3Android平台下游戏的准备工作6

3.游戏构架7

4游戏中各个类中实现的功能8

5游戏的优化与改进8

结论8

参考文献9

附录9

附录文件代码9

附录文件代码37

附录文件代码38

附录文件代码38

附录文件代码39

附录文件代码40

附录文件代码40

俄罗斯方块游戏在Android中的实现

引言

引言:

简要说明设计题目的目的、意义、内容、主要任务等。

俄罗斯方块原本是前苏联科学家阿列克谢?

帕基特诺夫所开发的教育用软件,之后开始提供授权给各个游戏公司,造成各平台上软件大量发行的现象。

由于俄罗斯方块具有的数学性、动态性与知名度,也经常拿来作为游戏程序设计的练习题材。

俄罗斯方块曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事,它看似简单但却变化无穷,令人上瘾。

俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。

作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。

从诞生发展至今俄罗斯方块已经可以在各个平台上运行了。

本次游戏的开发就是基于Android4.0系统和传统俄罗斯方块的游戏方法进行的。

1游戏背景及功能概述

俄罗斯方块(Tetris,俄文:

Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。

俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。

由于上手简单、老少皆宜,从而家喻户晓,风靡世界。

1.1背景概述

俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。

这款游戏最初是由苏联的游戏制作人AlexPajitnov制作的,它看似简单但却变化无穷,令人上瘾。

相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。

  究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。

现在Android手机游戏的兴起又将重新掀起这股让人沉迷的俄罗斯方块风潮。

对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在"Android俄罗斯方块"中,更有一些Android游戏所独有的魅力――更加方便简单的操作模式,用户可在任意的地方任意时间进行游戏。

1.2游戏简介

原本是前苏联科学家阿列克谢·帕基特诺夫所开发的教育用软件,之后开始提供授权给各个游戏公司,造成各平台上软件大量发行的现象。

  GameBoy版的俄罗斯方块在日本卖出424万套,是GameBoy史上卖最好的游戏。

海湾战争时,也是前线美军最常拿消磨时间的游戏之一。

  由于俄罗斯方块具有的数学性、动态性与知名度,也经常拿来作为游戏程序设计的练习题材。

  俄罗斯方块曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事,它看似简单但却变化无穷,令人上瘾。

相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。

  俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。

作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。

1.3功能概述

  1、一个用于摆放小型正方形的平面虚拟场地,其标准大小:

行宽为24,列高为25,以每个小正方形为单位。

2、一组由4个小型正方形组成的规则图形,英文称为Tetromino,中文通称为方块共有7种,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。

 I:

一次最多消除四层

  J(左右):

最多消除三层,或消除二层

 L:

最多消除三层,或消除二层

  O:

消除一至二层

  S(左右):

最多二层,容易造成孔洞

  Z(左右):

最多二层,容易造成孔洞

  T:

最多二层

  

(1)部分游戏有单格方块,可以穿透固定的方块到达最下层空位。

其他的改版中出现更多特别的造型。

  方块会从区域上方开始缓慢继续落下。

  

(2)玩家可以做的操作有:

以90度为单位旋转方块,以格子为单位左右移动方块,让方块加速落下。

  (3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下。

  (4)当区域中某一列横向格子全部由方块填满,则该列会消失并成为玩家的得分。

同时删除的列数越多,得分指数上升。

  (5)当固定的方块堆到区域最上方而无法消除层数时,则游戏结束。

  (6)一般来说,游戏还会提示下一个要落下的方块,熟练的玩家会计算到下一个方块,评估现在要如何进行。

由于游戏能不断进行下去对商业用游戏不太理想,所以一般还会随着游戏的进行而加速提高难度。

  3、通过设计者预先设置的随机发生器不断地输出单个方块到场地顶部,以一定的规则进行移动、旋转、下落和摆放,锁定并填充到场地中。

每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取一定的积分或者其他形式的奖励。

而未被消除的方块会一直累积,并对后来的方块摆放造成各种影响。

  4、如果未被消除的方块堆放的高度超过场地所规定的最大高度(并不一定是20或者玩家所能见到的高度),则游戏结束。

  具体到每一款不同的游戏,其中的细节规则都可能有千差万别,但是以上的基本规则是相同的。

1.4游戏操作方法

1、安装apk游戏安装包,在Android手机的资源管理其中找到并点击Elos.apk文件选择安装。

2、点击游戏图标进入游戏界面后按键盘的"MENU"按钮,在弹出的菜单中选择“开始”来开始游戏(如图1所示)。

3、游戏玩家可以再游戏中采用点击“MENU”按钮来选择“暂停”、“退出”、“开始”以实现暂停、退出、重新开始功能(如图2所示)。

4、触摸屏操作:

系统缺省设置使用触摸屏,用手指点击方块的左边一次左移一格(长按则快速移动到最左边);点击方块的右边一次右移一格(长按则快速移动到最右边);点击方块本身旋转方块;点击方块的下边一次向下移一格(长按则快速移动到最下边)。

  5、计分牌显示的内容:

“分数””为本局游戏所得的分数,一次消一行100分、2行200分、3行400分、4行800分。

“关卡”为本局游戏所在的关卡,所在的关卡越高,难度越大。

“时间”为本局游戏从开始到当前所用的时间。

2.游戏策划及准备工作

2.1游戏策划

游戏的策划是指对游戏中主要功能的实现方案进行确定的过程,大型游戏需要缜密的策划才可以开发。

例如,呈现技术、目标平台等内容。

●游戏设计

本游戏为经典俄罗斯方块游戏,每一次消除一层加100分、2层200分、3层400分、4层800分。

游戏中的方块形状都是随机生成的(共7种)。

随着难度的增加方块下落的默认速度会增加,游戏分数没有上限。

●呈现技术

本游戏采用的游戏背景和其他图片都是用美图秀秀软件编辑的。

●目标平台

本游戏的目标平台为Android4.0。

●操作方式

游戏的操作方式为触控操作,游戏菜单的弹出是通过键盘来操作的。

2.2游戏开发平台

本次开发采用jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008开发包、开发工具、android-sdk-windows开发包。

●JDK(JavaDevelopmentKit)是SunMicrosystems针对Java开发员的产品。

自从Java推出以来,JDK已经成为使用最广泛的JavaSDK。

JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。

JDK是学好Java的第一步。

而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。

从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。

●Eclipse(软件开发者包)是EclipsePlatform、JDT和PDE所生产的组件合并,它们可以一次下载。

这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到EclipsePlatform中的工具。

EclipseSDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。

Eclipse项目生产的软件以GPL发布,第三方组件有各自自身的许可协议。

●AndroidSDK(GoogleAndroid专属的软件开发工具包),它是编写Android应用程序的基石。

2.3Android平台下游戏的准备工作

本游戏中用到的图片资源见表1所示。

表1游戏中所用到的图片资源及说明

图片名称

大小(kB)

像素(w*h)

用途

a.jpg

0.647

24*25

小方快图案

b.jpg

0.647

24*25

小方快图案

c.jpg

0.647

24*25

小方快图案

d.jpg

0.647

24*25

小方快图案

e.jpg

0.647

24*25

小方快图案

f.jpg

0.647

24*25

小方快图案

g.jpg

0.647

24*25

小方快图案

h.jpg

0.647

24*25

小方快图案

i.jpg

0.647

24*25

小方快图案

icon.jpg

7.96

140*115

游戏图标

P4.jpg

7.31

522*780

游戏背景

3.游戏构架

本游戏中各个模块的结构如图3所示。

图3游戏的总构架

●前台表示模块主要用于游戏画面的渲染。

其中包括游戏界面和管理面版两个模块,游戏界面主要为游戏中出现的界面,比如:

开始界面和游戏中界面。

管理面板包括开始、退出、暂停三部分,主要为玩家提供控制游戏行进和退出。

●游戏实体模块主要用于后台游戏逻辑。

本游戏中仅有方块实体模块一部分。

方块实体模块主要负责对已落下、正在落下和即将落下的方块图案的颜色和形状进行控制,核对正在落下的方块图案的行进路线、形状变换进行控制。

●数据存储模块包括游戏中关卡数据的存储和的分数据的存储。

游戏每一次启动都将全部删除上次启动时所产生的数据,重新进行新的数据存储。

后台运行时重新进入游戏不算做重启游戏,故数据不会重置。

●工具类模块将自身的静态成员或者方法提供给游戏中的其他类使用。

4游戏中各个类中实现的功能

由于在本次游戏的开发中本人对代码的注释比较详尽,故对各个类所实现的功能在代码中都有较详细的注释。

具体功能见附件代码。

5游戏的优化与改进

到目前为止本游戏已经能实现俄罗斯方块游戏本身的基本功能,但是有一些地方还值得优化与改进。

下面提出几点需要改进的地方以便在下次开发时进行必要的完善。

●加入本地游戏用户列表和相关的一些面板(如积分排行榜);

●加入游戏声音(本次游戏的开发由于主要用于兰州交通大学交通运输学院信息管理与信息系统09级2012年暑期课程设计,时间有限没有加入游戏声音);

●取消重启游戏后得分重置(由于本次开发没有加入游戏用户,数据的保存只能保存所有玩家的最高纪录等信息,而无法保存某个玩家的个人最优成绩等);

●对界面中图像进行优化(此次开发由于时间和精力有限对图像的处理力求简单,下次开发可以对图像进行比较深的加工);

●对游戏中的一些BUG进行改进(到目前为止此游戏在中兴U880[Android2.3.7]上使用没有发现比如卡死等较大的BUG);

结论

面向对象设计方法以对象为基础,利用特定的软件工具直接完成从对象客体的描述到软件结构之间的转换。

这是面向对象设计方法最主要的特点和成就。

面向对象设计方法的应用解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题,缩短了开发周期,解决了从分析和设计到软件模块结构之间多次转换映射的繁杂过程,是一种很有发展前途的系统开发方法。

  通过此次Android游戏的开发,使得我们更加深刻地理解了面向对象的编程思想。

参考文献

[1]刘志宏.Java程序设计教程.北京:

航空工业出版社,2010年7月

[2]单兴华.Java基础与案例开发详解.北京:

清华大学出版社,2009年9月

附录

文件代码

packagecom.weirui;

import

publicclassElosextendsActivity{

privatefinalintSQUARELEMENT_NUMBERS=7;

privateElosLogicplayer=null;//定义一个自定义的类的量

privateElosViewevElos=null;

privateElosStateViewesvElos=null;

privateElosLogic[][]elosGuard=null;//定义界面数组

privateDrawable[]drArr=newDrawable[SQUARELEMENT_NUMBERS];//保存方块的图片

privateDrawabledrArrCartoonBG=null;//保存背景图片

privateintnElosHeight=0;//定义一个保存组成方块图片的高的量

privateintnElosWidth=0;//定义一个保存组成方块图片的宽的量

privatebooleanbReset=true;//为true时表示开始

privatebooleanbPause=true;//false表示用来暂停使用的

intDRAWABLE_CHOICES=SQUARELEMENT_NUMBERS;//定义一个一个变量用来随机抽取图片来组成图形

intELOS_CHOICES=15;

inttime=0;//时间

intntime=0;//累计时间

intnTimeInterval=500;//初始值为500表示第一关的总分为500*10

intnCents=0;//游戏得分

intnStage=1;//游戏关卡

intnOldStage=0;//定义上一个关卡数

privateintnTotalLines=0;

privateintnTotalColumns=0;//定义了左边界面的数组行与列

intnElosYOffset=0;

intnElosXOffset=0;//定义了屏幕的起始点

privateintnElosAreaWidth=0;

privateintnElosAreaHeight=0;//定义了左面界面的宽与高的量

ThreadthdTimer=null;//定义一个线程

booleanbReportResult=false;//只有当游戏失败后值变为true,会在屏幕上显示结果

booleanbPlaying=true;//当变量为默认的true表示线程里开始工作

booleanstart=false;

intnPlayerChoice=0;//当获得随机抽取数表示要显示那个方块图形时赋给这个变量

intnDrawableChoice=0;//当获得随机抽取数表示选用那张图片做为构造方块图形赋值给这个变量

//获取资源图片

privatevoidRetriveDrawable(Contextc){

Resourcesres=c.getResources();

drAr

}

//-----由于没有拟定每个小图片的大小,所以调用函数获得设定的宽和高--------

privateintGetElosHeight(Drawabledr){

returndr.getMinimumHeight();

}

privateintGetElosWidth(Drawabledr){

returndr.getMinimumWidth();

}

//-------------------------------------------------------------------

privatevoidAnnounceNewStage(){//显示关卡数并每关过后将下降速度加快

if(nOldStage!

=nStage){

Toast.makeText(this,"第"+nStage+"关",Toast.LENGTH_SHORT).show();

nTimeInterval=nTimeInterval-(nStage-1)*50;//每关后睡眠时间减少

nOldStage=nStage;

}

}

privatevoidClearStageAndCentsAfterFail(){//开始的时候要清空关卡和分数

nCents=0;

nStage=1;

time=0;

ntime=0;

}

//---------------------------------游戏失败-------------------------------------------

privatebooleanIsElosGameFail(){

thdTimer=null;

ElosLogicvisit=elosGuard[0][0];

while(visit!

=null){

if(visit.IsDraw()&&!

visit.bUnit)returntrue;

visit=visit.GetElosLogicRight();//一直在左边方框数组的第一行寻找存在有了图片并被画出的则返回true表示失败

}

returnfalse;

}

//------------------------------判断要消去的行数----------------------------------

privatebooleanIsWholeLineDrawed(ElosLogiclogic){

if(logic==null)returnfalse;

ElosLogickeep1,keep2;//定义两个ElosLogic的变量

keep1=keep2=logic;

intnCount=0;

//通过两个分别左右循环的来查看这一行是否需要消除

while(keep1!

=null){

if(keep1.IsDraw())

nCount++;

keep1=keep1.GetElosLogicLeft();

}

keep2=keep2.GetElosLogicRight();

while(keep2!

=null){

if(keep2.IsDraw())

nCount++;

keep2=keep2.GetElosLogicRight();

}

if(nCount==this.nTotalColumns)returntrue;//如果与列数相同,则需要消除返回true

returnfalse;

}

privatevoidClearWholeLine(ElosLogiclogic){//如果要消除,则将这一行全设定为不显示

if(logic==null)return;

ElosLogickeep1,keep2;

keep1=keep2=logic;

while(keep1!

=null){

keep1.SetDraw(false);

keep1=keep1.GetElosLogicLeft();

}

keep2=keep2.GetElosLogicRight();

while(keep2!

=null){

keep2.SetDraw(false);

keep2=keep2.GetElosLogicRight();

}

}

privatevoidElosLogicCopyAfterLineFull(ElosLogicsrc,ElosLogicdes){

des.bDraw=src.bDraw;

src.bDraw=false;//把上一行设置成不绘制

des.SetDrawable(src.GetDrawable());//将下一行保存了上一行的图片

}

privatevoidElosLogicLineCopyAfterLineFull(ElosLogiclogic){//没消除掉行数都得自动下降

RectrtElos=logic.GetRect();

RectrtGuardZero=elosGuard[0][0].GetRect();

intnLineNumber=(rtElos.top-rtGuardZero.top)/rtElos.height();

while(nLineNumber>=1){

for(inti=0;i

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2