Android课程设计作品,一个小游戏,使用传感器控制小鲸鱼的游动,避免被水面上捕鲸船的鱼枪捕到,针对屏幕为800*480的屏幕设计。
主进程:
package
game.whale;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Rect;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class Whale extends Activity {
Rect rectStart;// 开始游戏按钮区域
Rect rectExit;// 退出游戏按钮区域
Rect gvRectStart;// GameView中游戏结束时绘制的重新开始游戏按钮
Rect gvRectExit;// GameView中游戏结束时绘制的退出游戏按钮
Rect gvRectBacktoMain;// GameView中绘制的游戏结束时返回主菜单按钮
Rect rectAbout;
Rect helpRectBack;//HelpView中返回主菜单按钮
View currView;// 当前显示的View
WelcomeView wv;// 欢迎View
GameView gv;// 游戏View
HelpView hv;//关于View
SensorManager mySensorManager;
WhaleListener whaleListener;
Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:// 0为收到WelcomeView开始游戏命令
gv = new GameView(Whale.this);
setContentView(gv);
currView = gv;
startSensor();
wv = null;
break;
case 1:// 1为收到WelcomeView退出游戏命令
System.exit(0);
break;
case 2://2为收到GameView重新开始游戏命令
gv.shutAllThreads();
gv=null;
gv=new GameView(Whale.this);
setContentView(gv);
currView=gv;
break;
case 3://3为收到GameView的返回主菜单命令
gv.shutAllThreads();
wv=new WelcomeView(Whale.this);
setContentView(wv);
currView=wv;
pauseSensor();
gv=null;
break;
case 4://4为收到GameView的退出游戏命令
System.exit(0);
break;
case 5://收到WelcomeView关于按钮按下命令
hv=new HelpView(Whale.this);
setContentView(hv);
currView=hv;
wv=null;
break;
case 6://收到HelpView关于返回主菜单的命令
//hv.ht.run=false;
wv=new WelcomeView(Whale.this);
setContentView(wv);
currView=wv;
hv=null;
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//禁止锁屏
wv = new WelcomeView(Whale.this);
setContentView(wv);
currView = wv;
whaleListener = new WhaleListener(Whale.this);
mySensorManager = (SensorManager)
getSystemService(SENSOR_SERVICE);
initRect();
}
public void initRect() {
rectStart = new Rect(313, 120, 487, 160);
rectExit = new Rect(313, 320, 487, 360);
gvRectStart = new Rect(70, 400, 244, 440);
gvRectBacktoMain = new Rect(314, 400, 488, 440);
gvRectExit = new Rect(558, 400, 732, 440);
rectAbout=new Rect(313,220,487,260);
helpRectBack=new Rect(313,320,487,360);
}
public void startSensor() {
mySensorManager.registerListener(whaleListener,
SensorManager.SENSOR_ORIENTATION,
SensorManager.SENSOR_DELAY_GAME);
}
public void pauseSensor() {
mySensorManager.unregisterListener(whaleListener);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
pauseSensor();
super.onPause();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
int x = (int) event.getX();
int y = (int) event.getY();
if (currView == wv) {
if (rectStart.contains(x, y)) {
wv.status = 1;
wv.selectIndex = 0;
} else if (rectExit.contains(x, y)) {
wv.status = 2;
wv.selectIndex = 1;
}else{
if(rectAbout.contains(x, y)){
wv.status=4;
wv.selectIndex=5;
}
}
} else {
if(currView==gv){
if(gv.status==1){
if(gvRectStart.contains(x, y)){
gv.buttonStatus=1;
gv.selectIndex=2;
}else{
if(gvRectBacktoMain.contains(x, y)){
gv.buttonStatus=2;
gv.selectIndex=3;
}else{
if(gvRectExit.contains(x,y)){
gv.buttonStatus=3;
gv.selectIndex=4;
}
}
}
}
}else{
if(currView==hv){
if(helpRectBack.contains(x, y)){
hv.status=1;
hv.selectIndex=6;
}
}
}
}
}
return true;
}
}
刚进入程序时的主界面,即欢迎界面:
package
game.whale;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
public class WelcomeView extends SurfaceView implements Callback
{
Whale whale;
WelcomeDrawThread wdt;
Bitmap bmpBacKScreen;//背景图片
Bitmap bmpStartGame;//开始图片按钮区
Bitmap bmpStartGameClick;//开始游戏按下后的按钮
Bitmap bmpExitGame;//退出图片按钮区
Bitmap bmpExitGameClick;//退出游戏按钮按下后图片
Bitmap bmpAbout;//关于帮助按钮图片
Bitmap bmpAboutClick;//关于帮助图片按下时图片
int selectIndex=-1;//用于向Whale发送消息,0表示按了开始,1表示按了退出,5表示按下关于
int
status=-1;//状态值,0表示待命,1表示开始按钮按下,2表示退出按钮按钮,3表示显示加载中,4表示关于按钮按下
public WelcomeView(Whale whale){
super(whale);
this.whale=whale;
getHolder().addCallback(this);
wdt=new
W