⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamecanvas.java

📁 一款支持蓝牙传输的游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -