?? 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 + -