⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 canvas_main.java

📁 05年游戏学院一个学生写的项目
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.io.IOException;
import java.util.Random;

import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;

public class Canvas_Main extends GameCanvas
{
	private MIDlet_Main mainMIDlet;
	private Graphics g;
	private Random rd;
	private Class_Map map;
	private Image imgBulletBurst,imgAimSign;
	private static Image[] imgTank;
	private LayerManager lm;
	//是否处于观察模式
	boolean isDetect;
	//是否处于弹药选择模式
	private boolean isSelBullet;
	//当前炮弹类型
	static byte curBulType;
	//线程是否终止
	static boolean isThreadCancel;
	//当前是否敌方回合
	private boolean isEnemyTurn;
	//我方剩余坦克数量
	private byte aliveOwnTankCount;
	//敌方剩余坦克数量
	private byte aliveEnemyTankCount;
	//我方坦克
	static Class_Tank[] ownTank;
	//敌方坦克
	static Class_Tank[] enemyTank;
	//炮弹爆炸火花
	private Class_Burst bulletBurst;
	//瞄准器
	private Class_AimSign aimSign;
	//AI坦克行为变化计数器
	private byte AICount;
	byte AI;
	//回合持续时间记数
	private short turnTimeCount;
	
	//我方活动坦克索引  敌方活动坦克索引
	private byte iOwnTankActive,iEnemyTankActive;
	
	//爆炸火花是否消失
	static boolean isTurnChange;
	
	Thread t1;
	
	protected Canvas_Main(MIDlet_Main mid) 
	{
		super(false);
		setFullScreenMode(true);
		mainMIDlet=mid;
		rd=new Random();
		g=getGraphics();
		imgTank=new Image[6];
		try {
			imgBulletBurst=Image.createImage("/imgBulletBurst.png");
			imgAimSign=Image.createImage("/imgAimSign.png");
			imgTank[0]=Image.createImage("/imgCarrot.png");
			imgTank[1]=Image.createImage("/imgCannon.png");
			imgTank[2]=Image.createImage("/imgCatapult.png");
			imgTank[3]=Image.createImage("/imgMulti.png");
			imgTank[4]=Image.createImage("/imgDuke.png");
			imgTank[5]=Image.createImage("/imgIon.png");
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
		lm=new LayerManager();
		map=new Class_Map(lm,Class_Map.ID);
		bulletBurst=new Class_Burst(imgBulletBurst,(byte)16,(byte)16);
		aimSign=new Class_AimSign(imgAimSign,(byte)8,(byte)8);
		ownTank=new Class_Tank[Class_Map.ownTankNum];
		for(byte i=0;i<Class_Map.ownTankNum;i++)
		{
			ownTank[i]=new Class_Tank(imgTank[i%3],(byte)22,(byte)16,(byte)(i%3));
			//根据出生点ID来设置坦克初始位置
			ownTank[i].CPID=ownTank[i].setCP((byte) (i*2));
		}

		enemyTank=new Class_Tank[Class_Map.enemyTankNum];
		for(byte i=0;i<Class_Map.enemyTankNum;i++)
		{
			enemyTank[i]=new Class_Tank(imgTank[i%3+3],(byte)22,(byte)16,(byte)(i%3+3));
			enemyTank[i].CPID=enemyTank[i].setCP((byte) (i*2+1));
		}
		//从地图信息中读取数值来初始化存活坦克数量
		aliveOwnTankCount=Class_Map.ownTankNum;
		aliveEnemyTankCount=Class_Map.enemyTankNum;
		
		t1=new Thread()
		{
			public void run()
			{
				if(!isThreadCancel)
				{
					long start=System.currentTimeMillis();
					//处理回合轮换
					setTurnChange();
					for(byte i=0;i<Class_Map.ownTankNum;i++)
					{
						//处理我方坦克在屏幕中
						ownTank[i].setView(lm);
						ownTank[i].setLimit();
						//如果我方坦克处于活动状态
						if(ownTank[i].isActive)
						{
							//如果该坦克没死
							if(ownTank[i].HP>0)
							{
								turnTimeCount++;
								if(turnTimeCount>200)isTurnChange=true;
								aimSign.add(lm);
								aimSign.setMove(ownTank[i]);
								ownTank[i].setMove();
								Class_Camera.setFollow(ownTank[i]);
								ownTank[i].setBulSel();
								ownTank[i].setAim(lm);
								ownTank[i].setCharge();
							}
							//否则结束当前回合
							else
								isTurnChange=true;
						}
						
						if(ownTank[i].bullet.isVisible())
						{
							//处理子弹移动
							ownTank[i].bullet.setMove(ownTank[i],lm);
							Class_Camera.setFollow(ownTank[i].bullet);
						}
					}
					
					for(byte i=0;i<Class_Map.enemyTankNum;i++)
					{
						enemyTank[i].setView(lm);
						enemyTank[i].setLimit();
						if(enemyTank[i].isActive)
						{
							if(enemyTank[i].HP>0)
							{
								turnTimeCount++;
								if(turnTimeCount>200)isTurnChange=true;								
								aimSign.add(lm);
								aimSign.setMove(enemyTank[i]);
								setEnemyTankAI();
								Class_Camera.setFollow(enemyTank[i]);
								ownTank[i].setBulSel();
								enemyTank[i].setAim(lm);
							}else
								isTurnChange=true;
						}
						
						if(enemyTank[i].bullet.isVisible())
						{
							enemyTank[i].isActive=false;
							enemyTank[i].bullet.setMove(enemyTank[i],lm);
							Class_Camera.setFollow(enemyTank[i].bullet);
						}
					}

					//处理炮弹爆炸火花
					bulletBurst.setBurst(lm);
					//处理碰撞探测
					collides();
					//处理摄象机移动
					setCameraMove();
					lm.setViewWindow(Class_Camera.x,Class_Camera.y,Class_Camera.width,Class_Camera.height);
					lm.paint(g,0,0);
					long end=System.currentTimeMillis();
					showMessage();
					flushGraphics();
					int time=(int)(end-start);
//					System.out.println(time);
					try {
						if(time<80)
							Thread.sleep(80-time);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					mainMIDlet.dis.callSerially(this);
				}
			}
		};
		t1.start();
	}
	
	protected void keyPressed(int keyCode)
	{
		switch(keyCode)
		{
			case -3:
			case 52:
			{
				if(isSelBullet)
				{
					if(curBulType==0)
						curBulType=3;
					else curBulType--;
				}else if(!isDetect&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
				{
					for(byte i=0;i<Class_Map.ownTankNum;i++)
					{
						if(ownTank[i].isActive)
						{
							ownTank[i].isAim=false;
							ownTank[i].direction=1;
							break;
						}
					}
				}
				break;
			}
			
			case -4:
			case 54:
			{
				if(isSelBullet)
				{
					if(curBulType==3)
						curBulType=0;
					else curBulType++;
				}else if(!isDetect&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
					for(byte i=0;i<Class_Map.ownTankNum;i++)
					{
						if(ownTank[i].isActive)
						{
							ownTank[i].isAim=false;
							ownTank[i].direction=2;
							break;
						}
					}
				break;
			}
			
			case 56:
			case -1:
			{
				if(isSelBullet)
				{
					if(curBulType==0)
						curBulType=3;
					else curBulType--;
				}else if(!isDetect&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
				{
					for(byte i=0;i<Class_Map.ownTankNum;i++)
					{
						if(ownTank[i].isActive)
						{
							ownTank[i].isAim=true;
							ownTank[i].aimRotaDir=1;
							break;
						}
					}
				}
				break;
			}
			case 50:
			case -2:
			{
				if(isSelBullet)
				{
					if(curBulType==3)
						curBulType=0;
					else curBulType++;
				}else if(!isDetect&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
				{
					for(byte i=0;i<Class_Map.ownTankNum;i++)
					{
						if(ownTank[i].isActive)
						{
							ownTank[i].isAim=true;
							ownTank[i].aimRotaDir=2;
							break;
						}
					}
				}
				break;
			}
			
			case 53:
			case -5:
			{
				if(!isDetect&&!isSelBullet&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
				{
					for(byte i=0;i<Class_Map.ownTankNum;i++)
					{
						if(ownTank[i].isActive)
						{
							ownTank[i].isAim=false;
							ownTank[i].isCharge=true;
							break;
						}
					}
				}
				break;
			}
			
			case -7:
			{
				isThreadCancel=true;
				Canvas_StageSelect.isThreadCancel=false;
				mainMIDlet.dis.setCurrent(new Canvas_StageSelect(mainMIDlet));
				break;
			}
			
			case 49:
			{
				if(!isSelBullet)
				{
					isDetect=!isDetect;
					for(byte i=0;i<Class_Map.ownTankNum;i++)
					{
						if(ownTank[i].isActive)
						{
							ownTank[i].isAim=false;
							ownTank[i].isCharge=false;
							break;
						}
					}
				}
				break;
			}
			case 51:
			{
				if(!isDetect)
				{
					isSelBullet=!isSelBullet;
					for(byte i=0;i<Class_Map.ownTankNum;i++)
					{
						if(ownTank[i].isActive)
						{
							ownTank[i].isAim=false;
							ownTank[i].isCharge=false;
							break;
						}
					}
				}
				break;
			}
		}
	}
	
	protected void keyReleased(int keyCode)
	{
		switch(keyCode)
		{
			case 52:
			case -3:
			case 54:
			case -4:
			{
				for(byte i=0;i<Class_Map.ownTankNum;i++)
				{
					if(ownTank[i].isActive)
					{
						ownTank[i].direction=0;
						break;
					}
				}
				break;
			}
			case 56:
			case -1:
			case 50:
			case -2:
			{
				for(byte i=0;i<Class_Map.ownTankNum;i++)
				{
					if(ownTank[i].isActive)
					{
						ownTank[i].aimRotaDir=0;
						break;
					}
				}
				break;
			}
			

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -