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

📄 zoncanvas.java

📁 基于J2ME 开发的冒险类手机游戏
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		}

		return true;
	}

	public boolean loadScore() {
		try {
			RecordStore rs = RecordStore.openRecordStore("hiscore", false);
			RecordEnumeration re = rs.enumerateRecords(null, null, false);

			if (!re.hasNextElement()) { // no record exist
				return false;
			}

			byte[] scoreData = re.nextRecord();

			ByteArrayInputStream bis = new ByteArrayInputStream(scoreData);
			DataInputStream dis = new DataInputStream(bis);

			hiScore = dis.readInt();
/*			soundOn = dis.readBoolean();
			soundType = dis.readInt();*/

			scoreData = null;

			dis.close();
			dis = null;
			bis.close();
			bis = null;

			re.destroy();
			re = null;
			rs.closeRecordStore();
			rs = null;

			System.gc();
		} catch (Exception e) {
			return false;
		}

		return true;
	}

	public boolean saveGame() {
		try {
			RecordStore rs = RecordStore.openRecordStore("savedata", true);
			RecordEnumeration re = rs.enumerateRecords(null, null, false);

			int id;
			while (re.hasNextElement()) {
				id = re.nextRecordId();
				rs.deleteRecord(id);
			}

			re.destroy();
			re = null;

			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			DataOutputStream dos = new DataOutputStream(bos);

			dos.writeInt(gameStage);
			dos.writeInt(soundType);
			dos.writeBoolean(soundOn);
			
			
			dos.writeInt(mainMap.getOffsetX());
			dos.writeInt(mainMap.getOffsetY());
			dos.writeInt(showTipCount);
			dos.writeInt(tipFlag);
	

			if (!spriteLead.saveData(dos))
				return false;

			int i, count = enemyBirds.length;
			for (i = 0; i < count; i++)
				if (!enemyBirds[i].saveData(dos))
					return false;

			count = enemySpring.length;
			for (i = 0; i < count; i++)
				if (!enemySpring[i].saveData(dos))
					return false;

			count = stepStone.length;
			for (i = 0; i < count; i++)
				if (!stepStone[i].saveData(dos))
					return false;

			count = magicBoxes.length;
			for (i = 0; i < count; i++)
				if (!magicBoxes[i].saveData(dos))
					return false;

			count = fence.length;
			for (i = 0; i < count; i++)
				if (!fence[i].saveData(dos))
					return false;

			count = deadZone.length;
			for (i = 0; i < count; i++)
				if (!deadZone[i].saveData(dos))
					return false;

			switch (gameStage) {
			case GAMESTAGE_ONE:
				count = enemyTops.length;
				for (i = 0; i < count; i++)
					if (!enemyTops[i].saveData(dos))
						return false;
				break;
			case GAMESTAGE_TWO:
				count = enemyBlueFeet.length;
				for (i = 0; i < count; i++)
					if (!enemyBlueFeet[i].saveData(dos))
						return false;
				break;
			case GAMESTAGE_THREE:
				count = stepYellow.length;
				for (i = 0; i < count; i++)
					if(!stepYellow[i].saveData(dos))
						return false;
				count = enemyTops.length;
				for (i = 0; i < count; i++)
					if (!enemyTops[i].saveData(dos))
						return false;
				break;
			 default:
				return false;

			}

			byte[] saveData = bos.toByteArray();
			rs.addRecord(saveData, 0, saveData.length);

			saveData = null;

			dos.close();
			dos = null;
			bos.close();
			bos = null;

			rs.closeRecordStore();
			rs = null;

			System.gc();
		} catch (Exception e) {
			return false;
		}

		return true;
	}

	public boolean loadGame() {
		try {
			RecordStore rs = RecordStore.openRecordStore("savedata", false);
			RecordEnumeration re = rs.enumerateRecords(null, null, false);

			if (!re.hasNextElement())
				throw new Exception();

			byte[] saveData = re.nextRecord();

			ByteArrayInputStream bis = new ByteArrayInputStream(saveData);
			DataInputStream dis = new DataInputStream(bis);
			
			gameStage = dis.readInt();
			soundType = dis.readInt();
			soundOn = dis.readBoolean();
			
			if (!initStage())
				return false;

			
			int x = dis.readInt();
			int y = dis.readInt();
			mainMap.setPosition(x, y);
			showTipCount = dis.readInt();
			tipFlag = dis.readInt();


			if (!spriteLead.loadData(dis))
				return false;

			// birds, spring, tops, stone, box, fence

			int i, count = enemyBirds.length;
			for (i = 0; i < count; i++)
				if (!enemyBirds[i].loadData(dis))
					return false;

			count = enemySpring.length;
			for (i = 0; i < count; i++)
				if (!enemySpring[i].loadData(dis))
					return false;

			count = stepStone.length;
			for (i = 0; i < count; i++)
				if (!stepStone[i].loadData(dis))
					return false;

			count = magicBoxes.length;
			for (i = 0; i < count; i++)
				if (!magicBoxes[i].loadData(dis))
					return false;

			count = fence.length;
			for (i = 0; i < count; i++)
				if (!fence[i].loadData(dis))
					return false;

			count = deadZone.length;
			for (i = 0; i < count; i++)
				if (!deadZone[i].loadData(dis))
					return false;

			switch (gameStage) {
			case GAMESTAGE_ONE:
				count = enemyTops.length;
				for (i = 0; i < count; i++)
					if (!enemyTops[i].loadData(dis))
						return false;
				break;
			case GAMESTAGE_TWO:
				count = enemyBlueFeet.length;
				for (i = 0; i < count; i++)
					if (!enemyBlueFeet[i].loadData(dis))
						return false;
				break;
			case GAMESTAGE_THREE:
				count = stepYellow.length;
				for(i = 0; i < count; i++)
					if(!stepYellow[i].loadData(dis))
						return false;
				count = enemyTops.length;
				for (i = 0; i < count; i++)
					if (!enemyTops[i].loadData(dis))
						return false;
				break;
			 default:
				return false;
			}
			
			appState = APPSTATE_GAME;

			saveData = null;

			dis.close();
			dis = null;
			bis.close();
			bis = null;

			re.destroy();
			re = null;

			rs.closeRecordStore();
			rs = null;

			System.gc();
		} catch (Exception e) {
			return false;
		}

		return true;
	}

	private void handleOffset() {
		
		if (spriteLead.getOffsetX() != scrWidth / 2) {
			canvasOffsetX = scrWidth / 2 - spriteLead.getOffsetX();

		} else {
			canvasOffsetX = 0;
		}
		if (-mainMap.getOffsetX() - canvasOffsetX > mainMap.getMapWidth()
				* mainMap.getTileWidth() - scrWidth - 1
				|| mainMap.getOffsetX() + canvasOffsetX > 0) {

			if (mainMap.getOffsetX() + canvasOffsetX > 0)
				canvasOffsetX = -mainMap.getOffsetX();
			else
				canvasOffsetX = 0;
		}

		if (spriteLead.getOffsetY() != scrHeight / 2) {
			canvasOffsetY = scrHeight / 2 - spriteLead.getOffsetY();
		} else {
			canvasOffsetY = 0;
		}
		if (mainMap.getOffsetY() + mainMap.getMapHeight()
				* mainMap.getTileHeight() + canvasOffsetY < scrHeight
				|| mainMap.getOffsetY() + canvasOffsetY > 0) {
			if(mainMap.getOffsetY() + mainMap.getMapHeight()
				* mainMap.getTileHeight() + canvasOffsetY < scrHeight){
				canvasOffsetY = scrHeight - (mainMap.getOffsetY() + mainMap.getMapHeight() * mainMap.getTileHeight());
			} else
				canvasOffsetY = 0;
			
		}

		if (canvasOffsetX != 0 || canvasOffsetY != 0) {
			spriteLead.move(canvasOffsetX, canvasOffsetY);
			
			mainMap.move(canvasOffsetX, canvasOffsetY);
			
			switch (gameStage) {
			case GAMESTAGE_ONE:
				for (int i = 0; i < enemyTops.length; i++) {
					enemyTops[i].move(canvasOffsetX, canvasOffsetY);
				}
				break;
			case GAMESTAGE_TWO:
				for (int i = 0; i < enemyBlueFeet.length; i++) {
					enemyBlueFeet[i].move(canvasOffsetX, canvasOffsetY);
				}
				break;
			case GAMESTAGE_THREE:
				for (int i = 0; i < stepYellow.length; i++) {
					stepYellow[i].move(canvasOffsetX, canvasOffsetY);
				}
				for (int i = 0; i < enemyTops.length; i++) {
					enemyTops[i].move(canvasOffsetX, canvasOffsetY);
				}
				break;
			}

			// share
			for (int i = 0; i < fence.length; i++) {
				fence[i].move(canvasOffsetX, canvasOffsetY);
			}
			for (int i = 0; i < enemySpring.length; i++) {
				enemySpring[i].move(canvasOffsetX, canvasOffsetY);
			}
			for (int i = 0; i < enemyBirds.length; i++) {
				enemyBirds[i].move(canvasOffsetX, canvasOffsetY);
			}
			for (int i = 0; i < stepStone.length; i++) {
				stepStone[i].move(canvasOffsetX, canvasOffsetY);
			}
			for (int i = 0; i < magicBoxes.length; i++) {
				magicBoxes[i].move(canvasOffsetX, canvasOffsetY);
			}

			for (int i = 0; i < deadZone.length; i++) {
				deadZone[i].move(canvasOffsetX, canvasOffsetY);
			}
		}
	}

	protected void paint(Graphics g) {
		
		switch (appState) {
		case APPSTATE_IDLE:
			return;
		case APPSTATE_SPLASH:
			splashCount++;
			if (splashCount == 1)
				canvasUpdate = true;
			else
				canvasUpdate = false;
			if (splashCount > SPLASH_DELAY) {
				splashCount = 0;
				splashStage++;
				canvasUpdate = true;
				if (splashStage > 1){
					canvasUpdate = true;
					initMenu();
					appState = APPSTATE_MENU;
					return;
					
				}
			}
			if (!canvasUpdate)
				return;
			splash1Image = ZonLayer.findImage("splash1");
			splash2Image = ZonLayer.findImage("splash2");
			splash3Image = ZonLayer.findImage("splash3");
			switch (splashStage) {
			case 0:
				g.setColor(0xFFFFFF);
				g.fillRect(0, 0, scrWidth, scrHeight);
				g.drawImage(splash1Image, scrWidth / 2, scrHeight / 2,
						Graphics.HCENTER | Graphics.VCENTER);
				break;
			case 1:
				g.setColor(0xFFFFFF);
				g.fillRect(0, 0, scrWidth, scrHeight);
				g.drawImage(splash2Image, 1, 1, Graphics.LEFT | Graphics.TOP);
				g.drawImage(splash3Image, scrWidth / 2,
						60 + (scrHeight - 78) / 2, Graphics.HCENTER
								| Graphics.VCENTER);
				break;
			}
			return;
			
		case APPSTATE_SOUNDSET:
			drawMenuBG(g);
			if(subMenuSel == 0){
				g.setClip(scrWidth / 2 - 40, scrHeight / 4 + 2 * 13 - 4, 16, 16);
				g.drawImage(cursorImage, scrWidth / 2 - 40, scrHeight / 4 + 2 * 13 - 4, Graphics.LEFT | Graphics.TOP);
			}else{
				g.setClip(scrWidth / 2 - 40, scrHeight / 4 + 4 * 13 - 4, 16, 16);
				g.drawImage(cursorImage, scrWidth / 2 - 40, scrHeight / 4 + 4 * 13 - 4, Graphics.LEFT | Graphics.TOP);

			}
			g.setClip(scrWidth / 2 - 12, scrHeight / 4 + 4 * 13, 23, 13);
			g.drawImage(menuItemImage, scrWidth / 2 - 38,
					scrHeight / 4 + 4 * 13 - 91, Graphics.LEFT | Graphics.TOP);

			
			switch(soundType){
//			0声音关  1背景音开  2 效果音开
			case 0:
				g.setClip(scrWidth / 2 - 16, scrHeight / 4 + 2 * 13, 24, 13);
				g.drawImage(menuItemImage, scrWidth / 2 - 16,
						scrHeight / 4 + 2 * 13 - 39, Graphics.LEFT | Graphics.TOP);
				g.setClip(scrWidth / 2 + 8, scrHeight / 4 + 2 * 13, 13, 13);
				g.drawImage(menuItemImage, scrWidth / 2 + 8 - 13, scrHeight / 4 + 2 * 13 - 91, Graphics.LEFT | Graphics.TOP);

				break;
			case 1:
				g.setClip(scrWidth / 2 - 20, scrHeight / 4 + 2 * 13, 39, 13);
				g.drawImage(menuItemImage, scrWidth / 2 - 20,
						scrHeight / 4 + 2 * 13 - 110, Graphics.LEFT | Graphics.TOP);
				g.setClip(scrWidth / 2 + 19, scrHeight / 4 + 2 * 13, 13, 13);
				g.drawImage(menuItemImage, scrWidth / 2 + 19, scrHeight / 4 + 2 * 13 - 91, Graphics.LEFT | Graphics.TOP);

				break;
			case 2:
				g.setClip(scrWidth / 2 - 20, scrHeight / 4 + 2 * 13, 39, 13);
				g.drawImage(menuItemImage, scrWidth / 2 - 20,
						scrHeight / 4 + 2 * 13 - 123, Graphics.LEFT | Graphics.TOP);
				g.setClip(scrWidth / 2 + 19, scrHeight / 4 + 2 * 13, 13, 13);
				g.drawImage(menuItemImage, scrWidth / 2 + 19, scrHeight / 4 + 2 * 13 - 91, Graphics.LEFT | Graphics.TOP);

				break;
			}

			g.setColor(255 << 16 | 100 << 8 | 0);
			g.setClip(0, 30, scrWidth, 20);
			g.drawString(CHOOSESOUND_TIP, scrWidth / 2, 30, Graphics.HCENTER | Graphics.TOP);

			break;
		case APPSTATE_MENU:
			// draw menu background
			
/*			if (!canvasUpdate)
				return;*/

			if (fontHeight == 0) {
				Font font = g.getFont();
				fontHeight = font.getHeight();
				font = null;
			}
			
			canvasUpdate = false;

			drawMenuBG(g);

⌨️ 快捷键说明

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