android俄罗斯方块报告,android俄罗斯方块

package my.pack;

import java.util.Random;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Rect;

import android.view.KeyEvent;

import android.view.SurfaceHolder;

import

android.view.SurfaceHolder.Callback;

import android.view.SurfaceView;

public class eluosi extends

SurfaceView implements Callback,Runnable {

private SurfaceHolder sfh;

private Paint paint;

private Canvas canvas;

private Thread th;

int

textX=100,textY=100;

private boolean

flag,isNew=true,canBian=true,isEnd,isOver,isPause;

private boolean isLeft,isRight,isDi;

private int dir=0;

private int score;

private long speed=1000;

private boolean hang[];

private final int UP=1;

private final int DOWN=2;

private final int LEFT=3;

private final int RIGHT=4;

private int

zh[][][]={{{0,0,0,0},{0,1,1,0,},{0,1,1,0},{0,0,0,0}},

{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}},

{{0,1,0,0},{0,1,0,0},{0,1,0,0},{0,1,0,0}},

{{0,0,0,0},{0,1,0,0},{1,1,1,0},{0,0,0,0}},

{{0,0,0,0},{0,1,0,0},{1,1,0,0},{0,1,0,0}},

{{0,0,0,0},{0,0,0,0},{1,1,1,0},{0,1,0,0}},

{{0,0,0,0},{0,1,0,0},{0,1,1,0},{0,1,0,0}},

{{0,0,0,0},{1,1,0,0},{1,0,0,0},{1,0,0,0}},

{{0,0,0,0},{0,0,0,0},{1,0,0,0},{1,1,1,0}},

{{0,0,0,0},{0,0,1,0},{0,0,1,0},{0,1,1,0}},

{{0,0,0,0},{1,1,1,0},{0,0,1,0},{0,0,0,0}},

{{0,0,0,0},{0,1,1,0},{0,0,1,0},{0,0,1,0}},

{{0,0,0,0},{1,1,1,0},{1,0,0,0},{0,0,0,0}},

{{0,0,0,0},{1,0,0,0},{1,0,0,0},{1,1,0,0}},

{{0,0,0,0},{0,0,1,0},{1,1,1,0},{0,0,0,0}},

{{0,0,0,0},{0,1,1,0},{1,1,0,0},{0,0,0,0}},

{{0,0,0,0},{0,1,0,0},{0,1,1,0},{0,0,1,0}},

{{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0}},

{{0,0,0,0},{0,0,1,0},{0,1,1,0},{0,1,0,0}}

};

private int kb;//每一次产生新块的标号

private int s[][]; //记录背景方块20*10,1为填充,0为空

private int x[],y[];

private int nextkb;

private int cx=4,cy=0;

private Rect[] kuai;

public eluosi(Context context) {

super(context);

sfh=this.getHolder();

sfh.addCallback(this);

paint=new Paint();

paint.setColor(Color.WHITE);

setFocusable(true);

s=new int[20][10];

x=new int[4];

y=new int[4];

kuai=new Rect[4];

hang=new boolean[20];

}

@Override

public void run() {

while(flag){

if(!isPause&&!isOver){

logic();

}

myDraw();

try{

Thread.sleep(speed);

}catch(Exception e){

e.printStackTrace();

}

}

}

private void logic() {

Random r=new Random();

if(isEnd){

endkuai();

xiaohang();

}

if(isNew){

newkuai();

getkuai();

collision();

isNew=false;

nextkb=r.nextInt(18);

}

if(speed<0){

speed=0;

}

if(speed>1000){

speed=1000;

}

getnext();

getkuai();

}

private void xiaohang() {

int i,j,w;

int js=0;

for(i=1;i<=19;i++){

hang[i]=canxiao(i);

if(hang[i]){

for(w=i;w>0;w--){

for(j=0;j<=9;j++){

s[w][j]=s[w-1][j];

}

}

js++;

}

}

switch(js){

case 1: score+=10;break;

case 2: score+=20;break;

case 3: score+=40;break;

case 4: score+=60;break;

default:;

}

}

public boolean canxiao(int hb){

int i=0;

while(i<10){

if(s[hb][i]==1){

i++;

}else{

break;

}

}

if(i==10){

return true;

}else{

return false;

}

}

public void bian() {

int i,j,k=0;

int m,n;

int x1[],y1[];

boolean flg=false;

x1=new int[4];

y1=new int[4];

for(i=0;i<4;i++){

x1[i]=x[i];

y1[i]=y[i];

}

kb++;

if(kb==1){

kb=0;

}else if(kb==3){

kb=1;

}else if(kb==7){

kb=3;

}else if(kb==11){

kb=7;

}else if(kb==15){

kb=11;

}else if(kb==17){

kb=15;

}else if(kb==19){

kb=17;

}

for(i=0;i<4;i++){

for(j=0;j<4;j++){

if(zh[kb][i][j]==1){

x1[k]=i;

y1[k]=j;

k++;

}

}

}

for(i=0;i<4;i++){

m=cx+x1[i];

n=cy+y1[i];

if(m<0||m>9||n>19){

flg=true;

}

}

if(!flg){

for(i=0;i<4;i++){

x[i]=x1[i];

y[i]=y1[i];

}

}else{

kb--;

}

clearflag();

yuejie();

collision();

}

private void myDraw() {

try{

canvas=sfh.lockCanvas();

if(canvas!=null){

canvas.drawRGB(0, 0, 0);

drawinfo();

drawkuai();

drawbg();

drawnext();

}

}catch(Exception e){

e.printStackTrace();

}finally{

if(canvas!=null){

sfh.unlockCanvasAndPost(canvas);

}

}

}

private void drawbg() {

int i,j;

paint.setStyle(Paint.Style.STROKE);

paint.setColor(Color.RED);

paint.setStrokeWidth(3);

canvas.drawRect(new Rect(100,100,300,500), paint);

canvas.drawRect(new Rect(300,100,450,500), paint);

paint.setStyle(Paint.Style.FILL);

paint.setColor(Color.WHITE);

for(i=0;i<20;i++){

for(j=0;j<10;j++){

if(s[i][j]==1){

canvas.drawRect(new

Rect(100+j*20,100+i*20,118+j*20,118+i*20), paint);

}

}

}

}

@Override

public void surfaceChanged(SurfaceHolder holder,

int format, int width,

int height) {

}

@Override

public void surfaceCreated(SurfaceHolder holder)

{

flag=true;

initgame();

th=new Thread(this);

th.start();

}

@Override

public void surfaceDestroyed(SurfaceHolder holder)

{

flag=false;

}

public void initgame(){

int i,j;

cx=4;

cy=0;

for(i=0;i<20;i++){

for(j=0;j<10;j++){

s[i][j]=0;

}

}

}

public void regame(){

initgame();

clearflag();

isNew=true;

canBian=true;

isEnd=false;

isOver=false;

isPause=false;

}

public void clearflag(){

isLeft=false;

isRight=false;

isDi=false;

}

public void newkuai(){

int i,j,k=0;

kb=nextkb;

for(i=0;i<4;i++){

for(j=0;j<4;j++){

if(zh[kb][i][j]==1){

x[k]=i;

y[k]=j;

k++;

}

}

}

isEnd=false;

cx=4;

cy=0;

}

public void getnext(){

int i;

yuejie();

collision();

switch(dir){

case UP:

if(canBian&&!isEnd){

bian();

isDi=false;

}

break;

case DOWN:

if(!isDi&&!isEnd){

cy++;

}

break;

case LEFT:

if(!isLeft&&!isEnd){

cx--;

isRight=false;

}

break;

case RIGHT:

if(!isRight&&!isEnd){

cx++;

isLeft=false;

}

break;

default:;

}

dir=DOWN;

}

public void getkuai(){

int i;

int m,n;

for(i=0;i<4;i++){

m=cx+x[i];

n=cy+y[i];

kuai[i]=new Rect(100+m*20,100+n*20,118+m*20,118+n*20);

}

}

public void yuejie(){

int i;

int tx,ty;

for(i=0;i<4;i++){

tx=cx+x[i];

ty=cy+y[i];

if(tx==0){

isLeft=true;

}

if(tx==9){

isRight=true;

}

if(ty==19){

isDi=true;

isEnd=true;

}

}

}

public void collision(){

int i;

int tx,ty;

for(i=0;i<4;i++){

tx=cx+x[i];

ty=cy+y[i];

if(tx>=1){

if(s[ty][tx-1]==1){

isLeft=true;

}

}

if(tx<=8){

if(s[ty][tx+1]==1){

isRight=true;

}

}

if(ty<=18){

if(s[ty+1][tx]==1){

isDi=true;

isEnd=true;

if(isNew){

isOver=true;

}

}

}

}

}

public void endkuai(){

int i;

int m,n;

for(i=0;i<4;i++){

m=cx+x[i];

n=cy+y[i];

s[n][m]=1;

}

isEnd=false;

isNew=true;

clearflag();

}

public void drawkuai(){

int i;

paint.setColor(Color.YELLOW);

for(i=0;i<4;i++){

canvas.drawRect(kuai[i], paint);

}

paint.setColor(Color.WHITE);

}

public void drawinfo(){

paint.setTextSize(20);

canvas.drawText("俄罗斯方块 V1.0", 140, 80, paint);

canvas.drawText("得分 "+String.valueOf(score), 340, 250, paint);

canvas.drawText("速度 "+String.valueOf(speed), 360, 270, paint);

if(isOver){

canvas.drawText("GAME OVER!",300,200, paint);

}

}

public void drawnext(){

int i,j;

paint.setColor(Color.GREEN);

for(i=0;i<4;i++){

for(j=0;j<4;j++){

if(zh[nextkb][i][j]==1){

canvas.drawRect(new

Rect(330+i*20,150+j*20,348+i*20,168+j*20), paint);

}

}

}

paint.setColor(Color.WHITE);

}

@Override

public boolean onKeyDown(int keyCode,KeyEvent

event){

if(keyCode==KeyEvent.KEYCODE_DPAD_UP){

dir=UP;

}else

if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN){

dir=DOWN;

}else

if(keyCode==KeyEvent.KEYCODE_DPAD_LEFT){

dir=LEFT;

}else

if(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT){

dir=RIGHT;

}else if(keyCode==KeyEvent.KEYCODE_5){

isPause=!isPause;

}else if(keyCode==KeyEvent.KEYCODE_2){

speed-=100;

}else if(keyCode==KeyEvent.KEYCODE_8){

speed+=100;

}else if(keyCode==KeyEvent.KEYCODE_R){

regame();

}

return super.onKeyDown(keyCode, event);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值