android平台俄罗斯方块游戏完整代码.docx
《android平台俄罗斯方块游戏完整代码.docx》由会员分享,可在线阅读,更多相关《android平台俄罗斯方块游戏完整代码.docx(37页珍藏版)》请在冰豆网上搜索。
android平台俄罗斯方块游戏完整代码
整个游戏我分为10个java文件:
先是俄罗斯方块的形状存储statefang.java,代码如下:
packagecom.example.eluosifangkuai;publicclassstatefang{//方块的逻辑类publicstaticint[][][]state=newi
整个游戏我分为10个java文件:
先是俄罗斯方块的形状存储statefang.java,代码如下:
packagecom.example.eluosifangkuai;
publicclassstatefang{//方块的逻辑类
publicstaticint[][][]state=newint[][][]{
{//I
{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0}},{//I1
{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,1,1,1}},{//I2
{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0}},{//I3
{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,1,1,1}},{//I4
{0,0,0,0},{0,0,0,0},{0,1,1,0},{0,1,1,0}},{//O5
{0,0,0,0},{0,0,0,0},{0,1,1,0},{0,1,1,0}},{//O6
{0,0,0,0},{0,0,0,0},{0,1,1,0},{0,1,1,0}},{//O7
{0,0,0,0},{0,0,0,0},{0,1,1,0},{0,1,1,0}},{//O8
{0,0,0,0},{0,1,0,0},{0,1,0,0},{0,1,1,0}},{//L9
{0,0,0,0},{0,0,0,0},{1,1,1,0},{1,0,0,0}},{//L10
{0,0,0,0},{0,1,1,0},{0,0,1,0},{0,0,1,0}},{//L11
{0,0,0,0},{0,0,0,0},{0,0,1,0},{1,1,1,0}},{//L12
{0,0,0,0},{0,0,1,0},{0,0,1,0},{0,1,1,0}},{//J13
{0,0,0,0},{0,0,0,0},{1,0,0,0},{1,1,1,0}},{//J14
{0,0,0,0},{0,1,1,0},{0,1,0,0},{0,1,0,0}},{//J15
{0,0,0,0},{0,0,0,0},{1,1,1,0},{0,0,1,0}},{//J16
{0,0,0,0},{0,0,0,0},{0,1,0,0},{1,1,1,0}},{//T17
{0,0,0,0},{0,0,1,0},{0,1,1,0},{0,0,1,0}},{//T18
{0,0,0,0},{0,0,0,0},{1,1,1,0},{0,1,0,0}},{//T19
{0,0,0,0},{1,0,0,0},{1,1,0,0},{1,0,0,0}},{//T20
{0,0,0,0},{0,0,0,0},{0,1,1,0},{1,1,0,0}},{//S21
{0,0,0,0},{0,1,0,0},{0,1,1,0},{0,0,1,0}},{//S22
{0,0,0,0},{0,0,0,0},{0,1,1,0},{1,1,0,0}},{//S23
{0,0,0,0},{0,1,0,0},{0,1,1,0},{0,0,1,0}},{//Z24
{0,0,0,0},{0,0,0,0},{1,1,0,0},{0,1,1,0}},{//Z25
{0,0,0,0},{0,0,1,0},{0,1,1,0},{0,1,0,0}},{//Z26
{0,0,0,0},{0,0,0,0},{1,1,0,0},{0,1,1,0}},{//Z27
{0,0,0,0},{0,0,1,0},{0,1,1,0},{0,1,0,0}}//28
};
}
我们当然还要编写音乐播放类,资源播放类了等等。
。
。
。
。
。
我把所有的图片资源编写在一个类里面,叫做GameResources.java,具体代码如下:
packagecom.example.eluosifangkuai;
importandroid.content.Context;
importandroid.content.res.Resources;
importandroid.graphics.Bitmap;
importandroid.graphics.Canvas;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.Paint;
importandroid.graphics.drawable.Drawable;
publicclassGameResources{
Resourcesm_Resources;//资源类
Canvasm_Canvas; //画布
Bitmapm_Bitmaphc=null;//缓冲位图
Bitmapm_Bitmap01=null;//图像位图
Bitmap[]m_Bitmaps=newBitmap[8];//精灵位图
Bitmapscore;//分数位图
BitmapPlay; //开始位图
BitmapLevel;
publicGameResources(Contextcontext)//初始化装载位图
{
m_Resources=context.getResources();
for(inti=0;i<7;i++)
{
m_Bitmaps[i]=createImage(m_Resources.getDrawable(R.drawable.cube_960_011+i),18,18);
}
m_Bitmap01=createImage(m_Resources.getDrawable(R.drawable.bgcatcher),320,480);
m_Bitmaps[7]=createImage(m_Resources.getDrawable(R.drawable.main11),320,402);
score=createImage(m_Resources.getDrawable(R.drawable.score),87,150);
Play=createImage(m_Resources.getDrawable(R.drawable.b7),320,480);
Level=createImage(m_Resources.getDrawable(R.drawable.levelup),139,88);
m_Bitmaphc=Bitmap.createBitmap(320,480,Config.ARGB_8888);
m_Canvas=newCanvas(m_Bitmaphc);
bitmapB();
}
publicvoidbitmapB()
{
Paintm_Paint=newPaint();
m_Paint.setAntiAlias(true);
m_Paint.setAlpha(220);
m_Canvas.drawBitmap(m_Bitmap01,0,0,null);
}
publicstaticBitmapcreateImage(Drawabletile,intw,inth){//双缓冲加载位图资源
Bitmapbitmap=Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
Canvascanvas=newCanvas(bitmap);
tile.setBounds(0,0,w,h);
tile.draw(canvas);
returnbitmap;
}
}
音乐播放类,MusicPlay.java具体代码如下:
packagecom.example.eluosifangkuai;
importjava.util.HashMap;
importjava.util.Map;
importandroid.content.Context;
importandroid.media.AudioManager;
importandroid.media.MediaPlayer;
importandroid.media.SoundPool;
publicclassMusicPlay{
publicstaticMediaPlayerm_MediaPlay;//背景播放器
publicstaticMediaPlayerm_MenuPlay;
publicstaticSoundPoolsoundPool;//声明音效播放器
publicMediaPlayerm_FastDown;
privatestaticbooleanmusicSwitch=true;//音乐开关
privatestaticbooleansoundSwitch=true;//音效开关
privatestaticMapsoundMap;//音效资源id与加载过后的音源id的映射关系表
privatestaticContextcontext;
publicstaticvoidinItMusicPlay(Contextc){
context=c;
}
publicstaticvoidinItMenuMusicPlay(Contextc){
context=c;
}
//初始化背景播放器
publicstaticvoidBgMediaplayer()
{
m_MediaPlay=MediaPlayer.create(context,R.raw.gamebg);
m_MediaPlay.setLooping(true);
}
publicstaticvoidmenuMusic()
{
m_MenuPlay=MediaPlayer.create(context,R.raw.menubg);
m_MenuPlay.setLooping(true);
}
publicstaticvoidpauseMusic()
{
if(m_MediaPlay.isPlaying())
{
m_MediaPlay.pause();
}
}
publicstaticvoidpauseMenuMusic()
{
if(m_MenuPlay.isPlaying())
{
m_MenuPlay.pause();
}
}
publicstaticvoidstartMusic(){
if(musicSwitch){
m_MediaPlay.start();
}
}
publicstaticvoidstartMenuMusic(){
if(musicSwitch){
m_MenuPlay.start();
}
}
publicstaticvoidreleaseMusic(){
if(m_MediaPlay!
=null){
m_MediaPlay.release();
}
}
publicstaticvoidreleaseMenuMusic(){
if(m_MenuPlay!
=null)
{
m_MenuPlay.release();
}
}
//设置音乐开关
publicstaticvoidsetMusicSwitch(booleanmusicSwitch){
MusicPlay.musicSwitch=musicSwitch;
if(MusicPlay.musicSwitch){
m_MediaPlay.start();
}
else{
m_MediaPlay.stop();
}
}
publicstaticvoidinItSound()
{
soundPool=newSoundPool(8,AudioManager.STREAM_MUSIC,0);
soundMap=newHashMap();
//将音效资源加入soundPool,并做成soundMap映射
soundMap.put(R.raw.action,soundPool.load(context,R.raw.action,1));
soundMap.put(R.raw.fastdown,soundPool.load(context,R.raw.fastdown,1));
soundMap.put(R.raw.rotation,soundPool.load(context,R.raw.rotation,1));
soundMap.put(R.raw.down,soundPool.load(context,R.raw.down,1));
soundMap.put(R.raw.delete1,soundPool.load(context,R.raw.delete1,1));
soundMap.put(R.raw.delete2,soundPool.load(context,R.raw.delete2,1));
soundMap.put(R.raw.delete3,soundPool.load(context,R.raw.delete3,1));
soundMap.put(R.raw.delete4,soundPool.load(context,R.raw.delete4,1));
}
publicstaticintplaySound(intresId,intloop)
{
if(!
soundSwitch){
return0;
}
IntegersoundId=soundMap.get(resId);
if(soundId!
=null)
{
returnsoundPool.play(soundId,1,1,1,loop,1);
}
else
{
return0;
}
}
publicstaticvoidreleaseSound(){
if(soundPool!
=null){
soundPool.release();
}
}
}
另外我还编写了一个图片按钮类,名为ImageButton.java具体代码如下:
packagecom.example.eluosifangkuai;
importjava.io.InputStream;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
publicclassImageButton{
//按钮图片
privateBitmapmBitButton=null;
//图片绘制的XY坐标
privateintmPosX=0;
privateintmPosY=0;
//图片绘制的宽高
privateintmWidth=0;
privateintmHeight=0;
publicImageButton(Contextcontext,intframeBitmapID,intx,inty){
mBitButton=ReadBitMap(context,frameBitmapID);
mPosX=x;
mPosY=y;
mWidth=mBitButton.getWidth();
mHeight=mBitButton.getHeight();
}
//绘制图片按钮
publicvoidDrawImageButton(Canvascanvas,Paintpaint){
canvas.drawBitmap(mBitButton,mPosX,mPosY,paint);
}
//判断是否点中图片按钮
publicbooleanIsClick(intx,inty){
booleanisClick=false;
if(x>=mPosX&&x<=mPosX+mWidth&&y>=mPosY
&&y<=mPosY+mHeight){
isClick=true;
}
returnisClick;
}
//读取图片资源
publicBitmapReadBitMap(Contextcontext,intresId){
BitmapFactory.Optionsopt=newBitmapFactory.Options();
opt.inPreferredConfig=Bitmap.Config.RGB_565;
opt.inPurgeable=true;
opt.inInputShareable=true;
//获取资源图片
InputStreamis=context.getResources().openRawResource(resId);
returnBitmapFactory.decodeStream(is,null,opt);
}
}
下面是显示开始图片按钮MenuView.java,代码如下:
packagecom.example.eluosifangkuai;
importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.view.View;
publicclassMenuViewextendsView{
ImageButtonm_ImageButton_Play;//开始播放按钮
ImageButtonm_ImageButton_Play_a;
ImageButtonm_bg; //背景图片
publicMenuView(Contextcontext){//初始化工作
super(context);
m_bg=newImageButton(context,R.drawable.b7,0,0);
m_ImageButton_Play=newImageButton(context,R.drawable.play,62,136);
m_ImageButton_Play_a=newImageButton(context,R.drawable.play1,62,136);
}
publicvoidonDraw(Canvascanvas)//画布中显示位图
{
m_bg.DrawImageButton(canvas,null);
m_ImageButton_Play.DrawImageButton(canvas,null);
}
}
还有一个启动活动类,MainActivity.java代码为:
packagecom.example.eluosifangkuai;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.util.Log;
importandroid.view.Window;
importandroid.view.WindowManager;
publicclassMainActivityextendsActivity{
privatestaticfinalintGOTO_MAIN_ACTIVITY=0;//发送消息参数
privateHandlermHandler=newHandler(){ //消息推送类
publ