📄 grids.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 + -