package com.android.test;
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.graphics.Rect;
import android.graphics.Bitmap.Config;
import android.view.KeyEvent;
import android.view.View;
public class GameView extends View {
private Bitmap[] bmp1 = new Bitmap[10];
int []ltx = new int[10];
int []lty = new int[10];
Rect[] rectpeople = new Rect[10];
int t;
int flagStart;
int flagWin;
int level;
boolean[] tag = {true,false,false,false,false,false,false,false,false,false};
private final Paint paint = new Paint();
public GameView(Context context) {
super(context);
// TODO Auto-generated constructor stub
//默认第一关
level_01();
//获取资源中的位图
Resources res = context.getResources();
bmp1[0]=BitmapFactory.decodeResource(res, R.drawable.caocao);
bmp1[1]=BitmapFactory.decodeResource(res, R.drawable.guanyu);
bmp1[2]=BitmapFactory.decodeResource(res, R.drawable.general1);
bmp1[3]=BitmapFactory.decodeResource(res, R.drawable.general2);
bmp1[4]=BitmapFactory.decodeResource(res, R.drawable.general3);
bmp1[5]=BitmapFactory.decodeResource(res, R.drawable.general4);
bmp1[6]=BitmapFactory.decodeResource(res, R.drawable.soldier1);
bmp1[7]=BitmapFactory.decodeResource(res, R.drawable.soldier1);
bmp1[8]=BitmapFactory.decodeResource(res, R.drawable.soldier1);
bmp1[9]=BitmapFactory.decodeResource(res, R.drawable.soldier1);
setFocusable(true);
}
/*****************************************************
desc:是否隐藏
******************************************************/
boolean IsHitting(Rect rcSour, Rect rcDest)
{
boolean b_Result=true;
if(rcSour.left>=rcDest.right && rcSour.right>rcDest.left) //rcSour在右侧
b_Result=false;
if(rcSour.left<rcDest.right && rcSour.right<=rcDest.left) //rcSour在左侧
b_Result=false;
if(rcSour.top>=rcDest.bottom && rcSour.bottom>rcDest.top) //rcSour在下侧
b_Result=false;
if(rcSour.top<rcDest.bottom && rcSour.bottom<=rcDest.top) //rcSour在上侧
b_Result=false;
return b_Result;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Bitmap newb = Bitmap.createBitmap(bmp1[0].getWidth(),bmp1[0].getHeight(),Config.ARGB_8888);
Canvas canvas = new Canvas(newb);
int i;
for(int j=0;j<10;j++)
{
if(tag[j]==true)
t=j;
}
flagStart=1;
if (flagStart == 1) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
if(rectpeople[t].top>0) //在游戏界面内
{
lty[t]-=60;
rectpeople[t].top-=60;
rectpeople[t].bottom-=60;
for(i=0;i<10;i++) //逐个比较是否与其它矩形重叠
{
if(IsHitting(rectpeople[t],rectpeople[i])&& i!=t) //重叠后退回原位
{
lty[t]+=60;
rectpeople[t].top+=60;
rectpeople[t].bottom+=60;
tag[t]=false;
tag[i]=true;
drawRectFrame(canvas);
break;
}
}
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
if(rectpeople[0].top==300 && tag[0])
{
flagStart=2;//游戏结束
flagWin = 0; //胜利
}
if(rectpeople[t].bottom<300)
{
lty[t]+=60;
rectpeople[t].top+=60;
rectpeople[t].bottom+=60;
drawRectFrame(canvas);
for(i=0;i<10;i++) //逐个比较是否与其它矩形重叠
{
if(IsHitting(rectpeople[t],rectpeople[i]) && i!=t) //重叠后退回原位
{
lty[t]-=60;
rectpeople[t].top-=60;
rectpeople[t].bottom-=60;
tag[t]=false;
tag[i]=true;
drawRectFrame(canvas);
break;
}
}
}
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
if(rectpeople[t].left>50)
{
ltx[t]-=60;
rectpeople[t].right-=60;
rectpeople[t].left-=60;
for(i=0;i<10;i++) //逐个比较是否与其它矩形重叠
{
if(IsHitting(rectpeople[t],rectpeople[i]) && i!=t) //重叠后退回原位,移动焦点
{
ltx[t]+=60;
rectpeople[t].right+=60;
rectpeople[t].left+=60;
tag[t]=false;
tag[i]=true;
drawRectFrame(canvas);
break;
}
}
}
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
if(rectpeople[t].right<240)
{
ltx[t]+=60;
rectpeople[t].right+=60;
rectpeople[t].left+=60;
for(i=0;i<10;i++) //逐个比较是否与其它矩形重叠
{
if(IsHitting(rectpeople[t],rectpeople[i]) && i!=t) //重叠后退回原位,移动焦点
{
ltx[t]-=60;
rectpeople[t].right-=60;
rectpeople[t].left-=60;
tag[t]=false;
tag[i]=true;
drawRectFrame(canvas);
break;
}
}
}
break;
case KeyEvent.KEYCODE_MENU:
level++;
selectLever(level%4);
break;
}
postInvalidate();
}
return super.onKeyDown(keyCode, event);
}
private void selectLever(int flevel) {
// TODO Auto-generated method stub
switch(flevel)
{
case 1:
level_01();
break;
case 2:
level_02();
break;
case 3:
level_03();
break;
case 0:
level_04();
break;
}
}
private void level_04() {
// TODO Auto-generated method stub
rectpeople[0] = new Rect(0, 0, 120, 120);
rectpeople[1] = new Rect(0, 120, 120, 180);
rectpeople[2] = new Rect(120, 0, 180, 120);
rectpeople[3] = new Rect(0, 180, 60, 300);
rectpeople[4] = new Rect(180, 0, 240, 120);
rectpeople[5] = new Rect(60, 180, 120, 300);
rectpeople[6] = new Rect(120, 120, 180, 180);
rectpeople[7] = new Rect(120, 180, 180, 240);
rectpeople[8] = new Rect(180, 120, 240, 180);
rectpeople[9] = new Rect(180, 180, 240, 240);
ltx[0] = 0;// 曹操
lty[0] = 0;
ltx[1] = 0;// 关羽
lty[1] = 120;
ltx[2] = 120;
lty[2]=0;
ltx[3]=0;
lty[3]=180;
ltx[4]=180;
lty[4]=0;
ltx[5]=60;
lty[5]=180;
ltx[6]=120;
lty[6]=120;
ltx[7]=120;
lty[7]=180;
ltx[8]=180;
lty[8]=120;
ltx[9]=180;
lty[9]=180;
}
private void level_03() {
// TODO Auto-generated method stub
rectpeople[0] = new Rect(60,0,180,120);
rectpeople[1] = new Rect(60,120,180,180);
rectpeople[2] = new Rect(60,180,120,300);
rectpeople[3] = new Rect(120,180,180,300);
rectpeople[4] = new Rect(0,120,60,240);
rectpeople[5] = new Rect(180,120,240,240);
rectpeople[6] = new Rect(0,0,60,60);
rectpeople[7] = new Rect(0,60,60,120);
rectpeople[8] = new Rect(180,0,240,60);
rectpeople[9] = new Rect(180,60,240,120);
ltx[0]=60;//曹操
lty[0]=0;
ltx[1]=60;//关羽
lty[1]=120;
ltx[2]=60;
lty[2]=180;
ltx[3]=120;
lty[3]=180;
ltx[4]=0;
lty[4]=120;
ltx[5]=180;
lty[5]=120;
ltx[6]=0;
lty[6]=0;
ltx[7]=0;
lty[7]=60;
ltx[8]=180;
lty[8]=0;
ltx[9]=180;
lty[9]=60;
}
private void level_02() {
// TODO Auto-generated method stub
rectpeople[0] = new Rect(60,0,180,120);
rectpeople[1] = new Rect(60,120,180,180);
rectpeople[2] = new Rect(180,0,240,120);
rectpeople[3] = new Rect(0,180,60,300);
rectpeople[4] = new Rect(0,0,60,120);
rectpeople[5] = new Rect(180,180,240,300);
rectpeople[6] = new Rect(0,120,60,180);
rectpeople[7] = new Rect(180,120,240,180);
rectpeople[8] = new Rect(60,180,120,240);
rectpeople[9] = new Rect(120,180,180,240);
ltx[0]=60;//曹操
lty[0]=0;
ltx[1]=60;//关羽
lty[1]=120;
ltx[2]=180;
lty[2]=0;
ltx[3]=0;
lty[3]=180;
ltx[4]=0;
lty[4]=0;
ltx[5]=180;
lty[5]=180;
ltx[6]=0;
lty[6]=120;
ltx[7]=180;
lty[7]=120;

qin40704
- 粉丝: 3
- 资源: 14
最新资源
- 轮毂电机分布式驱动车辆状态估计模型:基于扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)的角阶跃输入与整车7自由度模型.pdf
- 基于单片机智能插座APP控制:实时监测与远程管理.pdf
- 商业级别的EtherCAT主站源码(倍福架构),附带文档.pdf
- 逆变器光伏并网逆变器资料:包含原理图、PCB、源码及元器件明细表.pdf
- 同步磁阻电机矢量双闭环控制.pdf
- 永磁同步电机SVPWM与双闭环PI+MTPA+弱磁控制的Simulink仿真模型.pdf
- 6编队控制Matlab程序:基于领航跟随法目标跟踪,可切换拓扑与调节智能体数量.pdf
- 直驱式永磁风电并网控制的Simulink模型:最大功率追踪控制与风机建模运行程序(Matlab实现).pdf
- 10G 40G以太网FPGA源码:UDP协议与TCP协议,K7与Z7全测试.pdf
- A星算法实现:单个AGV路径规划及避障代码(静态障碍物,位置可调,Matlab建模与仿真实现).pdf
- ARM+FPGA架构运动控制卡的原理图、PCB图及运动控制器框架源码.pdf
- DeepSeek 15天快速上手指南-AI助手从入门到高级应用
- AI+医疗产业深度解析:DeepSeek技术驱动下的行业变革与投资机遇
- 介绍如何在Ubuntu中安装Vivado软件
- 车辆状态估计,容积卡尔曼滤波CKF车辆状态估计,容积卡尔曼滤波CKF 针对乘用车进行车辆运动状态参数估计,采用CKF容积卡尔曼滤波算法,对车辆的纵向车速、侧向速度、横摆角速度、质心侧偏角、各轮侧向力进
- AI+医疗产业深度解析:DeepSeek技术驱动下的行业变革与投资机遇
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



- 1
- 2
- 3
- 4
- 5
- 6
前往页