📄 gamecanvas.java
字号:
/*
* GameCanvas.java
*
* Created on 2007年3月14日, 上午10:02
*/
import java.util.Timer;
import javax.microedition.lcdui.*;
import java.io.IOException;
import java.util.Random;
/**
*
* @author MissYou
* @version
*/
public class GameCanvas extends Canvas implements Runnable, CommandListener {
/**
* constructor
*/
private static final int TIMEPERSTAGE = 45;
private static final int GOLDNUM = 10;
private static final int STONENUM = 4;
private static final int SOMETHINGNUM = 2;
private static final int GAMEOVER = 0;
private static final int STARTING = 1;
private static final int CIRCUMGYRATEING = 2;
private static final int STRETCHING = 3;
private static final int BACKING = 4;
private static final int CATCHING = 5;
private static final int STAGEPASSING = 6;
private static final int ALLSTATESPASSED = 7;
private boolean isPaused;
/** Start指令变量 */
private Command startCmd = new Command("开始游戏", Command.SCREEN, 1);
/** Exit指令变量 */
private Command exitCmd = new Command("离开游戏", Command.SCREEN, 5);
/** Pause指令变量 */
private Command pauseCmd = new Command("暂停游戏", Command.SCREEN, 1);
/** Resume指令变量 */
private Command resumeCmd = new Command("继续游戏", Command.SCREEN, 1);
/** Quit指令变量 */
private Command quitCmd = new Command("重新开始", Command.SCREEN, 4);
private GoldMiner goldminer;
private Gold [] gold = new Gold[GOLDNUM];
private Stone [] stone = new Stone[STONENUM];
private Something [] somethings = new Something[SOMETHINGNUM];
private int ScreenWidth;
private int ScreenHeight;
private Random randomTool = new Random();
private Hook hook = new Hook();
private boolean hookCirState; //ture表示向右,false表示向左转
private int Stage;
private Image BackGround;
private Gain gain;
private int AmountofMoney;
private int StageNum;
private int [] MinMoney = { 650, 1500, 2500, 3700, 5000, 6500, 8000, 10000 };
private int LeftTime;
private int MoneyToAdd;
private Timer timer = null;
private Diamond diamond = null;
private boolean hasDiamond;
public GameCanvas( GoldMiner goldminer ) {
setFullScreenMode(true);
this.goldminer = goldminer;
ScreenWidth = getWidth();
ScreenHeight = getHeight();
Stage = STARTING;
gain = new Gain();
try {
BackGround = Image.createImage("/BG.png");
} catch(IOException ioe){
System.out.println("Can't load file Background.png");
}
}
private void Initialize(){
hookCirState = true;
hook.Initialize();
AmountofMoney = 0;
isPaused = false;
StageNum = 1;
LeftTime = TIMEPERSTAGE;
MoneyToAdd = 0;
hasDiamond = false;
IniGold();
IniStone();
IniSomethings();
setCommandListener(this);
Stage = STARTING;
addCommand(startCmd);
addCommand(exitCmd);
}
private void ChangeStage(){
StageNum++;
hookCirState = true;
IniGold();
IniStone();
Stage = CIRCUMGYRATEING;
LeftTime = TIMEPERSTAGE;
MoneyToAdd = 0;
hook.Initialize();
}
private void IniGold(){
int tempint = 1;
for( int i = 0; i < GOLDNUM; i++ ){
if ( i < 2 ){
gold[i] = new Gold( 5+randomTool.nextInt(ScreenWidth-10),
randomTool.nextInt(ScreenHeight/2-40)+50, tempint );
} else{
tempint = randomTool.nextInt(4)+1;
gold[i] = new Gold(randomTool.nextInt(ScreenWidth-30)+15,
randomTool.nextInt(ScreenHeight/2)+ScreenHeight/3+30, tempint );
}
}
}
private void IniStone(){
for( int i = 0; i < STONENUM; i++ ){
stone[i] = new Stone(50+randomTool.nextInt(ScreenWidth-100),
randomTool.nextInt(ScreenHeight/2-40)+70, randomTool.nextInt(2)+1);
if ( StageNum > 3 && stone[i].getSize() == 2 &&
randomTool.nextInt(2) == 0 && hasDiamond == false ){
diamond = new Diamond(stone[i].getX()+3, stone[i].getY()+3, 1);
hasDiamond = true;
}
}
}
private void IniSomethings(){
for( int i = 0; i < SOMETHINGNUM; i++ ){
somethings[i] = new Something( 5+randomTool.nextInt(ScreenWidth-10),
randomTool.nextInt(ScreenHeight/2-40)+50 );
}
}
public void doPauseApp(){
}
public void doStartApp(){
//repaint();
Thread t = new Thread(this);
t.start();
}
/**
* paint
*/
public void paint(Graphics g) {
switch(Stage){
case STARTING:
Initialize();
try{
g.drawImage( Image.createImage("/Start.png"), ScreenWidth/2,
ScreenHeight/2, Graphics.HCENTER|Graphics.VCENTER );
} catch(IOException ioe){}
break;
case CIRCUMGYRATEING :
paintBackGround(g);
hook.getHookSprite().paint(g);
break;
case STRETCHING:
paintBackGround(g);
g.setColor(0x00000000);
g.drawLine(hook.INIX, hook.INIY, hook.getX(), hook.getY());
hook.getHookSprite().paint(g);
break;
case BACKING :
paintBackGround(g);
g.setColor(0x00000000);
g.drawLine(hook.INIX, hook.INIY, hook.getX(), hook.getY());
hook.getHookSprite().paint(g);
break;
case CATCHING :
paintBackGround(g);
g.setColor(0x00000000);
g.drawLine(hook.INIX, hook.INIY, hook.getX(), hook.getY());
gain.getGainSprite().setRefPixelPosition(hook.getX(), hook.getY());
gain.getGainSprite().paint(g);
break;
case STAGEPASSING :
try{
g.drawImage( Image.createImage("/GP.png"), ScreenWidth/2,
ScreenHeight/2, Graphics.HCENTER|Graphics.VCENTER );
g.setColor(254, 255, 0);
g.drawString(String.valueOf(MinMoney[StageNum]), 150, 170,
Graphics.TOP|Graphics.LEFT);
if ( StageNum >= 3 ){
g.setColor(0x00000000);
g.drawString("在某个大石头后面可能",
40, 220, Graphics.TOP|Graphics.LEFT);
g.drawString( "藏有价值连城的钻石哟!", 40, 240,
Graphics.TOP|Graphics.LEFT );
}
} catch(IOException ioe){
System.out.println("Can't load GP.png file.");
}
break;
case GAMEOVER :
try{
g.drawImage( Image.createImage("/GameOver.png"), ScreenWidth/2,
ScreenHeight/2, Graphics.HCENTER|Graphics.VCENTER );
} catch(IOException ioe){
System.out.println("Can't load GameOver.png file.");
}
break;
case ALLSTATESPASSED :
try{
g.drawImage( Image.createImage("/CM.png"), ScreenWidth/2,
ScreenHeight/2, Graphics.HCENTER|Graphics.VCENTER );
} catch(IOException ioe){
System.out.println("Can't load GameOver.png file.");
}
break;
}
}
private void paintBackGround(Graphics g){
g.drawImage( BackGround, ScreenWidth/2,
ScreenHeight/2, Graphics.HCENTER|Graphics.VCENTER );
g.setColor(0x00FF00FF);
g.drawString(String.valueOf(AmountofMoney), 45, 1, Graphics.TOP|Graphics.LEFT);
g.drawString(String.valueOf(StageNum), 205, 15, Graphics.TOP|Graphics.LEFT);
g.drawString(String.valueOf(MinMoney[StageNum-1]), 63, 15, Graphics.TOP|Graphics.LEFT);
g.drawString(String.valueOf(LeftTime), 220, 1, Graphics.TOP|Graphics.LEFT);
if ( hasDiamond ){
diamond.getTargetSprite().paint(g);
}
for( int j = 0; j< GOLDNUM; j++) {
gold[j].getTargetSprite().paint(g);
}
for( int i = 0; i < STONENUM; i++ ){
stone[i].getTargetSprite().paint(g);
}
for( int i = 0; i < SOMETHINGNUM; i++ ){
somethings[i].getTargetSprite().paint(g);
}
}
/**
* Called when a key is pressed.
*/
protected void keyPressed(int keyCode) {
int gameCode = getGameAction(keyCode);
if ( Stage == CIRCUMGYRATEING && !(isPaused)){
if (gameCode == DOWN){
Stage = STRETCHING;
}
}
}
/**
* Called when a key is released.
*/
protected void keyReleased(int keyCode) {
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -