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

📄 cplayer.java

📁 一个简单的J2ME游戏源代码
💻 JAVA
字号:
import java.io.IOException;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.Sprite;


public class CPlayer extends CActor implements Const{
	int[] stand = {0};
	int[] walk = {1, 2, 3, 4, 5, 6};
	int[] fd = {7, 7, 7, 7, 9, 7, 9, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7};
	int[] jump = {10, 11, 12, 13};
	public CPlayer(){
		this.isLive = true;
		this.frame_w = 20;
		this.frame_h = 32;
		try {
			this.img = Image.createImage("/imgrun.png");
		} catch (IOException e) {
			e.printStackTrace();
		}
		this.colNum = img.getWidth() / frame_w;
		setFrame(walk);
		setPosition(80, 120);
		setSpeed(3);
	}
	
	CMap colMap;
	void setMap(CMap map){
		colMap = map;
	}
	
	void paint(Graphics g) {
		if(!isLive)
			return;
		int flag = isLeft ? Sprite.TRANS_NONE : Sprite.TRANS_MIRROR;
		g.drawRegion(img,
				(frameIndex % colNum) * frame_w,
				(frameIndex / colNum) * frame_h,
				frame_w, frame_h,
				flag, x, y, 0);
		update();
		nextFrame();
		playercounter ++;
	}

	public static int playerstatus = PS_STAND;
	public int playercounter = 0;
	void update() {
		//System.out.println(playerstatus);
		if(CGame.gameStatus == Const.GS_GAMEOVER)
			return;
		switch(playerstatus){
		case PS_STAND:
			if(playercounter == 30)
				setNewStatus(PS_FD);
//			if(!CGame.isPressedKey(CGame.MKEY_LEFT) && !CGame.isPressedKey(CGame.MKEY_RIGHT))
//				setFrame(stand);
			if(x >= 80 && CGame.isPressedKey(CGame.MKEY_LEFT)){
				isLeft = true;
				x -=3;
			}
			if(x <= 160 && CGame.isPressedKey(CGame.MKEY_RIGHT)){
				isLeft = false;
				x +=3;
			}
			if(CGame.isPressedKey(CGame.MKEY_UP)){
				setNewStatus(PS_JUMP);
			}
			zhongLi();
			break;
		case PS_WALK:
			move();
			//zhongLi();	
			break;
		case PS_JUMP:
			if(x >= 80 && CGame.isPressedKey(CGame.MKEY_LEFT)){
				isLeft = true;
				x -=3;
			}
			if(x <= 160 && CGame.isPressedKey(CGame.MKEY_RIGHT)){
				isLeft = false;
				x +=3;
			}
			jump();
			zhongLi();				
			break;
		case PS_JUMP_LEFT:
			move();
			jump();
			zhongLi();
			break;
		case PS_JUMP_RIGHT:
			move();
			jump();
			zhongLi();
			break;
		case PS_FD:
			if(getNowFrames() == fd.length - 1)
				setNewStatus(PS_STAND);
			break;
		}
		if(y + frame_h >= 300)
			isLive = false;
	}
	
	void setNewStatus(int newPlayerStatus){
		this.playerstatus = newPlayerStatus;
		downSpeed = 0;
		if(newPlayerStatus == PS_JUMP 
				|| newPlayerStatus == PS_JUMP_LEFT 
				|| newPlayerStatus == PS_JUMP_RIGHT ){
			jumpSpeed = -16;
			setFrame(jump);
		}
		if(newPlayerStatus == PS_STAND){
			jumpSpeed = 0;
			playercounter = 0;
			setFrame(stand);
		}
		if(newPlayerStatus == PS_WALK){
			jumpSpeed = 0;
			setFrame(walk);
		}
		if(newPlayerStatus == PS_FD){
			jumpSpeed = 0;
			setFrame(fd);
		}
	}
	
	void move() {
		if(x >= 0 && x < SCREEN_WIDTH - frame_w)
			x += isLeft ? -speed : speed;
		if(x < 0)
			x = 0;
		if(x >= SCREEN_WIDTH - frame_w)
			x = SCREEN_WIDTH - frame_w - 1;
	}
	
	private int jumpSpeed = -16;
	private void jump() {
		y += jumpSpeed;
		System.out.println("js:" + jumpSpeed);
		System.out.println("ds:" + downSpeed);
	}
	
	int zlg = 2;
	int downSpeed = 0;
	void zhongLi(){
		if(!collisionWith(colMap)){
			y += downSpeed;
			downSpeed += zlg;
			System.out.println("js:" + jumpSpeed);
			System.out.println("ds:" + downSpeed);
		}
		if(collisionWith(colMap)){
			y += dy;
			downSpeed = 0;
			setNewStatus(PS_STAND);	
		}
	}
	
	int dy = 0;
	boolean collisionWith(CMap map){
		int leftx = x + 7;
		int lefty = y + frame_h;
		int rightx = x + frame_w - 7;
		int righty = lefty;
		if(lefty >= 286)
			return false;
		if(downSpeed + jumpSpeed >= 0){
			for(int i=0;i<=downSpeed + zlg + jumpSpeed;i++){
				int hangShu1 = (lefty + i - map.y) / map.tileH;
				int lieShu1 = (leftx + (isLeft ? -speed : speed) - map.x) / map.tileW;
				int hangShu2 = (righty + i - map.y) / map.tileH;
				int lieShu2 = (rightx + (isLeft ? -speed : speed) - map.x) / map.tileW;
				if(map.mapdata[hangShu1][lieShu1] != 0
						&& map.mapdata[hangShu1][lieShu1] != 22
						&& map.mapdata[hangShu1][lieShu1] != 23){
					dy = i;
					return true;
				}
				if(map.mapdata[hangShu2][lieShu2] != 0
						&& map.mapdata[hangShu2][lieShu2] != 22
						&& map.mapdata[hangShu2][lieShu2] != 23){
					dy = i;
					return true;
				}
			}
		}
		return false;
	}
}

⌨️ 快捷键说明

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