📄 playcanvas.java
字号:
import java.io.*;
import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
/**
* 游戏画板。这是这个游戏最关键的一个类
* @author SoftStar,嘟嘟熊
* @version 1.0
*/
public class PlayCanvas extends Canvas
implements Runnable
{
/**
* 画板宽度
*/
public int canvasWidth;
/**
* 画板高度
*/
public int canvasHeight;
/**
* richMan实例
*/
private KMRichMan richMan;
/**
* 地图第1部分
*/
private Image mapImage1;
/**
* 地图第2部分
*/
private Image mapImage2;
/**
* 游戏控制面板
*/
private Image gamePanelImage;
/**
* 线程
*/
private volatile Thread thread;
/**
* 控制面板的选择序号(1-色子,2-卡片,3-其他(玩家信息,股票信息)4-系统
*/
private static int choiceIndex = 0;
/**
* 游戏角色要走的步数
*/
private static int steps = 0;
/**
* 游戏进行的轮数
*/
private static int turnCount = 0;
/**
* 游戏状态(0-进行,2-胜利,3-失败)
*/
private static int gameStatusGoOrWinOrFail = 0;
/**
* 角色特殊状态(10--在公园处,20-在监狱里,30-在睡眠中(睡眠卡)
*/
private static int status_Park10_Prinson20_Sleep30 = 0;
/**
* 现在正在进行的角色
*/
public static int nowPlayerID = 0;
/**
* 现在玩家是否能控制进行游戏(如果是电脑角色在玩,玩家就不能控制)
*/
private boolean ManControlStatus_CanNotPlay;
/**
* 随机函数
*/
private Random random;
/**
* 定时器
*/
private static Timer timer = null;
/**
* 地皮
*/
private static int groundForBuilding[] = null;
// 游戏角色变量
/**
* 角色在地图上位置(用地皮ID表示)
*/
private static int player_location[] = null;
/**
* 角色卡片
*/
private static int player_cards[][] = null;
/**
* 角色因为进入监狱而不能移动的次数
*/
private static int player_prinson_canNotMoveNum[] = null;
/**
* 角色因为睡眠而不能移动的次数
*/
private static int player_sleep_canNotMoveNum[] = null;
/**
* 角色轮转次序
*/
public static int player_sequence[] = null;
/**
* 角色的金钱
*/
public static int player_money[] = null;
/**
* 角色的地皮和房屋的图象
*/
private static Image player_houseImage[][] = null;
/**
* 角色的头像
*/
private static Image player_faceImage[] = null;
/**
* 玩家的股票 [角色ID][股票ID][0]---- 购入数目,[角色ID][股票ID][1]---- 购入价格
*
*/
public static int player_stock[][][] = null;
/**
* 屏幕图象缓冲
*/
Image bufferImage;
/**
* 空白地皮图象
*/
Image emptyGround;
/**
* 屏幕图象缓冲句柄
*/
Graphics bufferImageG;
/**
* 是否背景灯打开
*/
private boolean isLightOn = true;
/**
* 是否背景音乐打开
*/
private boolean isMusicOn = true;
/**
* 游戏速度
*/
private int gameSpeed = 3;
/**
* 音乐序号
*/
private int music = 1;
/**
* 西门子手机的音乐合成器
*/
com.siemens.mp.game.MelodyComposer composer;
/**
* 地皮的缓冲
*/
private int[] bufferGroundForBuilding;
// 股票变量
/**
* 股票名字
*/
public String[] stock_name;
/**
* 股票的价格
*/
public int[] stock_price;
/**
* 股票的涨幅
*/
public int[] stock_amplitude;
/**
* 股票的分数部分(便于计算)如 2元 涨幅 1%,总要个分数部分吧,不然老是2元
*/
public int[] stock_price_fraction;
/**
* 构造游戏画板
*/
public PlayCanvas(KMRichMan kmrichman)
{
player_faceImage = null;
richMan = null;
mapImage1 = null;
thread = null;
random = null;
thread = null;
richMan = kmrichman;
ManControlStatus_CanNotPlay = false;
random = new Random();
timer = new Timer();
canvasWidth = getWidth();
canvasHeight = getHeight();
bufferImage = Image.createImage(101,80);
bufferImageG = bufferImage.getGraphics();
groundForBuilding = new int[56];
bufferGroundForBuilding = new int[56];
player_location = new int[3];
player_money = new int[3];
player_sequence = new int[3];
player_cards = new int[3][5];
player_prinson_canNotMoveNum = new int[3];
player_sleep_canNotMoveNum = new int[3];
player_faceImage = new Image[3];
player_stock = new int[3][4][2];
// 加载图像
loadMap();
loadImage();
//初始化音乐
this.initialMusic();
//初始化游戏
initialGame();
}
/**
* 加载地图
*/
void loadMap()
{
try
{
mapImage1 = Image.createImage(128,160);
mapImage2 = Image.createImage(128,160);
Graphics g = mapImage1.getGraphics();
g.drawImage(com.siemens.mp.ui.Image.createImageWithoutScaling("/res/image/map0bw.png"),0,0,20);
g = mapImage2.getGraphics();
g.drawImage(com.siemens.mp.ui.Image.createImageWithoutScaling("/res/image/map1bw.png"),0,0,20);
}
catch(Exception exception) { }
}
/**
* 加载图象
*/
void loadImage()
{
Image houseImage = null;
Graphics g = null;
try
{
houseImage = Image.createImage("/res/image/housebw.png");
emptyGround = Image.createImage("/res/image/ground.png");
gamePanelImage = com.siemens.mp.ui.Image.createImageWithoutScaling("/res/image/gamepanelbw.png");
for(int i = 0; i < 3; i++)
player_faceImage[i] = Image.createImage(String.valueOf(new StringBuffer("/res/image/h").append(i).append(".png")));
}
catch(Exception exception) {
System.out.println("Err on loading Images");
}
// 把地皮和房子的图象分割成一个一个小块
player_houseImage = new Image[3][4];
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 4; j++)
{
Image image = Image.createImage(16, 16);
g = image.getGraphics();
g.drawImage(houseImage, -16 * j, -16 * i, 20);
player_houseImage[i][j] = image;
}
}
houseImage = null;
g = null;
}
/**
* 排列角色的次序
* @param selectedPlayerID 玩家选择的角色ID
*/
void arragePlayerSecquence(int selectedPlayerID)
{
player_sequence[0] = selectedPlayerID;
int player2 = fetchRandom(2);
int player3 = fetchRandom(2);
for(; player2 == selectedPlayerID; player2 = fetchRandom(2));
player_sequence[1] = player2;
for(; player3 == selectedPlayerID || player3 == player2; player3 = fetchRandom(2));
player_sequence[2] = player3;
}
/**
* 转到下一个玩家
* @param delay 延迟时间
*/
public void nextPlay(int deplay)
{
timer.schedule(new Controlor(this), deplay);
}
/**
* 电脑玩家开始游戏
* @param delay 延迟时间
* @param Num_ComputerActor_or_HunmanActor 是电脑还是玩家 (1-电脑 0-玩家)
*/
public void play_computerActor(int delay, int Num_ComputerActor_or_HumanActor)
{
timer.schedule(new Controlor(this, Num_ComputerActor_or_HumanActor), delay);
}
/**
* 开始游戏
* @param isLoadGameRestart 是否是进行的存储的游戏(继续上次游戏)
*/
public void play(boolean isLoadGameRestart)
{
// siemens special call
if (this.isIsLightOn())
com.siemens.mp.game.Light.setLightOn(); //开灯
else
com.siemens.mp.game.Light.setLightOff();//关灯
//siemens special call
choiceIndex = 0;
status_Park10_Prinson20_Sleep30 = 0;
if(isLoadGameRestart)
{
nowPlayerID = 2; // 让玩家先开始
} else {
repaint();
serviceRepaints();
try
{
Thread.sleep(600L);
}
catch(Exception exception) { }
}
// 换游戏角色
nowPlayerID++;
nowPlayerID %= 3;
// 如果是玩家操作,那么保存游戏
if(nowPlayerID == 0)
{
autoSaveGame();
turnCount++;
this.changeStock();
}
// 如果有游戏角色 钱 < 0
if(player_money[nowPlayerID] < 0)
{
nowPlayerID++;
nowPlayerID %= 3;
}
// 如果 玩家没有钱
if(player_money[0] < 0)
{
gameOver(0);
return;
}
// 如果电脑角色没有钱
if(player_money[1] < 0 && player_money[2] < 0)
{
gameOver(1);
return;
}
repaint();
serviceRepaints();
if(player_prinson_canNotMoveNum[nowPlayerID] > 0)
{
if(deleteCard(nowPlayerID, 5)) // 使用免罪卡
{
player_prinson_canNotMoveNum[nowPlayerID] = 0;
nextPlay(1000);
} else
{
status_Park10_Prinson20_Sleep30 = 20;
repaint();
serviceRepaints();
nextPlay(1000);
player_prinson_canNotMoveNum[nowPlayerID]--;
}
} else
if(player_sleep_canNotMoveNum[nowPlayerID] > 0)
{
status_Park10_Prinson20_Sleep30 = 30;
repaint();
serviceRepaints();
nextPlay(1000);
player_sleep_canNotMoveNum[nowPlayerID]--;
} else
if(nowPlayerID != 0)
play_computerActor(1000, 1); // 电脑玩家开始玩
else
ManControlStatus_CanNotPlay = false; // 玩家开始玩
}
/**
* 启动移动角色线程
* @param steps 步数
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -