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

📄 fps.java

📁 jiandan的游戏 希望大家能喜欢
💻 JAVA
字号:
package Item;

import java.io.IOException;
import java.util.Random;
import java.util.Vector;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;

public class FPS extends GameCanvas implements Runnable {

	FPS_MIDlet fps;

	static final int W = 176;

	static final int H = 208;

	Player player;// 玩家类

	Ball ball;// 子弹类

	Graphics g;// 画笔

	Vector VBALL;// 子弹队列

	boolean on;// 子弹开关

	Vector VNPC;// npc队列

	Image logo, logo1, logo2, menu, jiantou, loading, player1, haiyang;// 图片

	final int PHOTO = 0, MENU = 1, LOADING = 2, PLAY = 3, EXIT = 4;// 游戏状态

	int state, count, num, y1, y2, speed;// 状态, 计数器, LOGO界面图片索引, 地图Y轴, 玩家移动速度

	Random rand;

	protected FPS(FPS_MIDlet fps) {
		super(true);// 是否屏蔽游戏键之外的按键
		this.fps = fps;

		g = getGraphics();// 获得一个画笔
		setFullScreenMode(true);// 是否进行全屏设置

		VBALL = new Vector();
		VNPC = new Vector();

		rand = new Random();

		try {
			logo = Image.createImage("/Image/logo.png");
			logo1 = Image.createImage("/Image/logo1.png");
			logo2 = Image.createImage("/Image/logo2.png");
			// 菜单------------------------
			menu = Image.createImage("/Image/menu.png");
			jiantou = Image.createImage("/Image/jiantou.png");
			// LOADING---------------------
			loading = Image.createImage("/Image/loading.png");// Loading
			// PLAY------------------------
			haiyang = Image.createImage("/Image/haiyang.png");// 海洋
			player1 = Image.createImage("/Image/chuan01.png");// 玩家1
		} catch (IOException e) {
			e.printStackTrace();
		}
		player = new Player(player1);
		player.setPosition(W / 2, H - 40);// 设置player初始化位置

		ball = new Ball(player.getX(), player.getY());

		new Thread(this).start();
	}

	// 显示层----------------------------------
	void paint() {
		g.setColor(0xffffff);
		g.fillRect(0, 0, W, H);

		switch (state) {
		case PHOTO:
			if (num == 0) {
				g.drawImage(logo, 0, 0, 0);
			} else if (num == 1) {
				g.drawImage(logo1, 0, 0, Graphics.TOP | Graphics.LEFT);
			} else if (num == 2) {
				g.drawImage(logo2, 0, 0, Graphics.TOP | Graphics.LEFT);
			}
			break;
		case MENU:
			g.drawImage(menu, 0, 0, Graphics.TOP | Graphics.LEFT);
			g.drawImage(jiantou, 20, num, Graphics.TOP | Graphics.LEFT);
			break;
		case LOADING:
			g.drawImage(loading, 0, H / 2 - 30, 0);
			break;
		case PLAY:
			g.drawImage(haiyang, 0, y1, 0);
			g.drawImage(haiyang, 0, y2 - H, 0);
			player.paint(g); // 画player
			drawBall(g); // 画子弹
			drawNPC(); // 画NPC
			break;
		}
		flushGraphics();// 把缓冲图像画到前台
	}

	// 逻辑层--------------------------------------
	void logic() {
		count++;
		switch (state) {
		case PHOTO:
			if (count % 40 == 0) {
				num++;
			}
			if (num > 2) {
				state = MENU;
				num = 108;
			}
			break;
		case MENU:

			break;
		case LOADING:
			if (count % 70 == 0) {
				state = PLAY;
			}
			break;
		case PLAY:
			// 地图循环转动
			y1 = y1 + 1 >= H ? -H : y1 + 1;
			y2 = y2 + 1 >= H * 2 ? 0 : y2 + 1;

			// 射击子弹
			addBall();
			moveBall();

			// 刷怪
			addNPC();
			moveNPC();

			break;
		}

	}

	// 控制层------------------------------------
	public void keyPressed() {
		int keystate = getKeyStates();
		switch (state) {
		case PHOTO:
			if (keystate != 0) {
				num++;
				paint();
			}
			break;
		case MENU:
			switch (keystate) {
			case UP_PRESSED:
				num = num - 22 <= 108 ? 108 : num - 22;
				break;
			case DOWN_PRESSED:
				num = num + 22 >= 174 ? 174 : num + 22;
				break;
			case FIRE_PRESSED:
				if (num == 108) {
					state = LOADING;
				} else if (num == 174) {
					fps.exit();
				}
				break;
			}
			break;
		case PLAY:
			playerMove();

			// if (keystate == FIRE_PRESSED) {// 按中心键发子弹
			// on=!on;
			// addBall();
			// }
			// moveBall();

			break;
		}

	}

	// ------------------------------------------
	/**
	 * 玩家移动
	 */
	void playerMove() {
		int speed = 3; // 移动速度
		int state = getKeyStates();
		switch (state) {
		case UP_PRESSED:
			if (player.getY() - speed >= 0) {
				player.setPosition(player.getX(), player.getY() - speed);
			}
			break;
		case DOWN_PRESSED:
			if (player.getY() + speed <= H - Player.H) {
				player.setPosition(player.getX(), player.getY() + speed);
			}
			break;
		case LEFT_PRESSED:
			if (player.getX() - speed >= 0) {
				player.setPosition(player.getX() - speed, player.getY());
			}
			break;
		case RIGHT_PRESSED:
			if (player.getX() + speed <= W - Player.W) {
				player.setPosition(player.getX() + speed, player.getY());
			}
			break;
		}
		if (count % 4 == 0) {
			player.nextFrame();
		}
	}

	/**
	 * 移动子弹
	 */
	void moveBall() {
		for (int i = 0; i < VBALL.size(); i++) {
			Ball temp = (Ball) VBALL.elementAt(i);
			temp.move();
			if (temp.isRemove()) {
				VBALL.removeElementAt(i);
			}
		}
	}

	/**
	 * 添加子弹01
	 */
	void addBall() {
		count++;
		if (count % 10 == 0) {
			Ball ball01 = new Ball(player.getX(), player.getY());
			VBALL.addElement(ball01);
		}
	}

	/**
	 * 画子弹
	 */
	void drawBall(Graphics g) {
		for (int i = 0; i < VBALL.size(); i++) {
			Ball temp = (Ball) VBALL.elementAt(i);
			temp.drawBall01(g);
		}
	}

	/**
	 * 画NPC
	 */
	void drawNPC() {
		for (int i = 0; i < VNPC.size(); i++) {
			NPC temp = (NPC) VNPC.elementAt(i);
			temp.drawNpc(g);
		}
	}

	/**
	 * 添加NPC
	 */
	void addNPC() {
		count++;
		if (count % 40 == 0) {
			NPC temp = null;
			int num = (rand.nextInt() >>> 1) % 3;// 随机出不同种类怪
			int xnum = (rand.nextInt() >>> 1) % 176;
			System.out.println(num);
			switch (num) {
			case 0:
				temp = new NPC01(xnum, -20);
				break;
			case 1:
				temp = new NPC02(50, -20);
				break;
			case 2:
				temp = new NPC01(20, -20);
				break;
			case 3:

				break;
			}
			VNPC.addElement(temp);
		}

	}

	/**
	 * 移动NPC
	 */
	void moveNPC() {
		for (int i = 0; i < VNPC.size(); i++) {
			NPC temp = (NPC) VNPC.elementAt(i);
			temp.move();
			if (temp.isRemove()) {
				VNPC.removeElementAt(i);
			}

		}
	}

	// ------------------------------------------
	public void run() {
		while (true) {
			logic();
			keyPressed();
			paint();
			try {
				Thread.sleep(33);
			} catch (InterruptedException e) {
				// TODO 自动生成 catch 块
				e.printStackTrace();
			}
		}

	}
}

⌨️ 快捷键说明

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