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

📄 gamecenter.java

📁 利用j2me所开发的一个角色扮演类游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
import java.util.TimerTask;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;

public class GameCenter extends GameCanvas implements Runnable, CommandListener {
	private GameMain gameMain;
	private Random rand;
	private boolean isRunPlayGame;
	private long currentGateTimes, startTimes;
	private int mapWidth;// 保存地图的列数
	private int mapHeight;// 保存地图的行数
	private int screenW; // 手机屏幕宽度
	private int screenH; // 手机屏幕高度
	private DongSprite dongSprite; // 创建精灵对象
	private Bomb[] bomb = new Bomb[30];// 创建炸弹精灵
	private LayerManager layerManager; // 创建层管理器对象
	private TiledLayer bombLayer;// 显示炸弹层
	private Image img = null;
	private int dDirection;// 保存精灵行走的方向
	private int dDistance;// 保存精灵行走的距离
	private int tollGateNum;// 关卡数
	private int totalTollGate;// 总关卡数
	private TiledLayer bgLayer; // 背景地图层
	public static TiledLayer zaLayer;// 障碍层
	private Sprite mb;// 目标精灵(下一关的触发器)
	private int xView, yView;// 保存可视窗口的开始坐标
	private Command usebomb1;// 创建使用炸弹的按钮
	private Command returnGameMenu;// 创建返回游戏主菜单的按钮
	private Command cancelMenu;// 清除菜单
	private int[] down = { 0, 1, 2 };
	private int[] left = { 6, 7, 8 };
	private int[] right = { 3, 4, 5 };
	private int[] up = { 9, 10, 11 };
	private Player gameBgMusicPlayer;// 游戏背景音乐
	private Player jBombMusicPlayer;// 捡炸弹的声音
	private Player uBombMusicPlayer;// 使用炸弹的声音
	private Score score;
	private Settings settings;
	private static MyTextBox myTextBox;
	
	private byte bgMap[][] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 3, 3, 3, 3, 2, 2, 2, 0, 0, 0 },
			{ 0, 2, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0 },
			{ 0, 0, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0 },
			{ 0, 0, 2, 2, 2, 1, 1, 0, 2, 2, 2, 0 },
			{ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 2 },
			{ 0, 0, 2, 0, 2, 2, 2, 2, 0, 0, 0, 2 },
			{ 0, 0, 2, 0, 2, 2, 0, 2, 0, 3, 0, 1 },
			{ 0, 0, 2, 0, 2, 0, 0, 3, 3, 3, 0, 2 },
			{ 2, 0, 2, 0, 2, 0, 2, 2, 2, 0, 2, 2 },
			{ 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0 },
			{ 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0 },
			{ 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 2, 2, 4, 0, 1, 1, 0, 2, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 },
			{ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 2, 0, 0, 3, 3, 0, 0 },
			{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3 },
			{ 0, 0, 3, 3, 3, 0, 3, 3, 3, 3, 0, 3 },
			{ 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0 } };

	protected GameCenter(GameMain game, Score score, Settings settings) {
		// 程序初始化
		super(true);
		gameMain = game;
		this.score = score;
		this.settings = settings;
		this.setFullScreenMode(true);
		rand = new Random();
		layerManager = new LayerManager();
		dDirection = 64;
		dDistance = 2;
		this.mapHeight = 16;
		this.mapWidth = 8;
		screenW = this.getWidth();
		screenH = this.getHeight();
		totalTollGate = 8;// 总关卡数

	}

	public void newGame(int tollGateNum1) {

		// 音乐对象初始化
		try {
			this.settings.loadSettings();
		} catch (Exception e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		gameMain.gameSound = this.settings.sound;
		isRunPlayGame = true; // 启动RUN方法
		InputStream is = getClass().getResourceAsStream("gamemusic.mid");
		try {
			gameBgMusicPlayer = Manager.createPlayer(is, "audio/midi");
			gameBgMusicPlayer.prefetch();
			gameBgMusicPlayer.setLoopCount(-1);
			gameBgMusicPlayer.setMediaTime(0);
			if (gameMain.gameSound == 1) {
				gameBgMusicPlayer.start();
			}
		} catch (IOException e1) {
			e1.printStackTrace();
		} catch (MediaException e1) {
			e1.printStackTrace();
		}

		is = getClass().getResourceAsStream("Mine.wav");
		try {
			jBombMusicPlayer = Manager.createPlayer(is, "audio/X-wav");
			jBombMusicPlayer.prefetch();

		} catch (IOException e1) {
			e1.printStackTrace();
		} catch (MediaException e1) {
			e1.printStackTrace();
		}
		is = getClass().getResourceAsStream("BOMB3.WAV");
		try {
			uBombMusicPlayer = Manager.createPlayer(is, "audio/X-wav");
			uBombMusicPlayer.prefetch();
		} catch (IOException e1) {
			e1.printStackTrace();
		} catch (MediaException e1) {
			e1.printStackTrace();
		}

		usebomb1 = new Command("使用炸弹", Command.OK, 0);
		cancelMenu = new Command("清除菜单", Command.CANCEL, 0);
		returnGameMenu = new Command("返回主菜单", Command.EXIT, 0);
		this.addCommand(usebomb1);
		this.addCommand(returnGameMenu);
		this.addCommand(cancelMenu);
		this.setCommandListener(this);
		if (layerManager.getSize() > 2) {
			layerManager.remove(dongSprite);
			layerManager.remove(dongSprite.bomb);
			layerManager.remove(mb);
			for (int i = 0; i < 30; i++) {
				layerManager.remove(bomb[i]);
			}
			layerManager.remove(zaLayer);
			layerManager.remove(bgLayer);
		}
		this.tollGateNum = tollGateNum1;
		dongSprite = new DongSprite(GameCenter.createImage("/dongsprite.png"),
				38, 70);
		if (this.tollGateNum == 1) {
			dongSprite.bombNum = this.tollGateNum;
		}
		layerManager.append(dongSprite);// 加载精灵
		layerManager.append(dongSprite.bomb);
		mb = new Sprite(GameCenter.createImage("/mb.png"));
		layerManager.append(mb);
		int tempBomb = 2 * tollGateNum;
		img = GameCenter.createImage("/bomb1.png");
		for (int i = 0; i < 30; i++) {// 初始化地图上的炸弹
			bomb[i] = new Bomb(img, 75, 80);
			if (tempBomb > 0) {
				layerManager.append(bomb[i]);
				tempBomb--;
			}
		}
		loadMap(tollGateNum);// 装载相应关卡地图
		placeSprite(dongSprite, zaLayer);
		placeMbSprite(dongSprite, mb, zaLayer);
		for (int i = 0; i < 2 * tollGateNum; i++) {
			placeSprite(bomb[i], zaLayer);
		}
		dongSprite.screenW = bgLayer.getWidth();
		dongSprite.screenH = bgLayer.getHeight();
		dongSprite.meetSprite.setPosition(dongSprite.getX()
				+ (dongSprite.getWidth() - dongSprite.meetSprite.getWidth())
				/ 2, dongSprite.getY()
				+ (dongSprite.getHeight() - dongSprite.meetSprite.getHeight()));
		xView = dongSprite.getX() - ((screenW - dongSprite.getWidth()) / 2);
		yView = dongSprite.getY() - ((screenH - dongSprite.getHeight()) / 2);
		if (xView < 0) {
			xView = 0;
		} else if (bgLayer.getWidth() - xView < screenW) {
			xView = bgLayer.getWidth() - screenW;
		}
		if (yView < 0) {
			yView = 0;
		} else if (bgLayer.getHeight() - yView < screenH) {
			yView = bgLayer.getHeight() - screenH;
		}
		layerManager.setViewWindow(xView, yView, screenW, screenH - 30);
		Thread t = new Thread(this);
		t.start();
	}

	private void placeSprite(Sprite sprite, TiledLayer barrier) {
		// 把精灵放在一个随机的位置上,并且保证不与给定的层相碰撞
		int x, y;
		x = Math.abs(rand.nextInt() % barrier.getWidth()) - sprite.getWidth();
		y = Math.abs(rand.nextInt() % barrier.getHeight()) - sprite.getHeight();
		sprite.setPosition(x, y);
		while (sprite.collidesWith(barrier, true) || x <= 0 || x > this.screenW
				|| y <= 0 || y > this.screenH) {
			x = Math.abs(rand.nextInt() % barrier.getWidth())
					- sprite.getWidth();
			y = Math.abs(rand.nextInt() % barrier.getHeight())
					- sprite.getHeight();
			sprite.setPosition(x, y);
		}
	}

	private void placeMbSprite(Sprite dongSprite, Sprite sprite,
			TiledLayer barrier) {
		// 把精灵放在一个随机的恰当的位置上,并且保证不与给定的层相碰撞
		String tempMap[];
		tempMap = new String[108];
		int i = 0;
		for (int col = 0; col < 8; col++) {
			for (int row = 1; row < 16; row++) {// 第一行不放
				if ((bgMap[row][col] == 0)
						&& (row * 40 - dongSprite.getY() > 100)
						&& (col * 60 - dongSprite.getX() > 60)) {
					tempMap[i] = Integer.toString(col) + "/"
							+ Integer.toString(row);
					i++;
				}
			}
		}
		int tempi, x, y;
		tempi = rand.nextInt(i);
		x = Integer.parseInt(tempMap[tempi].substring(0, tempMap[tempi]
				.indexOf("/"))) * 60;
		y = Integer.parseInt(tempMap[tempi].substring(tempMap[tempi]
				.indexOf("/") + 1)) * 40;
		sprite.setPosition(x + 3, y + 70); // 保证七仙女全部显示在屏幕上
		
	}

	private void nextTallGate(int tollGateNum) {
		// 下一关
		this.tollGateNum++;
		// 得到本关最多的能用的时间
		currentGateTimes = (8 - (this.tollGateNum - 2)) * 30 * 1000;
		startTimes = System.currentTimeMillis(); // 当前关开始时间

		dongSprite.bombNum = this.tollGateNum;
		loadNextMap(tollGateNum);// 装载相应关卡地图
		placeSprite(dongSprite, zaLayer);
		placeMbSprite(dongSprite, mb, zaLayer);
		for (int i = 0; i < 2 * tollGateNum; i++) {
			placeSprite(bomb[i], zaLayer);
		}
		dongSprite.screenW = bgLayer.getWidth();
		dongSprite.screenH = bgLayer.getHeight();
		dongSprite.meetSprite.setPosition(dongSprite.getX()
				+ (dongSprite.getWidth() - dongSprite.meetSprite.getWidth())
				/ 2, dongSprite.getY()
				+ (dongSprite.getHeight() - dongSprite.meetSprite.getHeight()));
		xView = dongSprite.getX() - ((screenW - dongSprite.getWidth()) / 2);
		yView = dongSprite.getY() - ((screenH - dongSprite.getHeight()) / 2);
		if (xView < 0) {
			xView = 0;
		} else if (bgLayer.getWidth() - xView < screenW) {
			xView = bgLayer.getWidth() - screenW;
		}
		if (yView < 0) {
			yView = 0;
		} else if (bgLayer.getHeight() - yView < screenH) {
			yView = bgLayer.getHeight() - screenH;
		}
		layerManager.setViewWindow(xView, yView, screenW, screenH - 30);
	}

	private void nextTallGateMap(int tollGateNum, int width, int height) {
		// 产生下一关的地图
		// width 格子的列数,height 格子的行数 width*height 等于总格子数
		long mapNum = width * height;
		int Holdbackpercent = 20 + (tollGateNum - 1) * 5; // 根据关卡数决定有多少个没有障碍物的格子
		long HolebackNum = (mapNum / 100) * Holdbackpercent
				+ (mapNum / 10 - (mapNum / 100) * 10) * (Holdbackpercent / 10);
		for (int col = 0; col < 8; col++) {
			for (int row = 0; row < 16; row++) {

⌨️ 快捷键说明

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