?? maincanvas.java
字號(hào):
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
public class MainCanvas extends GameCanvas
implements Runnable, CommandListener{
public static final int GAME_UI = 0; //進(jìn)入用戶界面
public static final int GAME_GAMING = 1; //進(jìn)行游戲
public static final int GAME_BUTTON = 2; //游戲時(shí)顯示界面按鈕
public static final int GAME_END = 3; //游戲結(jié)束
public static final int GAME_STATE_NUM = 4; //狀態(tài)總數(shù)
private int m_nState = GAME_UI; //存儲(chǔ)當(dāng)前的游戲狀態(tài)
private boolean m_bRunning; //控制線程運(yùn)行
private MyUI m_UI; //界面對(duì)象
private Sprite m_TextSp; //圖形文字對(duì)象
private Mahjong m_Mahjong; //麻將對(duì)象
private Command MenuCommand; //高級(jí)按鈕對(duì)象
public MainCanvas( ){
super(true);
try{
//創(chuàng)建用戶界面,并設(shè)置界面中的按鈕
MyButton button = new MyButton(41, 21, 0, 1, -1, -1, -1, 2);
m_UI = new MyUI(button);
}
catch(Exception exception){}
setState(GAME_UI);
Start();
}
//重新開牌
private void Reset(){
if( m_Mahjong == null ){
m_Mahjong = new Mahjong(getWidth(), getHeight());
}
m_Mahjong.Reset();
if( MenuCommand == null ){
//創(chuàng)建菜單
MenuCommand = new Command("Menu", Command.OK, 0);
addCommand(MenuCommand);
setCommandListener(this);
}
if( m_TextSp == null ){
//創(chuàng)建圖形文字對(duì)象
try{
Image img = Image.createImage("/demo/text.png");
m_TextSp = new Sprite(img, 82, 25);
m_TextSp.defineReferencePixel(41, 23);
int x = getWidth()/2;
int y = getHeight()/2 - 10;
m_TextSp.setRefPixelPosition(x, y);
}
catch(Exception exception){}
}
}
private void setState( int state ){ //設(shè)置游戲狀態(tài)
if( state < 0 || state >= GAME_STATE_NUM )
return;
m_nState = state;
switch( m_nState ){
case GAME_UI: //進(jìn)入用戶界面
m_UI.setState(MyUI.UI_TITLE); //顯示標(biāo)題界面
//設(shè)置本游戲的按鈕類型,本游戲有:開始及退出兩種按鈕
m_UI.getButton().setShow(true, false, false, false, false, true );
break;
case GAME_BUTTON: //在游戲中途顯示按鈕
m_UI.setState(MyUI.UI_BUTTON);
//游戲中途,顯示復(fù)位與退出按鈕
m_UI.getButton().setShow(false, true, false, false, false, true );
break;
case GAME_GAMING: //正在游戲
m_UI.setState(MyUI.UI_HIDE);
break;
case GAME_END: //游戲結(jié)束
m_UI.setState(MyUI.UI_HIDE);
break;
}
}
public void Start(){
m_bRunning = true;
Thread thread = new Thread(this); //分配新線程
thread.start(); //線程啟動(dòng)
}
public void run() {
//得到系統(tǒng)當(dāng)前時(shí)間,并將時(shí)間換算成毫秒
long T1 = System.currentTimeMillis();
long T2 = T1;
while(m_bRunning){
T2 = System.currentTimeMillis();
if( T2 - T1 > 150 ){ //間隔150毫秒
T1 = T2;
Input();
Logic();
Paint();
}
}
}
public void Stop(){
m_bRunning = false;
}
public void Input(){
int keyStates = getKeyStates();
switch( m_nState ){
case GAME_UI:
{
switch( m_UI.Input( keyStates ) ){
case MyButton.BUTTON_START: //按下開始鍵
Reset();
setState(GAME_GAMING);
break;
case MyButton.BUTTON_EXIT: //按下退出鍵
MahjongMidlet.midlet.notifyDestroyed();
break;
}
}
break;
case GAME_GAMING: //游戲中
try{
m_Mahjong.Input(keyStates);
}
catch(Exception e){
e.printStackTrace();
}
break;
case GAME_BUTTON: //游戲中途顯示按鈕
{
switch( m_UI.Input( keyStates ) ){
case MyButton.BUTTON_RESET: //按下復(fù)位鍵
Reset();
setState(GAME_GAMING);
break;
case MyButton.BUTTON_EXIT: //按下退出鍵
MahjongMidlet.midlet.notifyDestroyed();
break;
}
}
break;
case GAME_END:
if( ( keyStates & GameCanvas.FIRE_PRESSED ) != 0 ){
Reset();
setState(GAME_GAMING);
}
break;
}
}
public void Logic(){
switch( m_nState ){
case GAME_GAMING:
try{
m_Mahjong.Logic();
}
catch(Exception e){
e.printStackTrace();
}
switch( m_Mahjong.getState() ){
case Mahjong.STATE_COM_HU:
case Mahjong.STATE_NOBONE:
m_TextSp.setFrame(1); //電腦勝利
setState(GAME_END);
break;
case Mahjong.STATE_PLA_HU:
m_TextSp.setFrame(0); //玩家勝利
setState(GAME_END);
break;
}
break;
}
}
public void Paint(){
Graphics g = getGraphics();
//用黑色清屏
g.setColor(0);
g.fillRect( 0, 0, getWidth(), getHeight() );
g.setColor(0xFFFF0000);
switch( m_nState ){
case GAME_UI: //顯示界面
m_UI.Paint(g, getWidth(), getHeight());
break;
case GAME_GAMING: //顯示游戲畫面
case GAME_BUTTON:
case GAME_END:
try{
m_Mahjong.Paint(g, getWidth(), getHeight());
}
catch(Exception e){
e.printStackTrace();
}
if( m_nState == GAME_END )
m_TextSp.paint(g);
m_UI.Paint(g, getWidth(), getHeight());
break;
}
flushGraphics();
}
public void commandAction(Command c, Displayable s){
if( c == MenuCommand ){
switch( m_nState ){
case GAME_END: //游戲結(jié)束,顯示按鈕
case GAME_GAMING: //正在游戲,顯示按鈕
setState(GAME_BUTTON);
break;
case GAME_BUTTON: //正顯示按鈕,退回游戲
setState(GAME_GAMING);
break;
default:
break;
}
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -