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

📄 grids.java

📁 J2ME编程的50个例子,适合掌上系统的编程
💻 JAVA
字号:
package demo;
import java.util.Random;

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


public class Grids {
	//格子类型值,与tile编号对应
	public static final int GRID_FIELD_1	= 1;	//土地1
	public static final int GRID_MM 		= 2;	//孙小美的地盘
	public static final int GRID_MM_1 	= 3;	//孙小美的小建筑
	public static final int GRID_MM_2 	= 4;	//孙小美的中建筑
	public static final int GRID_MM_3 	= 5;	//孙小美的大建筑
	public static final int GRID_FIELD_2	= 6;	//土地2
	public static final int GRID_OIL		= 7;	//石油大王的地盘
	public static final int GRID_OIL_1	= 8;	//石油大王的小建筑
	public static final int GRID_OIL_2	= 9;	//石油大王的中建筑
	public static final int GRID_OIL_3	= 10;	//石油大王的大建筑
	
	private TiledLayer 	m_GridTL;				//背景格子
	private PlayerSprite 	m_aPlayer[];			//两个人物	
	private DialSprite		m_DialSp;				//股子对象
	private boolean		m_bPlayerTurn;			//是否论到游戏者进行游戏
	private Random			m_Random;				//随机数对象
	public Grids(int scrWidth, int scrHeight){
		m_Random = new Random();
		try{
			//创建人物
			Image img = Image.createImage("/demo/man.png");
			m_aPlayer = new PlayerSprite[2];
			for( int n = 0; n < m_aPlayer.length; n ++ ){
				m_aPlayer[n] = new PlayerSprite( img, 25, 25 );
				m_aPlayer[n].setFrame(n);
			}
			//创建背景格子
			Image imgGrid = Image.createImage("/demo/grid.png");
			m_GridTL = new TiledLayer( 6, 6, imgGrid, 25, 25 );
			int x = scrWidth/2 - m_GridTL.getWidth()/2;
			int y = scrHeight/2 - m_GridTL.getHeight()/2;
			m_GridTL.setPosition(x, y);
			
			//创建股子
			Image imgDial = Image.createImage("/demo/dial.png");
			m_DialSp = new DialSprite( imgDial, 25, 30 );
			x = scrWidth/2 - m_DialSp.getWidth()/2;
			y = scrHeight/2 - m_DialSp.getHeight()/2;
			m_DialSp.setPosition(x, y);
		}
		catch(Exception exception){}
	}
	//重新开局
	public void Reset(){
		//设置上下两排格子
		for( int col = 0; col < m_GridTL.getColumns(); col ++ ){
			m_GridTL.setCell(col, 0, GRID_FIELD_1);
			m_GridTL.setCell(col, m_GridTL.getRows()-1, GRID_FIELD_2);
		}
		//设置左右两排格子
		for( int row = 1; row < m_GridTL.getColumns()-1; row ++ ){
			m_GridTL.setCell(0, row, GRID_FIELD_1);
			m_GridTL.setCell(m_GridTL.getColumns()-1, row, GRID_FIELD_2);
		}
		//设置孙小美
		m_aPlayer[0].SetPos(0, 0, m_GridTL);
		m_aPlayer[0].setMoney(1000);
		m_aPlayer[0].setStep(0);
		
		//设置石油大王
		m_aPlayer[1].SetPos(m_GridTL.getColumns()-1, 
								m_GridTL.getRows()-1, m_GridTL);
		m_aPlayer[1].setMoney(1000);
		m_aPlayer[1].setStep(0);
		
		//玩家先进行操作
		m_bPlayerTurn = true;
		//让股子转动
		m_DialSp.Start();
	}
	//处理用户输入
	public void Input( int keyStates ){
		//如果有人物在移动,则不能输入
		if( m_aPlayer[0].getStep() > 0 || m_aPlayer[1].getStep() > 0 )
			return;
		
		//如果没轮到玩家操作,则不能输入
		if( !m_bPlayerTurn )
			return;
		
		if( ( keyStates & GameCanvas.FIRE_PRESSED ) != 0 )
		{//按下中心键,停只转动股子,移动指定的步数
			m_DialSp.Stop();
			m_aPlayer[0].setStep(m_DialSp.getFrame() + 1);			
		}	
	}
	//逻辑操作
	//返回-1表示电脑获胜,返回1表示玩家获胜,返回0表示继续游戏
	public int Logic(){
		
		m_DialSp.Logic();
		
		if( m_aPlayer[0].getStep() > 0 )
		{//移动孙小美
			m_aPlayer[0].Logic(m_GridTL);
			if( m_aPlayer[0].getStep() == 0 )
			{//如果移动结束,与当前位置的土地发生交易
				if( Trade(m_aPlayer[0]) )
					return -1;		//如果交易失败,表示没有钱,则游戏结束
				int index = Math.abs( m_Random.nextInt()%6 );
				m_aPlayer[1].setStep(index + 1);
				m_DialSp.setFrame(index);
			}
		}
		else if( m_aPlayer[1].getStep() > 0 )
		{//移动石油大王
			m_aPlayer[1].Logic(m_GridTL);
			if( m_aPlayer[1].getStep() == 0 )
			{//如果移动结束,与当前位置的土地发生交易
				if( Trade(m_aPlayer[1]) )
					return 1;		//如果交易失败,表示没有钱,则游戏结束
				m_DialSp.Start();	//转动股子
			}
		}
		return 0;
	}
	//显示图像,参数g对应手机屏幕,scrWidth、scrHeight分别是屏幕的宽和高
	public void Paint(Graphics g, int scrWidth, int scrHeight){
		//显示背景格子
		m_GridTL.paint(g);
		//显示股子
		m_DialSp.paint(g);
		//显示人物
		for( int n = 0; n < m_aPlayer.length; n ++ ){
			m_aPlayer[n].paint(g);
		}
		//显示金钱数
		StringBuffer buffer = new StringBuffer();
		buffer.append("Player Money:");
		buffer.append(m_aPlayer[0].getMoney());
		g.drawString(buffer.toString(), 5, 2, 0);
		buffer.delete(0, buffer.length());
		buffer.append("Computer Money:");
		buffer.append(m_aPlayer[1].getMoney());
		g.drawString(buffer.toString(), 5, scrHeight - 15, 0);
		
	}
	//与土地交易,返回true表示交易失败,否则交易成功
	public boolean Trade(PlayerSprite player){
		int index = player.getFrame();
		int col = player.getCol();					//列号
		int row = player.getRow();					//行号
		int money = player.getMoney();				//金钱数
		int filed = m_GridTL.getCell( col, row );	//土地类型
		switch( filed ){
		case GRID_FIELD_1:							//普通土地
		case GRID_FIELD_2:							//普通土地
			if( index == PlayerSprite.PLAYER_MM )
				m_GridTL.setCell(col, row, GRID_MM);
			else
				m_GridTL.setCell(col, row, GRID_OIL);
			break;
		case GRID_MM:								//孙小美的地盘
			if( index == PlayerSprite.PLAYER_MM )
				m_GridTL.setCell(col, row, GRID_MM_1);
			break;
		case GRID_MM_1:								//孙小美的小建筑
			if( index == PlayerSprite.PLAYER_MM )
				m_GridTL.setCell(col, row, GRID_MM_2);
			else
				player.setMoney(money - 50);
			break;
		case GRID_MM_2:								//孙小美的中建筑
			if( index == PlayerSprite.PLAYER_MM )
				m_GridTL.setCell(col, row, GRID_MM_3);
			else
				player.setMoney(money - 100);
			break;
		case GRID_MM_3:								//孙小美的大建筑
			if( index == PlayerSprite.PLAYER_OIL )
				player.setMoney(money - 200);
			break;
		case GRID_OIL:								//石油大王的地盘
			if( index == PlayerSprite.PLAYER_OIL )
				m_GridTL.setCell(col, row, GRID_OIL_1);
			break;
		case GRID_OIL_1:							//石油大王的小建筑
			if( index == PlayerSprite.PLAYER_OIL )
				m_GridTL.setCell(col, row, GRID_OIL_2);
			else
				player.setMoney(money - 50);
			break;
		case GRID_OIL_2:							//石油大王的中建筑
			if( index == PlayerSprite.PLAYER_OIL )
				m_GridTL.setCell(col, row, GRID_OIL_3);
			else
				player.setMoney(money - 100);
			break;
		case GRID_OIL_3:							//石油大王的大建筑
			if( index == PlayerSprite.PLAYER_MM )
				player.setMoney(money - 200);
			break;

		}
		if( player.getMoney() < 0 )					//没有钱了
			return true;
		return false;
	}
	
}

⌨️ 快捷键说明

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