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

📄 canvas_main.java

📁 05年游戏学院一个学生写的项目
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			case 53:
			case -5:
			{
				if(isSelBullet)
					isSelBullet=false;
				else if(!isDetect)
				{
					for(byte i=0;i<Class_Map.ownTankNum;i++)
					{
						if(ownTank[i].isActive&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
						{
							//设置开火
							ownTank[i].setFire(lm);
							break;
						}
					}
				}
				break;
			}
		}
	}
	
	public void collides()
	{
		for(byte i=0;i<Class_Map.ownTankNum;i++)
		{
			if(ownTank[i].collidesWith(Class_Map.barrierLayer,false))
				ownTank[i].move(-ownTank[i].dX,-ownTank[i].dY);
			
			if(ownTank[i].bullet.collidesWith(Class_Map.barrierLayer,true))
			{
				if(curBulType!=1&&curBulType!=2)
				{
					ownTank[i].bullet.delete(lm);
					bulletBurst.showBurst(ownTank[i].bullet,lm);
				}
			}
			
			for(byte j=0;j<Class_Map.ownTankNum;j++)
			{
				if(ownTank[i].bullet.collidesWith(ownTank[j],false)&&i!=j)
				{
					ownTank[i].bullet.delete(lm);
					bulletBurst.showBurst(ownTank[i].bullet,lm);
					if(curBulType==2)
					{
						if(ownTank[j].HP<=0)
							aliveOwnTankCount++;
						ownTank[j].HP+=ownTank[i].bullet.damage;
					}else if(ownTank[j].HP>0)
					{
						ownTank[j].HP-=ownTank[i].bullet.damage;
						//如果敌方坦克死亡,则敌方剩余坦克减1
						if(ownTank[j].HP<=0)
							aliveOwnTankCount--;
					}
					
					
				}
			}
			
			for(byte j=0;j<Class_Map.enemyTankNum;j++)
			{
				if(ownTank[i].bullet.collidesWith(enemyTank[j],false))
				{
					ownTank[i].bullet.delete(lm);
					bulletBurst.showBurst(ownTank[i].bullet,lm);
					
					if(curBulType==2)
					{
						if(enemyTank[j].HP<=0)
							aliveEnemyTankCount++;
						enemyTank[j].HP+=ownTank[i].bullet.damage;
					}else if(enemyTank[j].HP>0)
					{
						enemyTank[j].HP-=ownTank[i].bullet.damage;
						if(enemyTank[j].HP<=0)
							aliveEnemyTankCount--;
					}
				}
			}
		}
		
		for(byte i=0;i<Class_Map.enemyTankNum;i++)
		{
			if(enemyTank[i].collidesWith(Class_Map.barrierLayer,false))
			{
				enemyTank[i].move(-enemyTank[i].dX,-enemyTank[i].dY);
			}
			
			if(enemyTank[i].bullet.collidesWith(Class_Map.barrierLayer,false))
			{
				if(curBulType!=1&&curBulType!=2)
				{
					enemyTank[i].bullet.delete(lm);
					bulletBurst.showBurst(enemyTank[i].bullet,lm);
				}
			}
			
			for(byte j=0;j<Class_Map.enemyTankNum;j++)
			{
				if(enemyTank[i].bullet.collidesWith(enemyTank[j],false)&&i!=j)
				{
					enemyTank[i].bullet.delete(lm);
					bulletBurst.showBurst(enemyTank[i].bullet,lm);
					
					if(curBulType==2)
					{
						if(enemyTank[j].HP<=0)
							aliveEnemyTankCount++;
						enemyTank[j].HP+=ownTank[i].bullet.damage;
					}else if(enemyTank[j].HP>0)
					{
						enemyTank[j].HP-=ownTank[i].bullet.damage;
						if(enemyTank[j].HP<=0)
							aliveEnemyTankCount--;
					}
				}
			}
			
			for(byte j=0;j<Class_Map.ownTankNum;j++)
			{
				if(enemyTank[i].bullet.collidesWith(ownTank[j],false))
				{
					enemyTank[i].bullet.delete(lm);
					bulletBurst.showBurst(enemyTank[i].bullet,lm);
					
					if(curBulType==2)
					{
						if(ownTank[j].HP<=0)
							aliveOwnTankCount++;
						ownTank[j].HP+=ownTank[i].bullet.damage;
					}else if(ownTank[j].HP>0)
					{
						ownTank[j].HP-=ownTank[i].bullet.damage;
						//如果敌方坦克死亡,则敌方剩余坦克减1
						if(ownTank[j].HP<=0)
							aliveOwnTankCount--;
					}
				}
			}
		}
	}
	
	//回合轮换的方法
	public void setTurnChange()
	{
		//如果要更换回合
		if(isTurnChange)
		{
			//取消观察模式
			isDetect=false;
			//取消炮弹选择模式
			isSelBullet=false;
			//重置当前炮弹类型
			curBulType=0;
			//如果是我方回合
			if(!isEnemyTurn)
			{
				//关闭回合更换开关
				isTurnChange=false;
				//取消我方活动索引坦克活动权限
				ownTank[iOwnTankActive].isActive=false;
				//产生AI随机数
				AI=(byte) Math.abs(rd.nextInt()%10);
				//敌方活动索引坦克进行回合初始化
				enemyTank[iEnemyTankActive].turnInit();
				//回合时间计数器重置
				turnTimeCount=0;
				//我方坦克活动索引加1,即下一辆将获得索引
				iOwnTankActive++;
				//正式交换回合
				isEnemyTurn=!isEnemyTurn;
			}
			//否则(意思与上面差不多,不重复了)
			else
			{
				isTurnChange=false;
				curBulType=0;
				enemyTank[iEnemyTankActive].isActive=false;
				ownTank[iOwnTankActive].turnInit();
				turnTimeCount=0;
				iEnemyTankActive++;
				isEnemyTurn=!isEnemyTurn;
			}
		}
		//如果索引到达最后,则跳转到第一辆坦克位置
		if(iOwnTankActive==Class_Map.ownTankNum)
		{
			iOwnTankActive=0;
		}
		if(iEnemyTankActive==Class_Map.enemyTankNum)
		{
			iEnemyTankActive=0;
		}
		
		//如果敌方坦克死光了,则返回选关画面,并提供下一关的选择权限
		if(aliveEnemyTankCount<=0)
		{
			curBulType=0;
			isThreadCancel=true;
			if(Class_Map.ID==Class_Map.IDMax&&Class_Map.IDMax<4)
				Class_Map.IDMax++;
			mainMIDlet.dis.setCurrent(new Canvas_StageSelect(mainMIDlet));
			Canvas_StageSelect.isThreadCancel=false;
		}
		
		if(aliveOwnTankCount<=0)
		{
			curBulType=0;
			isThreadCancel=true;
			mainMIDlet.dis.setCurrent(new Canvas_StageSelect(mainMIDlet));
			Canvas_StageSelect.isThreadCancel=false;
		}
	}
	
	public void setEnemyTankAI()
	{
		//如果敌方活动索引坦克子弹不可见并且摄象机已经重置
		if(!enemyTank[iEnemyTankActive].bullet.isVisible()&&Class_Camera.x==Class_Camera.x0&&Class_Camera.y==Class_Camera.y0)
		{
			//活动状态计数器开始累加
			AICount++;
			//如果活动状态计数器小于10,则处于移动状态
			if(AICount<=10)
			{
				if(AI%2==0)
					enemyTank[iEnemyTankActive].direction=1;
				else
					enemyTank[iEnemyTankActive].direction=2;
				
				enemyTank[iEnemyTankActive].setMove();
			}
			//否则活动状态计数器重置,并且开火
			else if(AICount<=20)
			{
				if(AI>4&&enemyTank[AI%Class_Map.enemyTankNum].HP<enemyTank[AI%Class_Map.enemyTankNum].HPMax&&enemyTank[iEnemyTankActive].bulletCount[2]>0&&iEnemyTankActive!=(AI%Class_Map.enemyTankNum))
				{
					curBulType=2;
					enemyTank[iEnemyTankActive].lockTarget(enemyTank[AI%Class_Map.enemyTankNum],AI);
				}else
				{
					if(enemyTank[iEnemyTankActive].bulletCount[AI%4]>0)
					{
						if(AI%4!=2)
						{
							curBulType=(byte) (AI%4);
						}else
							curBulType=1;
					}else
						curBulType=0;
					enemyTank[iEnemyTankActive].lockTarget(ownTank[AI%Class_Map.ownTankNum],AI);
				}
			}
			else
			{
				AICount=0;
				enemyTank[iEnemyTankActive].setBulSel();
				enemyTank[iEnemyTankActive].setFire(lm);
			}
		}
	}
	
	//处理观察模式的方法
	public void setCameraMove()
	{
		int keyCode=getKeyStates();
		//如果处于观察模式,则根据按键响应来控制摄象机移动
		if(isDetect)
		{
			if((keyCode&UP_PRESSED)!=0)
			{
				if(Class_Camera.y<10)
					Class_Camera.y=0;
				else
					Class_Camera.y-=10;
			}else if((keyCode&DOWN_PRESSED)!=0)
			{
				if(Class_Camera.y>Class_Map.height-Class_Camera.height-10)
					Class_Camera.y=(short) (Class_Map.height-Class_Camera.height);
				else
					Class_Camera.y+=10;
			}else if((keyCode&LEFT_PRESSED)!=0)
			{
				if(Class_Camera.x<10)
					Class_Camera.x=0;
				else
					Class_Camera.x-=10;
			}else if((keyCode&RIGHT_PRESSED)!=0)
			{
				if(Class_Camera.x>Class_Map.width-Class_Camera.width-10)
					Class_Camera.x=(short) (Class_Map.width-Class_Camera.width);
				else
					Class_Camera.x+=10;
			}
		}
		//如果退出观察模式,则重置摄象机
		else Class_Camera.rePut();
	}
	
	//显示屏幕信息的方法
	public void showMessage()
	{
		g.setFont(Font.getFont(0,1,0));
		//显示敌方坦克生命
		for(byte i=0;i<Class_Map.enemyTankNum;i++)
		{
			if(Class_Camera.isShow(enemyTank[i])&&enemyTank[i].HP>0)
			{
				g.setColor(255,0,0);
				g.drawString(""+enemyTank[i].HP,enemyTank[i].getX()+enemyTank[i].getWidth()-Class_Camera.x+2,enemyTank[i].getY()+enemyTank[i].getHeight()-Class_Camera.y-13,0);
			}
		}
		
		for(byte i=0;i<Class_Map.ownTankNum;i++)
		{
			//画坦克旁边的生命数值
			if(Class_Camera.isShow(ownTank[i])&&ownTank[i].HP>0)
			{
				g.setColor(255,255,255);
				g.drawString(""+ownTank[i].HP,ownTank[i].getX()+ownTank[i].getWidth()-Class_Camera.x+2,ownTank[i].getY()+ownTank[i].getHeight()-Class_Camera.y-13,0);
			}
		}
		
		for(byte i=0;i<Class_Map.ownTankNum;i++)
		{
			if(ownTank[i].isActive)
			{
				//如果处于瞄准状态,则显示瞄准角度
				if(ownTank[i].isAim)
				{
					g.setColor(252,255,2);
					g.drawString(""+ownTank[i].aimAngle,ownTank[i].getX()-Class_Camera.x+4,ownTank[i].getY()-Class_Camera.y-15,0);
				}
				
				//如果处于蓄力状态,则显示力量槽
				if(ownTank[i].isCharge)
				{
					g.setColor(255,255,255);
					g.drawRoundRect(ownTank[i].getX()-Class_Camera.x,ownTank[i].getY()-Class_Camera.y-15,ownTank[i].getWidth(),4,2,2);
					g.setColor(198,255,0);
					g.fillRoundRect(ownTank[i].getX()-Class_Camera.x+1,ownTank[i].getY()-Class_Camera.y-14,ownTank[i].chargeV*ownTank[i].getWidth()/160,3,1,1);
				}
				
				//如果处于观察模式,则出现提示框
				if(isDetect)
				{
					g.setColor(0,0,255);
					g.drawRoundRect(Class_Camera.width/2-41,19,82,21,10,10);
					g.setColor(0,255,255);
					g.drawRoundRect(Class_Camera.width/2-40,20,80,20,10,10);
					g.setColor(50,125,255);
					g.fillRoundRect(Class_Camera.width/2-39,21,78,19,10,10);
					g.setColor(130,245,255);
					g.drawString("观察模式中...",(Class_Camera.width-Font.getFont(0,1,0).stringWidth("观察模式中..."))/2,22,0);
				}

				//如果处于炮弹选择模式,则出现炮弹选择框
				if(isSelBullet)
				{
					g.setColor(0,0,255);
					g.drawRoundRect(Class_Camera.width-91,Class_Camera.height-101,91,101,20,20);
					g.setColor(0,255,255);
					g.drawRoundRect(Class_Camera.width-90,Class_Camera.height-100,90,100,20,20);
					g.setColor(50,125,255);
					g.fillRoundRect(Class_Camera.width-89,Class_Camera.height-99,89,99,20,20);
					g.setColor(130,245,255);
					g.drawString(" 名称      剩余",Class_Camera.width-80,Class_Camera.height-95,0);
					g.drawString("普通弹     "+ownTank[i].bulletCount[0],Class_Camera.width-80,Class_Camera.height-80,0);
					g.drawString("穿甲弹     "+ownTank[i].bulletCount[1],Class_Camera.width-80,Class_Camera.height-65,0);
					g.drawString("回复弹     "+ownTank[i].bulletCount[2],Class_Camera.width-80,Class_Camera.height-50,0);
					g.drawString("强化弹     "+ownTank[i].bulletCount[3],Class_Camera.width-80,Class_Camera.height-35,0);
					g.setColor(255,255,255);
					g.drawRoundRect(Class_Camera.width-83,Class_Camera.height-95+Font.getFont(0,1,0).getHeight()+15*curBulType,40,15,2,2);
				}
				break;
			}
		}

		g.setFont(Font.getFont(0,0,16));
		//显示回合时间
		g.setColor(255,255,255);
		g.drawString("回合时间:"+turnTimeCount/10+"/20",10,10,0);
	}
}

⌨️ 快捷键说明

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