menucanvas.java

来自「手机射击游戏源代码,nokia s60模拟器开发包,eclipse工具开发.不可」· Java 代码 · 共 527 行

JAVA
527
字号
package src;

import java.io.IOException;

import javax.microedition.lcdui.*;
import javax.microedition.media.MediaException;
import javax.microedition.rms.RecordStore;

import com.nokia.mid.ui.FullCanvas;

public class MenuCanvas extends FullCanvas implements Runnable {
	//public class MenuCanvas extends Canvas implements Runnable {
	//	Graphics g;
	GameCanvas gamecanvas;

	cirsis cs;

	SoundManager sound;

	Sprite s, ok;

	Thread t;

	int count, curret, ox, oye, mod, hiScores[],music[], x[];

	boolean contiue, newgame, ismenu, iscredite, ishelp, isoption, isscores,
			showImgs[], running;

	Image img[];

	static boolean onsound = true;

	String[] imgname = { "logo1", "logo2", "beijing", "anjian", "music" };

	String[] creditestr = { "游戏运营商:", "北京阳光加信软件技术有限公司",
			"Raymobile Software Inc.", "vmsp@raymobile.com", "010-51778844",
			"www.raymobile.com", "", "游戏开发商:", "大连游戏工厂-火蚁工作室",
			"zhangm@gamefactory", "0411-85875111-8007 8027", "", "项目组成员:",
			"项目经理:张牧", "策划:赵少培", "美术:赵少培", "主程序:于锐", "程序:王志强 赵勇哲 谭默",
			"美术指导:张牧", "程序指导:王浩", "策划指导:黄作秋" };

	String[] helpstr = { "1 键:手雷", "2 键:向上举枪", "3 键:跳", "4 键:向后", "5 键:开火/确认",
			"6 键:向前", "8 键:蹲", "左软键:菜单", "右软键:菜单", "", "故事背景:",
			"    公元2160年,智能机器人", "已经普及全世界,他们能帮助", "人类完成日常的一切工作。它",
			"们是通过一台中枢服务器控制。", "但是有一天这台巨大的电脑不", "知道为什么感染了病毒,它把",
			"机器人的行为全都改变了,这", "些机器人都失去了控制。它们", "杀死了发明者,跑到街道上为", "非作歹,见人就杀。这种病毒",
			"绵延的很快,不到一个小时的", "时间全纽约州的机器人都感染", "了这种病毒。Alex家就有这机",
			"器人,机器人杀死他的妻子和", "儿女跑了出去。Alex万分悲痛", ",他发誓要为家人报仇。Alex",
			"冲向了控制机器人的主机房,", "破坏了主机。最后终于发现原", "来病毒是外星人向地球投放的,",
			"不管怎样,地球终于恢复了平", "静!" };

	public MenuCanvas(cirsis cs) {
		this.cs = cs;
		gamecanvas = new GameCanvas(cs, this);
		showImgs = new boolean[3];
		count = 0;
		curret = 0;
		mod = 1;
		contiue = false;
		newgame = true;
		running = true;
		ismenu = true;
		iscredite = false;
		ishelp = false;
		isoption = false;
		isscores = false;
		img = new Image[5];
		try {
			for (int i = 0; i < 5; i++) {
				img[i] = Image.createImage("/res/" + imgname[i] + ".png");
			}
		} catch (IOException e2) {
			e2.printStackTrace();
		}

		hiScores = new int[5];
		music=new int[1];
		try {
			System.out.println("11");
			hiScores = readHiscores("h",0,5);
			System.out.println("22");
			music=readHiscores("m",1,1);
			System.out.println("33");
		} catch (Exception e) {
		}
		if (music[0]-1==0)ox=0;
		if (music[0]-1==1)ox=1;
//		ox = 0;
		ok = new Sprite(img[4], 26, 13);
		sound = new SoundManager();

		s = new Sprite(img[3], 44, 13);
		doThreadStart();
	}

	protected void paint(Graphics g) {
		g.setColor(255, 255, 255);
		g.fillRect(0, 0, getWidth(), getHeight());
		drawImg(showImgs[0], img[0], 25, 50, g); //logo1
		drawImg(showImgs[1], img[1], 35, 50, g); //logo2
		drawImg(showImgs[2], img[2], 0, 0, g); //beijing
		if (ismenu)
			paintMenu(g);
		if (iscredite)
			paintCredite(g);
		if (ishelp)
			paintHelp(g);
		if (isoption)
			paintOptions(g);
		if (isscores)
			paintScores(g);
	}

	void paintMenu(Graphics g) {
		if (showImgs[2]) {
			if (newgame) {
				for (int i = 0; i < 6; i++) {
					drawAnjian(g, i, 60, 50 + i * 25, i * 2);
				}
			} else {
				drawAnjian(g, 0, 60, 50, 12);
				for (int i = 1; i < 6; i++) {
					drawAnjian(g, i, 60, 50 + i * 25, i * 2);
				}
			}
		}
	}

	void drawImg(boolean a, Image img, int d, int b, Graphics g) {
		if (a)
			g.drawImage(img, d, b, 0);
	}

	void drawAnjian(Graphics g, int a, int px, int py, int frame) {
		if (curret == a) {
			s.setFrame(frame);
			s.setPosition(px, py);
			s.paint(g);
		} else {
			s.setFrame(frame + 1);
			s.setPosition(px, py);
			s.paint(g);
		}
	}

	public void paintCredite(Graphics g) {
		g.setColor(255, 255, 255);
		g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD,
				Font.SIZE_SMALL));
		k++;
		for (int i = 0; i < creditestr.length; i++) {
			if (200 + i * 15 - k > 50)
				g.drawString(creditestr[i], 5, 200 + i * 15 - k, 0);
		}
	}

	int j = 0;

	public void paintHelp(Graphics g) {
		g.setColor(255, 255, 255);
		g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD,
				Font.SIZE_SMALL));
		j++;
		for (int i = 0; i < helpstr.length; i++) {
			if (200 + i * 15 - j > 50)
				g.drawString(helpstr[i], 10, 200 + i * 15 - j, 0);
		}
	}

	public void paintOptions(Graphics g) {		
		ok.setFrame(0);
		ok.setPosition(70, 60);
		ok.paint(g);
		switch (ox) {
		case 0:
			ok.setFrame(1);
			ok.setPosition(76, 84);
			ok.paint(g);

			ok.setFrame(4);
			ok.setPosition(76, 108);
			ok.paint(g);
			break;
		case 1:
			ok.setFrame(3);
			ok.setPosition(76, 108);
			ok.paint(g);

			ok.setFrame(2);
			ok.setPosition(76, 84);
			ok.paint(g);
			break;
		}
	}

	public void paintScores(Graphics g) {
		g.setColor(255, 255, 255);
		for (int i = 0; i < 5; i++) {
			g.drawString(Integer.toString(hiScores[i]), 80, 90 + (i * 15), 0);
		}
	}

	void logoKeyPressed(int keycode){
		if (showImgs[0]) {
			showImgs[0] = false;
			showImgs[1] = true;
			return;
		}
		if (showImgs[1]) {
			showImgs[1] = false;
			showImgs[2] = true;
			return;
		}
	}
	
	protected void optionsKeyPressed(int keycode) {
		switch (keycode) {
		case -1:
			playmidi(sound.menuPlayer);
			ox = 0;
			repaint();
			break;
		case -5:
			//			mod++;
			switch (ox) {
			case 0:
//				SoundManager.playBackGroundMid();
				music[0]=1;
				onsound = true;
				writeScores("m",0,1,music[0]);
				break;
			case 1:
				SoundManager.closeSound();
				music[0]=2;
				onsound = false;
				writeScores("m",0,1,music[0]);
				break;
			}
			ismenu = true;
			isoption = false;
			break;
		case -2:
			playmidi(sound.menuPlayer);
			ox = 1;
			repaint();
			break;
		}
	}

	void helpKeyPressed(int keycode) {
		switch (keycode) {
		case -1:
			break;
		case -5:
			mod++;
			ismenu = true;
			ishelp = false;
			j = 0;
			break;
		case -2:
			break;
		}
	}

	int k = 0;

	void crediteKeyPressed(int keycode) {
		switch (keycode) {
		case -1:
			break;
		case -5:
			mod++;
			ismenu = true;
			iscredite = false;
			k = 0;
			break;
		case -2:
			break;
		}
	}

	/** 确认 * */
	void test(int keycode) {
		if (showImgs[2]) {
			switch (curret) {
			case 0:
				if (newgame) {
					//					gamecanvas = null;
					//					System.gc();
					//					gamecanvas = new GameCanvas(cs, this);
					cs.display.setCurrent(gamecanvas);
					gamecanvas.running = true;
					contiue = true;
					gamecanvas.doThreadStart();
					running = false;
					img[0] = null;
					img[1] = null;
					newgame = false;
					j = 0;
					k = 0;
				} else {
					if (contiue) {
						gamecanvas.running = true;
						gamecanvas.doThreadStart();
						cs.display.setCurrent(gamecanvas);
					}
				}
				break;
			case 2:
				//				cs.display.setCurrent(scores);
				mod++;
				if (mod % 2 == 0) {
					isscores = true;
					ismenu = false;
				} else {
					isscores = false;
					ismenu = true;
				}
				break;
			case 3:
				isoption = true;
				ismenu = false;
				break;
			case 4:
				mod++;
				if (mod % 2 == 0) {
					iscredite = true;
					ismenu = false;
				} else {
					iscredite = false;
					ismenu = true;
				}
				break;
			case 1:
				mod++;
				if (mod % 2 == 0) {
					ishelp = true;
					ismenu = false;
				} else {
					ishelp = false;
					ismenu = true;
				}
				break;
			case 5:
				cs.exit();
				break;
			default:
				break;
			}
		}
	}

	public void keyPressed(int keycode) {
		if (isoption) {
			optionsKeyPressed(keycode);
			return;
		}
		if (ishelp) {
			helpKeyPressed(keycode);
			return;
		}
		if (iscredite) {
			crediteKeyPressed(keycode);
			return;
		}

		if(showImgs[0]||showImgs[1]){
			logoKeyPressed(keycode);
			return;
		}
		
		switch (keycode) {
		case -1:
			playmidi(sound.menuPlayer);
			curret--;
			if (curret < 0)
				curret = 5;
			break;
		case -5:
			test(keycode);
			break;
		case 53:
			test(keycode);
			break;
		case -2:
			playmidi(sound.menuPlayer);
			curret++;
			if (curret > 5)
				curret = 0;
			break;
		case -11:
			cs.exit();
			break;
		default: //按任意键跳过logo
			if (showImgs[0]) {
				showImgs[0] = false;
				showImgs[1] = true;
				return;
			}
			if (showImgs[1]) {
				showImgs[1] = false;
				showImgs[2] = true;
			}
			break;
		}
	}

	void playmidi(javax.microedition.media.Player player) {
		try {
			player.start();
		} catch (MediaException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
	}

	public void run() {
		while (true) {
			if (count < 81)
				count++;
			if (count == 5)
				showImgs[0] = true;
			if (count == 40) {
				showImgs[0] = false;
				showImgs[1] = true;
			}
			if (count == 80) {
				showImgs[1] = false;
				showImgs[2] = true;
			}

			try {
				Thread.sleep(40);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			repaint();
		}
	}

	public void writeScores(String id,int imin,int imax,int gg) {
		try {
			RecordStore.deleteRecordStore(id);
		} catch (Exception e) {
		}
		RecordStore rs = null;
		try {
			rs = RecordStore.openRecordStore(id, true);
		} catch (Exception e) {
		}

		for (int i = imin; i < imax; i++) {
			byte[] recoredDate = Integer.toString(gg).getBytes();
			try {
				rs.addRecord(recoredDate, 0, recoredDate.length);
			} catch (Exception e) {
			}
		}
		try {
			rs.closeRecordStore();
		} catch (Exception e) {
		}
	}

	public void updateHiscores(int s) {
		int i;
		for (i = 0; i < 5; i++) {
			if (s > hiScores[i])
				break;
		}
		if (i < 5) {
			for (int j = 4; j > i; j--) {
				hiScores[j] = hiScores[j - 1];
			}
			hiScores[i] = s;
		}
	}

	/** read高分和option **/
	public int[] readHiscores(String s,int imin,int imax) {
		int ss[]=new int[imax];
		RecordStore rs = null;
		try {
			rs = RecordStore.openRecordStore(s, false);
		} catch (Exception e) {
		}
		if (rs != null) {
			try {
				int len;
				byte[] recordDate = new byte[8];
				for (int i = imin; i <= imax; i++) {
					if (rs.getRecordSize(i) > recordDate.length) {
						recordDate = new byte[rs.getRecordSize(i)];
					}
					len = rs.getRecord(i, recordDate, 0);
					ss[i-1] = (Integer.parseInt(new String(recordDate,
							0, len)));
				}
			} catch (Exception e) {
				System.out.println("readHiscores error");
				e.printStackTrace();

			}
			try {
				rs.closeRecordStore();
			} catch (Exception e) {
			}
		} else {
			for (int i = imin; i < imax; i++){
				if (s=="m"){
					ss[i-1] = 0;
				}
				if (s=="h") {
					ss[i]=0;
				}
			}			
		}
		
		return ss;
	}

	/** 启动描绘线程的方法 */
	void doThreadStart() {
		t = new Thread(this);
		t.start();
	}
}

⌨️ 快捷键说明

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