安卓俄罗斯方块java解释_Android下实现一个简单的俄罗斯方块游戏

package com.test;

import android.content.Context;

import android.content.res.Resources;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.AttributeSet;

import android.util.Log;

import android.view.KeyEvent;

import android.view.View;

import android.widget.TextView;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Random;

public class TetrisView extends TileView {

private static final String TAG = "TetrisView";

/**

* 游戏的四种状态

*/

private int mMode = READY;

public static final int PAUSE = 0;

public static final int READY = 1;

public static final int RUNNING = 2;

public static final int LOSE = 3;

/**

* 三种背景图片,由这些图片拼装成游戏的基本界面

*/

private static final int RED_STAR = 1;

private static final int YELLOW_STAR = 2;

private static final int GREEN_STAR = 3;

/**

* 产生随机数,根据随机数决定方块的形状

*/

private static final Random RNG = new Random();

/**

* 当前游戏的分数

*/

private long mScore = 0;

/**

* 历史最高分

*/

public static long historyScore = 0;

/**

* 是否超出了最高分,如果超出了,则在退出时会保存数据

*/

public static boolean overhistroy=false;

/**

* 方块移动的速度,数值越小则方块的速度越高,难度也就越大

*/

private long mMoveDelay;

/**

* 当前方块移动的速度,和mMoveDelay配合使用,在游戏中更改游戏的速度都是更改此变量值

* 在每个方块产生的时候,将此变量值赋给mMoveDelay。之所以采用两个变量是因为当按下加速 方块落下之后,下一个方块的速度还要保持原来的速度。

*/

private long currentDelay;

/**

* 预先显示的方块,在前一个方块落下后,使其变为当前方块

*/

private ArrayList preShape = new ArrayList();

/**

* 当前正在下落的方块

*/

private ArrayList mShape = new ArrayList();

private ArrayList oldShape = new ArrayList();

/**

* 显示历史最高分的文本框

*/

private TextView highestScore;

/**

* 显示当前分数的文本框

*/

private TextView currentScore;

/**

* 显示当前游戏级别的文本框

*/

private TextView currentLevel;

/**

* 记录游戏的级别

*/

private int gameLevel = 1;

/**

* 在屏幕中央显示提示信息的文本框

*/

private TextView info;

/**

* 记录目前落下的方块的最高层数

*/

private int highLevel = 0;

/**

* 当前方块类型,主要用来标示田形方块,从而在旋转方块的时候可以让田形方块不旋转

*/

private int shapeType;

/**

* 预先显示方块的类型

*/

private int preType;

/**

* 构造方法

*/

public TetrisView(Context context, AttributeSet attrs) {

super(context, attrs);

initGame();

}

public TetrisView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

initGame();

}

/**

* 通过一个handler来更新界面的显示,以及方块下落的速度

*/

private RefreshHandler mRedrawHandler = new RefreshHandler();

class RefreshHandler extends Handler {

@Override

public void handleMessage(Message msg) {

TetrisView.this.update();

TetrisView.this.invalidate();

}

public void sleep(long delayMillis) {

this.removeMessages(0);

sendMessageDelayed(obtainMessage(0), delayMillis);

}

};

/**

* 初始化游戏

*/

private void initGame() {

setFocusable(true);

Resources r = this.getContext().getResources();

resetTiles(4);

loadTile(RED_STAR, r.getDrawable(R.drawable.redstar));

loadTile(YELLOW_STAR, r.getDrawable(R.drawable.yellowstar));

loadTile(GREEN_STAR, r.getDrawable(R.drawable.greens

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值