java代码-android做的俄罗斯方块,其他界面在手机撒谎能够看都是正常的,就游戏界面不能满屏

问题描述

android做的俄罗斯方块,其他界面在手机撒谎能够看都是正常的,就游戏界面不能满屏
package com.comon; //启动游戏

import java.io.InputStream;

import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;

public class StarSurfaceView extends SurfaceView implements RunnableSurfaceHolder.CallbackView.OnKeyListener {
//SurfaceHolder用来完成对绘制的画布进行裁剪,控制其大小
SurfaceHolder sHolder=null;
Canvas canvas;
Paint paint;
showPage tm;
contro cm;
int face;
boolean flag;
boolean onlyone=true;
boolean next = false;
Store a;
Store c;
int x;
int y;
int kk;
// int action;

//创建图片对象Bitmap store1 = null;Bitmap store2 = null;Bitmap store3 = null;Bitmap store4 = null;Bitmap store5 = null;Bitmap store6 = null;Bitmap store7 = null;Bitmap border1 = null;Bitmap border2 = null;Bitmap record = null;Bitmap num0 = null;Bitmap num1 = null;Bitmap num2 = null;Bitmap num3 = null;Bitmap num4 = null;Bitmap num5 = null;Bitmap num6 = null;Bitmap num7 = null;Bitmap num8 = null;Bitmap num9 = null;Bitmap blg = null;

// Bitmap fire = null;
Bitmap conti=null;
Bitmap goon = null;
Bitmap good = null;
Bitmap happy = null;
Bitmap bbk = null;

public StarSurfaceView(Context context AttributeSet attrs) {    super(context attrs);    //实例化sHolder    sHolder = this.getHolder();    //addCallback:给SurfaceView添加一个回调函数    sHolder.addCallback(this);    this.setFocusable(true);

// sHolder = this.getHolder();
// sHolder.addCallback(this);
paint=new Paint();
tm = new showPage();
cm = new contro();
a = new Store();
c = new Store();
// action=0;
face = 0;
x=-2;
y=4;
kk=0;
//获得对象
bbk = this.getBitmapById(R.drawable.bbk);
blg = this.getBitmapById(R.drawable.tetris);
store1 = this.getBitmapById(R.drawable.block0);
store2 = this.getBitmapById(R.drawable.block1);
store3 = this.getBitmapById(R.drawable.block2);
store4 = this.getBitmapById(R.drawable.block3);
store5 = this.getBitmapById(R.drawable.block4);
store6 = this.getBitmapById(R.drawable.block5);
store7 = this.getBitmapById(R.drawable.block6);
border1 = this.getBitmapById(R.drawable.border);
border2 = this.getBitmapById(R.drawable.border_sm);
num0 = this.getBitmapById(R.drawable.a0);
num1 = this.getBitmapById(R.drawable.a1);
num2 = this.getBitmapById(R.drawable.a2);
num3 = this.getBitmapById(R.drawable.a3);
num4 = this.getBitmapById(R.drawable.a4);
num5 = this.getBitmapById(R.drawable.a5);
num6 = this.getBitmapById(R.drawable.a6);
num7 = this.getBitmapById(R.drawable.a7);
num8 = this.getBitmapById(R.drawable.a8);
num9 = this.getBitmapById(R.drawable.a9);
record = this.getBitmapById(R.drawable.record);
// fire = this.getBitmapById(R.drawable.fire);
conti=this.getBitmapById(R.drawable.conti);
goon = this.getBitmapById(R.drawable.goon);
good = this.getBitmapById(R.drawable.good);
happy = this.getBitmapById(R.drawable.happy);
}
//从资源中装载图片
public Bitmap getBitmapById(int id) {
Bitmap image = null;
Context currentCtx = this.getContext();//得到当前设备环境

    Resources res = currentCtx.getResources();//得到图片资源    InputStream is = res.openRawResource(id);//打开图片资源    image = BitmapFactory.decodeStream(is);//获取图片资源    return image;}//绘制方法public void draw() {

//// Canvas c = null;//声明画布
// c = sHolder.lockCanvas();//锁定画布
//// Paint p;//声明画笔
// p = new Paint();
//

// c.drawBitmap(bbk 0 0 p);
// c.drawBitmap(border1 2 1 p);//绘制游戏主背景
// c.drawBitmap(border2 240 20 p);//绘制产生下一个方块的背景
// c.drawBitmap(record 240 270 p);//绘制计分榜背景
// showFace(cp);
// showC(cp);
// showT(cp);
// showP(cp);
// sHolder.unlockCanvasAndPost(c);//解锁画布
try {

canvas= sHolder.lockCanvas();

if (canvas!= null) {

canvas.drawBitmap(bbk00paint);
canvas.drawBitmap(border1 21 paint);
canvas.drawBitmap(border224020 paint);
canvas.drawBitmap(record240 270paint);
showFace(canvaspaint);
showC(canvaspaint);
showT(canvaspaint);
showP(canvaspaint);
// sHolder.unlockCanvasAndPost(c);
}

} catch (Exception e) {

System.out.println(""error"");
} finally {

if (canvas!= null)

sHolder.unlockCanvasAndPost(canvas);

}

}

boolean left = false;boolean right = false;boolean up = false;boolean down = false;

// boolean back=false;

public void run() {    if(onlyone){

// int x = -2;
// int y = 4;
// boolean next = false;
// Store a = new Store();
// Store b = new Store();
c.Sttore(-1);//随机为下一个方块区域生成一个方块
a.Sttore(-1);//随机为游戏区域生成一个方块
tm.putS(c);//在下一个方块区域产生一个方块
onlyone=false;
// int kk = 0; //用来控制方块的变形次数,在一行内
}
while(flag){
if(next) {
tm.delS(c);//删除下一个方块区域的方块
a.Sttore(c.kind);//把存储下一个方块区域的方块的数组传递给游戏区域的方块数组
c.Sttore(-1);//为下一个方块区域随机生成一个方块
x = -2;
y = 4;
next = false;
tm.putS(c);
}
draw();//绘制方块
//控制方块下降速度
try {
Thread.sleep(400 - cm.speed);
}
catch (InterruptedException e) {
e.printStackTrace();
}
// if(back){
// Intent intent1 = new Intent();
// intent1.setClass( ActivityGame.acGame TTetris.class);
// ActivityGame.acGame.startActivity(intent1);
// ActivityGame.acGame.finish();
// break;
// }
if(left) {
tm.delStore(a x y);//删除游戏区域的方块
if(tm.leftM(a x y)) {
y--; //如果方块可以左移,把方块左移
}
tm.putStore(a x y);//重新生成左移后的方块
left = false;
kk++;
if(kk < 3) {
continue;
}
}
//方块右移
else if(right) {
tm.delStore(a x y);
if(tm.rightM(a x y)) {
y++;
}
tm.putStore(a x y);
right = false;
kk++;

if(kk < 3) {
continue;
}
}
//方块变形
else if(up) {
int tv;
if( (a.kind+1)%4 == 0) { //每种方块有1234这四种状态,如果处于第4种状态,按上就变回第一种状态
tv = a.kind -3; //否则把没按一次上,1变成22变成33变成4
}
else {
tv = a.kind + 1;
}
Store b = new Store();
b.Sttore(tv);
tm.delStore(a x y);
if(tm.fit(b x y)) { //如果方块变形后不会碰壁,则生成一个变形后的方块,否则生成原来的方块
a = b;
tm.putStore(a x y);
up = false;
kk++;
if(kk < 3) {
continue;
}
}
else {
tm.putStore(a x y);
up = false;
}
}
else if(down) {
tm.delStore(a x y);
while(tm.fit(a x y)) {
x++;
}
tm.putStore(a x y);
down = false;
}

        tm.delStore(a x y);        kk = 0;        if(tm.fit(a x y)) {//使方块下落            x++;            tm.putStore(a x y);        }        else {            int t;            tm.putStore(a x y);            if(tm.outM(a x y)) {//如果方块触顶了,结束游戏,转换到游戏结束界面                Intent intent = new Intent();                intent.setClass( ActivityGame.acGame ActGameover.class);                ActivityGame.acGame.startActivity(intent);                ActivityGame.acGame.finish();                break;            }            t = tm.flood(a x y);//消行并返回消除的行数,不可以消行返回0;

// putface(t);
face=t;
cm.tscore(t); //计分
cm.passWar();
System.out.println(cm.score);
tm.pSco(cm.sco);
next = true;
}
}
}

public void showFace(Canvas canvasPaint paint) {//通过face控制人物的表情    if(face == 0) {        canvas.drawBitmap(goon 240120 paint);    }    else if(face == 1) {        canvas.drawBitmap(conti 240120 paint);    }    else if(face == 2||face==3) {        canvas.drawBitmap(good 240120 paint);    }    else if(face==4) {        canvas.drawBitmap(happy 240120 paint);    }}

// public void putface(int fa) { //生成face的值
// if(fa == 0) {
// face = (int)(Math.random()*2);
// }
// else {
// face = fa+1;
// }
// }

public void showC(Canvas canvasPaint paint) {  //绘制分数的图片    for(int i = 0; i <4; i++) {        if(tm.co[i] == 0) {            canvas.drawBitmap(num0 i*20+240 330 paint);        }        else if(tm.co[i] == 1) {            canvas.drawBitmap(num1 i*20+240 330 paint);        }        else if(tm.co[i] == 2) {            canvas.drawBitmap(num2 i*20+240 330 paint);        }        else if(tm.co[i] == 3) {            canvas.drawBitmap(num3 i*20+240 330 paint);        }        else if(tm.co[i] == 4) {            canvas.drawBitmap(num4 i*20+240 330 paint);        }        else if(tm.co[i] == 5) {            canvas.drawBitmap(num5 i*20+240 330 paint);        }        else if(tm.co[i] == 6) {            canvas.drawBitmap(num6 i*20+240 330 paint);        }        else if(tm.co[i] == 7) {            canvas.drawBitmap(num7 i*20+240 330 paint);        }        else if(tm.co[i] == 8) {            canvas.drawBitmap(num8 i*20+240 330 paint);        }        else if(tm.co[i] == 9) {            canvas.drawBitmap(num9 i*20+240 330 paint);        }    }}public void showT(Canvas canvasPaint paint) {//下一个方块生成区域的方块绘制不同颜色的方块图片    for(int i = 0 ;i < 4; i++) {        for(int j = 0; j < 4; j++) {            if(tm.brray[i][j] == 1){                canvas.drawBitmap(store1 j*tm.w+240 i*tm.w+20 paint);            }            else if(tm.brray[i][j] == 2){                canvas.drawBitmap(store2  j*tm.w+240 i*tm.w+20 paint);            }            else if(tm.brray[i][j] == 3){                canvas.drawBitmap(store3 j*tm.w+240 i*tm.w+20 paint);            }            else if(tm.brray[i][j] == 4){                canvas.drawBitmap(store4 j*tm.w+240 i*tm.w+20 paint);            }            else if(tm.brray[i][j] == 5){                canvas.drawBitmap(store5 j*tm.w+240 i*tm.w+20 paint);            }            else if(tm.brray[i][j] == 6){                canvas.drawBitmap(store6 j*tm.w+240 i*tm.w+20 paint);            }            else if(tm.brray[i][j] == 7){                canvas.drawBitmap(store7 j*tm.w+240 i*tm.w+20 paint);            }        }    }}public void showP(Canvas canvasPaint paint) {  //为游戏区域的方块绘制不同颜色的图片    for(int i = 0 ;i < tm.array.length; i++){        for(int j = 0; j < tm.array[0].length; j++){            if(tm.array[i][j] == 1){                canvas.drawBitmap(store1 j*tm.w-1 i*tm.w-2 paint);            }            else if(tm.array[i][j] == 2){                canvas.drawBitmap(store2 j*tm.w-1 i*tm.w-2 paint);            }            else if(tm.array[i][j] == 3){                canvas.drawBitmap(store3 j*tm.w-1 i*tm.w-2 paint);            }            else if(tm.array[i][j] == 4){                canvas.drawBitmap(store4 j*tm.w-1 i*tm.w-2 paint);            }            else if(tm.array[i][j] == 5){                canvas.drawBitmap(store5 j*tm.w-1 i*tm.w-2 paint);            }            else if(tm.array[i][j] == 6){                canvas.drawBitmap(store6 j*tm.w-1 i*tm.w-2 paint);            }            else if(tm.array[i][j] == 7){                canvas.drawBitmap(store7 j*tm.w-1 i*tm.w-2 paint);            }        }    }}public boolean onKeyDown(int k KeyEvent event) {    return false;}public boolean onKeyUp(int kKeyEvent event){    switch (k) {    case KeyEvent.KEYCODE_DPAD_UP:            up=true;        break;    case KeyEvent.KEYCODE_DPAD_DOWN:            down=true;        break;    case KeyEvent.KEYCODE_DPAD_LEFT:            left=true;        break;    case KeyEvent.KEYCODE_DPAD_RIGHT:            right=true;        break;    }    return false;}public boolean onKey(View v int k KeyEvent e) {    return false;}public void surfaceChanged(SurfaceHolder holder int format int widthint height) {}public void surfaceCreated(SurfaceHolder holder) {        flag=true;        Thread th = new Thread(this);        th.start();}public void surfaceDestroyed(SurfaceHolder holder) {    flag=false;}

}

main()的代码:
<?xml version=""1.0"" encoding=""utf-8""?>
android:layout_width=""fill_parent""
android:layout_height=""fill_parent""
android:orientation = ""vertical""
>
android:layout_width=""fill_parent""
android:layout_height=""fill_parent""
>

时间: 2024-08-01 09:32:52

java代码-android做的俄罗斯方块,其他界面在手机撒谎能够看都是正常的,就游戏界面不能满屏的相关文章

java代码读取windows的系统日志

问题描述 java代码读取windows的系统日志 比如安全日志,事件日志 ,都是以.evtx,不要用Logpaser等工具什么的,只用java代码 解决方案 http://technet.microsoft.com/zh-cn/scriptcenter/dd919274 http://www.codeforge.com/article/222452

Android学习笔记(9):使用XML文件和Java代码控制UI界面

Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想.   MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.   我们可以在app\src\main\res\layout目录下定义一个XML文件(R.java

Android 使用Fragment模仿微信界面的实例代码

什么是Fragment 自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片.片段.其目的是为了解决不同屏幕分辩率的动态和灵活UI设计.大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments . fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activit

Android java代码有错误,获取的list一直为0,问题出在哪里

问题描述 Android java代码有错误,获取的list一直为0,问题出在哪里 package com.example.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.Intent; import android.content.

android 中 如何通过java代码调用style样式

问题描述 android 中 如何通过java代码调用style样式 平时做开发,通常style样式直接在xml布局文件中直接调用,如果我想直接在java代码中通过动态加载来设置,是否可以?通过查阅资料,很多说不可以,解决方式是把style中的逐条信息加载设置,还有其他途径可以设置吗? 解决方案 无其他方式无其他方式无其他方式 解决方案二: 我们之前的一个项目也尝试过在java里面动态加载style,最后也放弃了,这个确实做不到,楼主想想其它方法吧 解决方案三: 多谢,各位,目前我没有发现动态加

Android高仿微信聊天界面代码分享_Android

微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们来看一下整个小项目的主体结构: 下面是Activity的代码: package com.way.demo; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import jav

用java的swing做图形界面开发

问题描述 我发现网上与这个有关的东西都很少啊,这个是不是很冷门啊?做这个是不是没什么前途?我是在校的大学生,对java比较感兴趣,但是学完简单的语法后都不知道该做什么好,请各位前辈指一下路哈,谢谢. 解决方案 不是.主要是J2SE这方面做得人很少了.现在Java主要都是JavaWEB.做J2SE的都跑Android去了.做J2SE的看不起J2EE的.大都这样呵呵~~~Java Swing主要是效率比较低,所以用得人很少做图形界面的话C++和C比起Java来有着绝对的优势,而且Java Swing

Android高仿微信聊天界面代码分享

微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们来看一下整个小项目的主体结构: 下面是Activity的代码: package com.way.demo; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import jav

Android 模拟新闻APP显示界面滑动优化实例代码

内容: 1.滑动优化(滑动时不加载图片,停止才加载) 2.第一次进入时手动加载 代码如下: 1.界面布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android: