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

📄 menucanvas.java

📁 使用java 开发的手机小游戏
💻 JAVA
字号:

import javax.microedition.lcdui.*;

public class MenuCanvas extends Canvas implements Runnable {

	final int MENU = 1; //菜单

	final int NEWGAME = 2; //新游戏

	final int CONTINUE = 3; //继续

	final int HIGHSCORE = 4; //高分榜

	final int OPTION = 5; //设置程序

	final int HOWTOPLAY = 6; //如何游戏

	final int ABOUT = 7; //关于

	final int EXIT = 8; //退出

	public Image imgScore; //高分榜图片

	public Image imgLogo; //LOGO图片

	public Image imgBgMap; //背景图片

	public Image imgDuo; //菜单标识图片

	public Image imgLevelBg; //关卡背景图片

	public Image imgNewgame; //新游戏菜单图片

	public Image imgContinue; //继续菜单图片

	public Image imgHighscore; //高分榜菜单图片

	public Image imgOption; //设置菜单图片

	public Image imgHowtoplay; //帮助菜单图片

	public Image imgAbout; //关于菜单图片

	public Image imgExit; //退出菜单图片

	public Image imgNewgame0; //新游戏菜单选择图片

	public Image imgContinue0; //继续菜单选择图片

	public Image imgHighscore0; //高分榜菜单选择图片

	public Image imgOption0; //设置菜单选择图片

	public Image imgHowtoplay0; //帮助菜单选择图片

	public Image imgAbout0; //关于菜单选择图片

	public Image imgExit0; //退出菜单选择图片

	boolean firstDisp; //第一次运行标志

	boolean fd; //是否运行了NEWGAME

	int PT = MENU; //当前菜单选择

	int menuY = 59; //初始菜单位置

	public int data[]; // 存放图片像素信息

	public int alpha; // 透明度的值

	Thread thread; //线程

	Display display; //主程序传的DISPLAY对象

	GoldSea myG; //主程序传的myGame对象

	TileCanvas bgmap; //游戏画面

	Rcav rcav; //高分榜画面

	OptionCanvas opcav; //声音选项画面

	HelpCanvas helpcav; //帮助画面

	AboutCanvas aboutcav; //关于画面

	Graphics bg; //后台缓存画图笔

	Image buf; //后台缓存画图板

	public MenuCanvas(GoldSea myG, Display display) {
		super();

		this.setFullScreenMode(true); //设置画布全屏显示

		firstDisp = true; //TODO 
		fd = true;
		this.myG = myG;
		this.display = display;

		rcav = new Rcav(this, display);
		opcav = new OptionCanvas(this, display);
		helpcav = new HelpCanvas(this, display);
		aboutcav = new AboutCanvas(this, display);

		thread = new Thread(this); //线程实例化
		thread.start(); //打开线程

		buf = Image.createImage(180, 196);
		bg = buf.getGraphics(); //将缓冲对象的Graphics附给bg

		//		导入图片
		try {
			imgLogo = Image.createImage("/picres/logo.png");
			imgBgMap = Image.createImage("/picres/bg_map_blank.png");
			imgScore = Image.createImage("/picres/score_title.png");
			imgDuo = Image.createImage("/picres/duo.png");
			imgLevelBg = Image.createImage("/picres/level_bg.png");

			imgNewgame = Image.createImage("/picres/newgame_normal.png");
			imgContinue = Image.createImage("/picres/continue_normal.png");
			imgHighscore = Image.createImage("/picres/highscore_normal.png");
			imgOption = Image.createImage("/picres/option_normal.png");
			imgHowtoplay = Image.createImage("/picres/howtoplay_normal.png");
			imgAbout = Image.createImage("/picres/about_normal.png");
			imgExit = Image.createImage("/picres/exit_normal.png");
			imgNewgame0 = Image.createImage("/picres/newgame.png");
			imgContinue0 = Image.createImage("/picres/continue.png");
			imgHighscore0 = Image.createImage("/picres/highscore.png");
			imgOption0 = Image.createImage("/picres/option.png");
			imgHowtoplay0 = Image.createImage("/picres/howtoplay.png");
			imgAbout0 = Image.createImage("/picres/about.png");
			imgExit0 = Image.createImage("/picres/exit.png");

			data = new int[imgLogo.getWidth() * imgLogo.getHeight()];
			imgLogo.getRGB(data, 0, imgLogo.getWidth(), 0, 0, imgLogo
					.getWidth(), imgLogo.getHeight());

		} catch (java.io.IOException e) {
		}
	}

	public void paint(Graphics g) {
		if (firstDisp) {
			// 对图片的透明度进行处理
			for (int i = 0; i < data.length; i++) {
				// 将取得的原有图片的颜色值与我们提供的透明度的值相组合
				data[i] = (data[i] & 0x00FFFFFF) | alpha;
			}
			// 组合完后,在用我们组合好后的颜色来画图片, 最后面的参数表示是否处理透明度的值
			// 清屏
			bg.setColor(0x000000);
			bg.fillRect(0, 0, getWidth(), getHeight());
			// 显示透明化的图片
			bg.drawRGB(data, 0, imgLogo.getWidth(), 0, 45, imgLogo.getWidth(),
					imgLogo.getHeight(), true);

		} else if (PT == MENU) {
			paintMenu(bg);
		} else if (PT == NEWGAME) {
			paintNgame(bg);
		} else if (PT == CONTINUE) {
			paintContinue(bg);
		} else if (PT == HIGHSCORE) {
			paintHighScore(bg);
		} else if (PT == OPTION) {
			paintOption(bg);
		} else if (PT == HOWTOPLAY) {
			paintHelp(bg);
		} else if (PT == ABOUT) {
			paintAbout(bg);
		}

		g.drawImage(buf, 0, 0, Graphics.LEFT | Graphics.TOP); //显示后台图片
	}

	public void paintMenu(Graphics g) {
		// 主目录显示
		g.drawImage(imgBgMap, 0, 0, Graphics.TOP | Graphics.LEFT);
		g.drawImage(imgDuo, 25, menuY - 3, Graphics.TOP | Graphics.LEFT);
		g.drawImage(imgNewgame0, 43, 59, Graphics.TOP | Graphics.LEFT);
		g.drawImage(imgContinue0, 43, 74, Graphics.TOP | Graphics.LEFT);
		g.drawImage(imgHighscore0, 43, 89, Graphics.TOP | Graphics.LEFT);
		g.drawImage(imgOption0, 43, 104, Graphics.TOP | Graphics.LEFT);
		g.drawImage(imgHowtoplay0, 43, 119, Graphics.TOP | Graphics.LEFT);
		g.drawImage(imgAbout0, 43, 134, Graphics.TOP | Graphics.LEFT);
		g.drawImage(imgExit0, 43, 149, Graphics.TOP | Graphics.LEFT);
		switch (menuY) {
		case 59:
			g.drawImage(imgNewgame, 43, menuY, Graphics.TOP | Graphics.LEFT);
			break;
		case 74:
			g.drawImage(imgContinue, 43, menuY, Graphics.TOP | Graphics.LEFT);
			break;
		case 89:
			g.drawImage(imgHighscore, 43, menuY, Graphics.TOP | Graphics.LEFT);
			break;
		case 104:
			g.drawImage(imgOption, 43, menuY, Graphics.TOP | Graphics.LEFT);
			break;
		case 119:
			g.drawImage(imgHowtoplay, 43, menuY, Graphics.TOP | Graphics.LEFT);
			break;
		case 134:
			g.drawImage(imgAbout, 43, menuY, Graphics.TOP | Graphics.LEFT);
			break;
		case 149:
			g.drawImage(imgExit, 43, menuY, Graphics.TOP | Graphics.LEFT);
			break;
		}
	}

	//新游戏
	public void paintNgame(Graphics g) {
		if (fd) {
			g.drawImage(imgBgMap, 0, 0, Graphics.TOP | Graphics.LEFT);
			g.drawImage(imgLevelBg, 35, 60, Graphics.TOP | Graphics.LEFT);
			g.setColor(0xf8f244);
			g.drawString("THE 1 LEVEL", 65, 85, Graphics.TOP | Graphics.LEFT);
			g.drawString("Loading...", 75, 110, Graphics.TOP | Graphics.LEFT);
			fd = false;
			repaint();
		} else {
			bgmap = new TileCanvas(this, display);
			if (opcav.getSoundSwitch())
				bgmap.Sound();
			display.setCurrent(bgmap);
		}
	}

	//继续
	public void paintContinue(Graphics g) {
		if (fd == false) {
			if (bgmap.isRun == true)
				display.setCurrent(bgmap);
		} else {
			PT = MENU;
			menuY = 59;
			repaint();
		}
	}

	//排行榜
	public void paintHighScore(Graphics g) {
		SoundEffects.getInstance().startHighScoreSound();
		display.setCurrent(rcav);
		SoundEffects.getInstance().stopHighScoreSound();
	}

	//选项
	public void paintOption(Graphics g) {
		display.setCurrent(opcav);
	}

	//帮助
	public void paintHelp(Graphics g) {
		display.setCurrent(helpcav);
	}

	//关于
	public void paintAbout(Graphics g) {
		display.setCurrent(aboutcav);
	}

	// 操作
	protected void keyPressed(int key) {
		int k = getGameAction(key);
		if (k == Canvas.UP) {
			menuY -= 15;
			if (menuY < 59)
				menuY = 149;
			repaint();
		} else if (k == Canvas.DOWN) {
			menuY += 15;
			if (menuY > 149)
				menuY = 59;
			repaint();
		} else if (k == 8 || key == -7) {
			ProcessCommand();
			repaint();
		} else if (key == -6) {
			if (!opcav.getSoundSwitch())
				SoundEffects.getInstance().stopBackgroundSound();
//			BackCommand();
			repaint();
		}
	}

	public void run() {
		int j;
		while (true) {
			if (firstDisp) {
				try {
					Thread.sleep(250);
				} catch (Exception e) {
					e.printStackTrace();
				}
				for (j = 8; j < 256; j += 25) {
					// 动态处理透明度的值
					alpha = j << 24;
					repaint();
					try {
						Thread.sleep(250);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				alpha = 255 << 24;
				repaint();
				try {
					Thread.sleep(1000);
				} catch (Exception e) {
					e.printStackTrace();
				}
				for (j = 255; j > 0; j -= 40) {
					alpha = j << 24;
					repaint();
					try {
						Thread.sleep(250);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				alpha = 0 << 24;
				repaint();
				try {
					Thread.sleep(500);
				} catch (Exception e) {
					e.printStackTrace();
				}

				firstDisp = false; //关闭第一次显示开关
				repaint();
			}
		}
	}

	public void ProcessCommand() {
		if (menuY == 59) {
			PT = NEWGAME;
		} else if (menuY == 74) {
			PT = CONTINUE;
		} else if (menuY == 89) {
			PT = HIGHSCORE;
		} else if (menuY == 104) {
			PT = OPTION;
		} else if (menuY == 119) {
			PT = HOWTOPLAY;
		} else if (menuY == 134) {
			PT = ABOUT;
		} else if (menuY == 149) {
			try {
				myG.notifyDestroyed();
			} catch (Exception E) {
			}
		}
	}
	
	public void BackCommand() {
		PT = MENU;
		menuY = 59;
	}
}

⌨️ 快捷键说明

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