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

📄 gamemain.java

📁 一款新手改造的J2me手机游戏项目
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.ejoy;

//Download by http://www.codefans.net

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

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

public class GameMain extends GameCanvas implements Runnable
{

	public MySprite role=null;//主角精灵,默认为站立
	public MySprite enemy=null;//敌人精灵,默认为站立
	
	//主角精灵各状态图片
	public Image standimg;//精灵站立图片
	public Image walkimg;//精灵行走图片
	public Image attackimg;//精灵攻击图片
	
	//地图状态及数据
	public boolean isMapRoll=false;//地图卷动状态
	public int mapY=0;//地图卷动y坐标偏移值
	
	private Image bg;//地图图片
	private Image mbg;//菜单图片
	private Image cur;//箭头图片
	
	
	public int curindex=0;
	
	
	public Graphics mg;
	public Thread cThread;
	public boolean isRunning;
	
	public int enemyXiuZheng=0;//地图卷动时,敌人精灵的位移修正值
	
	//游戏中各种状态
	
	public boolean isNormalThread=true;//游戏正常进程
	
	//-------------role状态----------------
	public boolean isStand=true;//是否是站立状态
	public boolean isforward=true;//是否是向前
	public int currentFrame=0;

	public boolean isMove=false;
	public boolean isUp=false;
	public boolean isDown=false;
	public boolean isLeft=false;
	public boolean isRight=false;
	public boolean isFire=false;
	
	
	//-------------enemy状态-------------
	public boolean isEnemyMove=false;//是否为移动状态
	public boolean isEnemyXMove=false;//是否在x轴上移动
	public boolean isEnemyYMove=false;//是否在y轴上移动
	public boolean isEnemyStand=true;//是否站立状态
	public boolean isEnemyAttack=false;//是否是攻击状态
	
	
	public int attCount=0;//攻击频率控制
	public int eframe=0;//敌人移动精灵当前帧
	public int stepCount=0;//移动步数,防止频繁改变方向
	public int standCount=0;//站立延时
	
	private GameMIDlet m_gmid;
	
	//------------------方向----------------------
	public final static int EAST=0;
	public final static int WEST=1;
	public final static int SOUTH=2;
	public final static int NORTH=3;
	
	
	//随机对象
	public Random rd;
	
	//游戏中菜单状态
	public boolean isGamingMenuShow=false;

	//音乐管理器
	public AVManager av;
	
	public GameMain(GameMIDlet gm,int spName)
	{
		super(false);
		m_gmid=gm;
		mg=getGraphics();
		isRunning=true;
		rd=new Random();
		setFullScreenMode(true);
		try
		{
			if(spName==MySprite.ROLE_DC)
			{
				role=new MySprite(Image.createImage(GameMIDlet.PATH_DC_STAND),54,72,spName);
				role.setRefPixelPosition(GameMIDlet.SCREEN_WIDTH/2, role.spriteHeight);//设置主角初始位置
			}
				
			if(spName==MySprite.ROLE_ZF)
			{
				role=new MySprite(Image.createImage(GameMIDlet.PATH_ZF_STAND),60,108,spName);
				role.setRefPixelPosition(GameMIDlet.SCREEN_WIDTH/2, role.spriteHeight);//设置主角初始位置
			}
			
			bg=Image.createImage(GameMIDlet.PATH_GAME_BG);
			mbg=Image.createImage(GameMIDlet.PATH_GMENU);
			cur=Image.createImage(GameMIDlet.PATH_CUR);
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
		
		av=new AVManager(m_gmid);
		av.createPlayer("/res/bg_2.mid", AVManager.MEDIA_TYPE_MIDI);
		av.init();
		av.play();
	
		
		System.out.println("GameMain构造函数!");
	}
	
	
	//主角精灵逻辑处理
	public void roleLogic()
	{
		if(isStand)
			role.setFrame((currentFrame++)%role.getFrameSequenceLength());
		else if(isMove)
		{
			if(isUp)
			{
				//isStand=false;
				role.changeToWalkSprite();
				if(!adjustAndCollision(NORTH))
				{
					role.setRefPixelPosition(role.getRefPixelX(), role.getRefPixelY()-GameMIDlet.MOVE_ROLESPEED);
				}
				if(isforward)
				{
					role.setTransform(Sprite.TRANS_MIRROR_ROT180);
					isforward=false;
				}
				currentFrame++;
			}
			else if(isDown)
			{
				//isStand=false;
				role.changeToWalkSprite();
				if(!adjustAndCollision(SOUTH))
				{
					role.setRefPixelPosition(role.getRefPixelX(), role.getRefPixelY()+GameMIDlet.MOVE_ROLESPEED);
					if(!isMapRoll)
					{
						if(mapY+GameMIDlet.MOVE_ROLESPEED<GameMIDlet.MAPHEIGHT-GameMIDlet.SCREEN_HEIGHT)
						{
							mapY+=GameMIDlet.MOVE_ROLESPEED;
							enemyXiuZheng+=GameMIDlet.MOVE_ROLESPEED;
						}
					}
				}
				if(!isforward)
				{
					role.setTransform(Sprite.TRANS_NONE);
					isforward=true;
				}
				currentFrame++;
			}
			else if(isLeft)
			{
				role.changeToWalkSprite();
				if(!adjustAndCollision(WEST))
					role.setRefPixelPosition(role.getRefPixelX()-GameMIDlet.MOVE_ROLESPEED, role.getRefPixelY());
			
				role.setFrame((currentFrame++)%role.getFrameSequenceLength());
				//currentFrame++;
			}
			else if(isRight)
			{
				role.changeToWalkSprite();
				if(!adjustAndCollision(EAST))
					role.setRefPixelPosition(role.getRefPixelX()+GameMIDlet.MOVE_ROLESPEED, role.getRefPixelY());
				role.setFrame((currentFrame++)%role.getFrameSequenceLength());
				//currentFrame++;
			}
				
			role.setFrame((currentFrame)%role.getFrameSequenceLength());
		} else if(isFire)
		{
			System.out.println("play animation");
			role.changeToAttackSprite();			
			role.setFrame((currentFrame++)%role.getFrameSequenceLength());
		}
			
			
	}
	
	
	//游戏主类画布画画函数
	public void run()
	{
		while(isRunning)
		{
			if(isNormalThread)
			{
				long lastTime=System.currentTimeMillis();
				mg.setColor(0x666666);
				mg.fillRect(0, 0,getWidth() /*GameMIDlet.SCREEN_WIDTH*/, GameMIDlet.SCREEN_HEIGHT);			
				mg.drawImage(bg, 0, -mapY, 0);
				roleLogic();
				enemyLogic();
				showEnemyAni();
				detectRollMap();
				//---begin----判断精灵之间的覆盖问题
				if(enemy==null);
					role.paint(mg);
				if(enemy!=null)
				{
					setEnemyFTF();
					if(role.getRefPixelX()-role.spriteWidth/2<enemy.getRefPixelX()-enemy.spriteWidth/2)
					{	
						enemy.paint(mg);
						role.paint(mg);
					}
					else
					{
						
						role.paint(mg);
						enemy.paint(mg);
						
					}
				}
				//------------end----------
				flushGraphics();
				long currentTime=System.currentTimeMillis();
				int esp=(int)(currentTime-lastTime);
				if(esp<1000/GameMIDlet.FPS)
				{
					try
					{
						Thread.sleep(1000/GameMIDlet.FPS-esp);
					}
					catch(Exception e)
					{
						e.printStackTrace();
					}
				}
			}
			else if(isGamingMenuShow)
			{
				showMenu();
			}
		}
	}
	
	
	protected void keyPressed(int keyCode)
	{
		boolean bAction=false;
		if(!isGamingMenuShow)
		{
			switch(keyCode)
			{
				case GameCanvas.KEY_NUM2://游戏界面中左
					isMove=true;
					isStand=false;
					isUp=true;
					break;
				case GameCanvas.KEY_NUM6://游戏界面中上
					isMove=true;
					isStand=false;
					isRight=true;
					break;
				case GameCanvas.KEY_NUM8://游戏界面中右
					isMove=true;
					isStand=false;
					isDown=true;
					break;
				case GameCanvas.KEY_NUM4://游戏界面中下
					isMove=true;
					isStand=false;
					isLeft=true;
					break;
				case GameCanvas.KEY_NUM5://确定
					isFire=true;
					isStand=false;
					isMove=false;
					break;
				case GameCanvas.KEY_POUND://调出游戏中菜单
					isNormalThread=false;
					isGamingMenuShow=true;
					break;
				case GameCanvas.KEY_STAR:
					break;
				default:
						bAction=true;
			}
			
			if(bAction)
			{
				switch(getGameAction(keyCode))
				{
					case GameCanvas.DOWN://游戏界面中右
						isMove=true;
						isStand=false;
						isDown=true;
						break;
					case GameCanvas.UP://游戏界面中左
						isMove=true;
						isStand=false;
						isUp=true;
						break;
					case GameCanvas.LEFT://游戏界面中下
						isMove=true;
						isStand=false;
						isLeft=true;
						break;
					case GameCanvas.RIGHT://游戏界面中上
						isMove=true;
						isStand=false;
						isRight=true;
						break;
					case GameCanvas.FIRE:
						isFire=true;
						isStand=false;
						isMove=false;
						break;
					
				}
			}
		}
		else//菜单选择的按键事件
		{
			switch(keyCode)
			{
				case GameCanvas.KEY_NUM6://上移菜单项
					if(curindex!=0)
						curindex--;
				case GameCanvas.KEY_NUM4://下移菜单项
					if(curindex!=3)
						curindex++;
				case GameCanvas.KEY_NUM5://确定
					switch(curindex)
					{
						case 0:
							isNormalThread=true;
							isGamingMenuShow=false;
							break;
						case 1:
							av.releaseMediaResource();
							break;
						case 2:
							break;
						case 3:
							try
							{
								m_gmid.exit();
							}
							catch(Exception e)
							{
								e.printStackTrace();
							}
							break;
					}
				default:
					bAction=true;
				if(bAction)
				{
					switch(getGameAction(keyCode))
					{
						case GameCanvas.LEFT:
							if(curindex!=3)
								curindex++;
							break;
						case GameCanvas.RIGHT:
							if(curindex!=0)
								curindex--;
							break;
						case GameCanvas.FIRE:
							switch(curindex)
							{
								case 0:
									isNormalThread=true;
									isGamingMenuShow=false;
									break;
								case 1:
									av.releaseMediaResource();
									break;
								case 2:
									break;
								case 3:
									try
									{
										m_gmid.exit();
									}
									catch(Exception e)
									{
										e.printStackTrace();
									}
									break;
							}
							break;
					}
				}
			}
		}

	}
	

	/**
	 * 游戏中菜单
	 * @param g 菜单画笔
	 */

⌨️ 快捷键说明

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