android俄罗斯方块完整代码

article/2025/9/25 1:22:39

这段时间一直没有更新自己的博客,很多东西不经常看看会生疏了许多。在这里我就把自己前段时间编写的android俄罗斯方块代码贴出来。 

                                                                          转载请注明出处~~~~~~~~~~~~~~~~谢谢!

                                                                        http://blog.csdn.net/wu10045125/article/details/8248356

 

再贴出几张图片:

整个游戏我分为10个java文件:

先是俄罗斯方块的形状存储statefang.java,代码如下:

 

package com.example.eluosifangkuai;

public class statefang {  //方块的逻辑类
 
 public static int [][][]  state = new int[][][] {
  {// 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,具体代码如下:

 

package com.example.eluosifangkuai;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Bitmap.Config;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;

public class GameResources {
 
 Resources m_Resources;  // 资源类
 Canvas m_Canvas;    // 画布
 Bitmap m_Bitmaphc = null;  // 缓冲位图
 Bitmap m_Bitmap01 = null;  // 图像位图
 Bitmap [] m_Bitmaps = new Bitmap[8];  //精灵位图
 Bitmap score;  // 分数位图
 Bitmap Play;   // 开始位图
 Bitmap Level;
 public GameResources(Context context)  // 初始化 装载位图
 {
  m_Resources = context.getResources();
 for(int i=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 = new Canvas(m_Bitmaphc);
 bitmapB();
 }
 
 public void bitmapB()
 {
  Paint m_Paint = new Paint();
  m_Paint.setAntiAlias(true);
  m_Paint.setAlpha(220);
  m_Canvas.drawBitmap(m_Bitmap01, 0,0,null);    
 }
 public static Bitmap createImage(Drawable tile, int w, int h) {  // 双缓冲 加载位图资源
  Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
  Canvas canvas = new Canvas(bitmap);
  tile.setBounds(0, 0, w, h);
  tile.draw(canvas);
  return bitmap;
 }
 
}

 

音乐播放类,MusicPlay.java 具体代码如下:

package com.example.eluosifangkuai;


import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;

public class MusicPlay {
 
  public static MediaPlayer m_MediaPlay ; // 背景播放器
  public static MediaPlayer m_MenuPlay ;
  public static SoundPool soundPool;//声明 音效播放器
  public MediaPlayer m_FastDown ;
 
  private static boolean musicSwitch = true;//音乐开关
  private static boolean soundSwitch = true;//音效开关
  private static Map<Integer,Integer> soundMap; //音效资源id与加载过后的音源id的映射关系表
  private static Context context;
 
  public static void inItMusicPlay(Context c){
   context = c;
  }
  public static void inItMenuMusicPlay(Context c){
   context = c;
  }
  //初始化背景播放器
 public static void BgMediaplayer()
 {
   m_MediaPlay = MediaPlayer.create(context, R.raw.gamebg);
   m_MediaPlay.setLooping(true);
 }
 public static void menuMusic()
 {
  m_MenuPlay = MediaPlayer.create(context, R.raw.menubg);
  m_MenuPlay.setLooping(true);
 }
    public static void pauseMusic()
    {
   if(m_MediaPlay.isPlaying())
   {
    m_MediaPlay.pause();
   }
 }
    public static void pauseMenuMusic()
    {
   if(m_MenuPlay.isPlaying())
   {
    m_MenuPlay.pause();
   }
 }
    public static void startMusic(){
  if(musicSwitch){
   m_MediaPlay.start();
  }
 } 
    public static void startMenuMusic(){
  if(musicSwitch){
   m_MenuPlay.start();
  }
 } 
    public static void releaseMusic(){
  if(m_MediaPlay != null){
   m_MediaPlay.release();
  }
 }
    public static void releaseMenuMusic(){
  if(m_MenuPlay != null)
  {
   m_MenuPlay.release();
  }
 }
 
  //设置音乐开关
   public static void setMusicSwitch(boolean musicSwitch){
    MusicPlay.musicSwitch = musicSwitch;
    if(MusicPlay.musicSwitch){
     m_MediaPlay.start();
    }
    else{
     m_MediaPlay.stop();
    }
   }
   public static void inItSound()
   {
    soundPool = new SoundPool(8,AudioManager.STREAM_MUSIC,0);
    soundMap = new HashMap<Integer, Integer>();
  //将音效资源加入 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));
   }
      public static int playSound(int resId,int loop)
      {
  
  if(!soundSwitch){
   return 0;
  }
  
  Integer soundId = soundMap.get(resId);
        if(soundId != null)
        {
          return soundPool.play(soundId, 1, 1, 1, loop, 1);
        }
        else
        {
         return 0;
        }
     }
      public static void releaseSound(){
   if(soundPool != null){
    soundPool.release();
   }
  }
}

 

另外我还编写了一个图片按钮类,名为ImageButton.java 具体代码如下:

package com.example.eluosifangkuai;

import java.io.InputStream;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;

public class ImageButton {
 
     //  按钮图片
     private Bitmap mBitButton = null;
    
     //图片绘制的XY坐标
     private int mPosX =0;
     private int mPosY =0;
     //图片绘制的宽高
     private int mWidth =0;
     private int mHeight =0;
  
     public ImageButton(Context context, int frameBitmapID, int x, int y) {
  mBitButton = ReadBitMap(context,frameBitmapID);
  mPosX = x;
  mPosY = y;
  mWidth = mBitButton.getWidth();
  mHeight = mBitButton.getHeight();
     }

     //绘制图片按钮
     public void DrawImageButton(Canvas canvas, Paint paint) {
  canvas.drawBitmap(mBitButton, mPosX, mPosY, paint);
     }
    
   
    //  判断是否点中图片按钮
     public boolean IsClick(int x, int y) {
  boolean isClick = false;
  if (x >= mPosX && x <= mPosX + mWidth && y >= mPosY
   && y <= mPosY


http://chatgpt.dhexx.cn/article/wDaHsLrq.shtml

相关文章

俄罗斯方块-C语言-完整代码

效果图如下 #ifndef _DAY7_H #define _DAY7_H #include<windows.h> #include<time.h> #include<stdbool.h> #include<conio.h>//控制台输入输出函数getch通过键盘进行的操作 //游戏区域位置设计 #define COL_BEGIN 2 #define COL_END 14 #define ROW_…

C语言俄罗斯方块(新版本完整代码)

2020博客之星年度总评选进行中&#xff1a;请为74号的狗子投上宝贵的一票&#xff01; 我的投票地址&#xff1a;点击为我投票 写在前面&#xff1a; 大家好&#xff0c;我是 花狗Fdog &#xff0c;来自内蒙古的一个小城市&#xff0c;目前在泰州读书。 很感谢能有这样一个平台…

HTML5俄罗斯方块网页游戏代码

HTML5俄罗斯方块网页游戏代码 非常好用 代码如下 注意 把所有文件放在一个文件夹里! 把所有css文件夹里,命名css 把所有js文件夹里,命名js 先看index.html <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>俄罗斯方块…

俄罗斯方块C++语言代码

大家都知道俄罗斯方块&#xff0c;就是控制不同的方块旋转&#xff0c;通过摆满一行方块消除得分&#xff0c;今天就让我们用C制作一个俄罗斯方块小游戏。 首先定义方块&#xff1a; int block00[4][4] { { 10,0,0,0 },{ 1,1,1,1 },{ 0,0,0,0 },{ 0,0,0,0 } }; int block01[…

c++俄罗斯方块 完整源代码

文章目录 1. 功能描述2. 源代码3. 运行截图4. 结尾 1. 功能描述 2. 源代码 #include<iostream> #include<string> #include<cstdlib> #include<windows.h> #include<ctime> #include<conio.h> #include<cstdio> using namespace st…

俄罗斯方块游戏代码

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽…

C语言实现俄罗斯方块

目录 一、游戏效果展示 二、完整代码&#xff0c;可以直接拷贝运行 三、所需开发环境 四、具体项目实现 ①游戏欢迎界面 welcome( ) ②游戏背景 initGameScreen( ) ③方块表示 int block[ ][ ][ ] ④新方块表示nextBlock( ) ⑤设计游戏循环main( ) ⑥搭建用户操作框…

❤️VS Code❤️,cmd终端窗口运行,解决中文乱码问题

目录 问题归纳VS Code默认终端配置window窗口弹出相关解释 解决中文乱码问题运行俄罗斯方块程序 问题归纳 在软件Visual Studio中一切都是配置好的&#xff0c;默认终端运行采用弹出cmd窗口形式。而在VS Code中除了一些默认的配置设置外&#xff0c;所有环境配置、界面显示等操…

俄罗斯方块(C语言实现)

文章目录 游戏说明游戏效果展示游戏代码游戏代码详解游戏框架构建隐藏光标光标跳转初始化界面初始化方块信息颜色设置画出方块空格覆盖合法性判断判断得分与结束游戏主体逻辑函数从文件读取最高分更新最高分到文件主函数 游戏说明 俄罗斯方块相信大家都知道&#xff0c;这里就…

IDEA 设置类注释模板

效果展示 步骤&#xff1a;File-->settings-->Editor-->File and Code Templates-->Files 选择Class文件&#xff08;当然你要设置接口的还也可以选择Interface文件&#xff09;

设置idea类注释模板

1.File-->Settings...&#xff0c;或者直接按快捷键CtrlAltS. 2. Editor-->File and Code Templates-->Includes-->File Header,根据右下角Description的提示&#xff0c;添加自己需要的注释。 3.在右侧空白处设置自己的模板&#xff0c;若提示cant parse class.可…

IDEA 创建类注释模板设置

1.idea类注释 打开&#xff1a;file->setting->Editor->Filr and Code Templates->Includes->File Header 类注释模板&#xff1a; /** * title: ${NAME}* projectName ${PROJECT_NAME}* description: TODO* author ${USER}* date ${DATE}${TIME}*/ 2.方法注释…

java idea 配置注释模板

java idea 配置注释模板 最近项目组在加强代码规范管理。代码优雅从代码注释开始。奥力给&#xff01;&#xff01;&#xff01; 类注释的 File >> Settings >> Editor >> File and code Templates >> Files >> class 上图中的模板内容如下&…

idea类注释模板,方法注释模板。

idea设置--实时模板 新建组 类模板 /*** description $description$* author YJJ* date $date$ $time$* version 1.0*/ 方法模板 ** * description $description$ $params$ $return$* author YJJ* date $date$ $time$*/ params脚本&#xff1a; groovyScript("def r…

IDEA代码注释模板

存在问题: 每次写代码&#xff0c;新建类都没有注释&#xff0c;这对一个拥有代码强迫症患者来说&#xff0c;是多么不爽的一件事&#xff0c;不利于开发和后期问题排查 举个例子&#xff1a; 上次写代码的时候&#xff0c;这一段只有我和上帝知道&#xff0c;而现在&#xff0…

idea添加注释模板

自动添加描述 class // 创建时间有的也没有 仅仅就是class的描述信息&#xff0c;看个人公司情况吧&#xff0c;描述信息最好创建时间有一个空行&#xff0c;我忘记了/** * 描述信息 * * create: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE} */method // 一会要写入模板的内…

【idea生成类注释模板快捷键设置】

idea类注释模板快捷键 设置在方法上生成注释的快捷键1&#xff0c;ctrlaltS打开idea设置设置模板中的参数取值来源使用效果展示 设置在方法上生成注释的快捷键 1&#xff0c;ctrlaltS打开idea设置 设置模板中的参数取值来源 使用效果展示

IntelliJ IDEA类和方法注释模板配置

1、设置文件注释 设置Java类的注释模板&#xff0c;创建Java类自动生成该注释模板。 先看文件注释效果&#xff1a; 1.1、选择 IntelliJ IDEA —> 选择 Preferences... 打开IDEA属性设置面板 1.2、选择 File Code Templates—>选择 Includes 选项卡—>选择 File He…

IDEA配置方法类注释模板

IDEA配置方法类注释模板 IDEA20.1配置方法注释注释的种类注释使用规范 摘自阿里开发手册 IDEA方法模板注释一、打开idea 点击菜单File->Setting-Editor->Live Template二、选择Live Template 添加快键键缩写注释模板代码三、配置Edit variables四、配置入参和返回字段的d…

IDEA类和方法注释模板配置

1、类的注释模板配置 File-->Settings-->Editor-->File and Code Templates-->File --->Class: 模板代码下所示&#xff1a; /*** ClassName: ${NAME}* Author : ${USER}* Date :${DATE} ${TIME}* Description: TODO* Version :1.0*/ 上述${NAME}为类名&…