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

📄 war.java

📁 一个用Java开发的射击类游戏
💻 JAVA
字号:
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.GameCanvas;
import java.io.IOException;

public class War extends GameCanvas implements Runnable
{
	//********************************全局静态变量
	//背景尺寸
	public	static			int	WIDTH = 0;
	public	static			int	HEIGHT = 0;
	//左边框和上边框
	public	static	final	int	WAR_FIELD_LEFT = 20;
	public	static	final	int	WAR_FIELD_TOP = 20;
	//战斗区域尺寸,应该是主角的尺寸的整数倍
	public	static	final	int	WAR_FIELD_WIDTH = 120;
	public	static	final	int	WAR_FIELD_HEIGHT = 160;
	//主角的尺寸
	public	static	final	int	ACTOR_WIDTH = 24;
	public	static	final	int	ACTOR_HEIGHT = 32;
	//战争开始时主角默认显示的帧
	public	static	final	int	DEFAULT_FRAME = 0;
	//水平和垂直数目
	public	static	final	int	H_NUMBER = WAR_FIELD_WIDTH/ACTOR_WIDTH;
	public	static	final	int	V_NUMBER = WAR_FIELD_HEIGHT/ACTOR_HEIGHT;
	//循环延迟
	public	static	final	int	DISPLAY_TIME = 100;
	//最大墙数目
	public	static	final	int	MAX_WALL_NUMBER = 10;
	//行动过程中的水平及垂直步长
	public	static	final	int	STEP_WIDTH = 2;
	public	static	final	int	STEP_HEIGHT = 2;
	//子弹尺寸
	public	static	final	int	BULLET_WIDTH = 20;
	public	static	final	int	BULLET_HEIGHT = 16;
	//最大子弹数目
	public	static	final	int	MAX_BULLET_NUMBER = 10;	
	//子弹速度
	public	static	final	int	BULLET_RATE = 1;
	//子弹存活时间
	public	static	final	int	BULLET_LIVE_TIME = 1000 * 10 / DISPLAY_TIME;
	//发射间隔
	public	static	final	int	BULLET_INTERVAL = 3;
	//敌人尺寸
	public	static	final	int	ENEMY_WIDTH = 24;
	public	static	final	int	ENEMY_HEIGHT = 32;
	//敌人最大数目
	public	static	final	int	MAX_ENEMY_NUMBER = 10;
	//同时显示的敌人的最大数目
	public	static	final	int	DISPLAY_ENEMY_NUMBER = 10;
	//敌人产生的坐标
	public	static	final	int	ENEMY_DISPLAY_X = 20;
	public	static	final	int	ENEMY_DISPLAY_Y = 20;
	//敌人速度
	public	static	final	int	ENEMY_MIN_RATE = 1;
	public	static	final	int	ENEMY_MID_RATE = 2;
	public	static	final	int	ENEMY_MAX_RATE = 4;
	//爆炸动画尺寸
	public	static	final	int	EXPLODE_FLASH_WIDTH = 24;
	public	static	final	int	EXPLODE_FLASH_HEIGHT = 18;
	//主角死亡下落速度
	public	static	final	int	ACTOR_DEAD_RATE = 3;
	//主角死亡后,屏幕色彩值变化速度
	public	static	final	int	ACTOR_DEAD_COLOR = 5;

	//********************************全局非静态变量
	private MainSelect	mainSelect = null;
	//循环控制器
	private boolean		stop = false;
	//本部分是否正常终止
	private boolean		terminatedNormally = false;
	
	//主角现在坐标
	private int	currentX = 0, currentY = 0;
	
	//wall变量
	private WallManager	wallManager = null;
	private Image	wallImage = null;
	

	public War(MainSelect ms)
	{
		super(true);
		mainSelect		= ms;
		setFullScreenMode(true);
		WIDTH			= getWidth();//240
		HEIGHT			= getHeight();//309
		
		initSprite();		
		new Thread(this).start();
	}
	private void initSprite()
	{
		try
		{
			wallImage = Image.createImage("/wall.png");
			wallManager = new WallManager(wallImage, MAX_WALL_NUMBER);
		}
		catch (IOException ie)
		{
		}
	}
	public void run()
	{
		Graphics	g = getGraphics();
		while(!stop)
		{
			input();
			drawScreen(g);
			flushGraphics();
			try
			{
				Thread.sleep(DISPLAY_TIME);
			}
			catch (InterruptedException ie)
			{
			}
		}
		if (!terminatedNormally)
		{
			WarMidlet.dis.setCurrent(mainSelect);
		}
	}
	private void input()
	{
		int keyState=getKeyStates();
		//UP
		if((keyState&GameCanvas.UP_PRESSED)!=0)
		{
			if (currentY != 0)
			{
				currentY--;
			}
		}
		//DOWN
		if((keyState&GameCanvas.DOWN_PRESSED)!=0)
		{		
			if (currentY != V_NUMBER - 1)
			{
				currentY++;
			}
		}
		//LEFT
		if((keyState&GameCanvas.LEFT_PRESSED)!=0)
		{		
			if (currentX != 0)
			{
				currentX--;
			}
		}
		//RIGHT
		if((keyState&GameCanvas.RIGHT_PRESSED)!=0)
		{	
			if (currentX != H_NUMBER - 1)
			{
				currentX++;
			}
		}
		//布墙命令
		if((keyState&GameCanvas.FIRE_PRESSED)!=0)
		{
			wallManager.addWall(currentX, currentY);
			//System.out.println("布墙完成");
		}
		//布墙完成,开始战争
		if((keyState&GameCanvas.GAME_A_PRESSED)!=0)
		{
			stop = true;
			//System.out.println("布墙完成");
			WarMidlet.dis.setCurrent(new WarGame(mainSelect, wallManager));
			//System.out.println("布墙完成");
			terminatedNormally = true;
		}
		//将布墙完成时主角的坐标存储起来
		wallManager.setActorPosition(currentX, currentY);
		/*if (currentX == 4 && currentY == 4)
		{
			stop = true;
			WarMidlet.dis.setCurrent(new WarGame(mainSelect, wallManager));
			terminatedNormally = true;
		}*/
	}
	private void drawScreen(Graphics g)
	{
		//绘制背景
		g.setColor(0,0,0);
		g.fillRect(0,0,WIDTH,HEIGHT);
		//绘制战争区域
		g.setColor(0,255,0);
		g.fillRect(WAR_FIELD_LEFT, WAR_FIELD_TOP, WAR_FIELD_WIDTH, WAR_FIELD_HEIGHT);
		//绘制敌人产生地
		g.setColor(255,0,0);
		g.fillRect(WAR_FIELD_LEFT, WAR_FIELD_TOP, ENEMY_WIDTH, ENEMY_HEIGHT);
		//绘制墙
		wallManager.updateWall(g);
		//绘制选择标记
		g.setColor(0,0,255);
		g.drawRect(WAR_FIELD_LEFT + currentX * ACTOR_WIDTH, WAR_FIELD_TOP + currentY * ACTOR_HEIGHT, ACTOR_WIDTH, ACTOR_HEIGHT);
	}
}

⌨️ 快捷键说明

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