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

📄 maincanvas.java

📁 用JavaME开发的手机版CS和射击飞机的游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

import java.util.Random;

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.*;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.*;

public class MainCanvas extends GameCanvas
        implements Runnable, CommandListener {

    public static final int GAME_UI = 0;	//进入用户界面
    public static final int GAME_GAMING = 1;	//进行游戏
    public static final int GAME_BUTTON = 2;	//游戏时显示界面按钮
    public static final int GAME_END = 3;	//游戏结束
    public static final int GAME_STATE_NUM = 4;	//状态总数
    private int m_nState = GAME_UI;
    //存储当前的游戏状态
    private boolean m_bRunning;		    		//控制线程运行
    private MyUI m_UI;						//界面对象
    private int m_nLife;     				//生命值
    private int time = 100; 					//反应时间
    private int isCol;                      //判断是否碰撞
    private MyRecord m_Record;					//记录对象
    private MyBack m_Back;						//背景对象
    private GunAndAim m_GunAim;					//准心对象
    private EnemySprite m_aEnemy[];					//敌人对象
    private Random m_Random;
    private Command MenuCommand;						//高级按钮对象
    private Command HelpCommand;
    public  int m_nPosY;						//控制文字位置的纵坐标
    public  Font     m_aFont;						//存储字体
    private About m_About;					//帮助界面
  
    public MainCanvas() {
        super(true);
        try {
            //创建用户界面,并设置界面中的按钮
            MyButton button = new MyButton(41, 21, 0, 1, -1, 3, -1, 2);
            m_UI = new MyUI(button);
        } catch (Exception exception) {
        }
        setState(GAME_UI);
        Start();
    }
    //重新开局
    private void Reset() {
        //创建随机数对象
        if (m_Random == null) {
            m_Random = new Random();
        }
        //设置生命值
        m_nLife = 10;   //游戏的生命
        time = 100;
        //创建记录对象
        if (m_Record == null) {
            m_Record = new MyRecord("CSScore");
        }
        m_Record.setCurRecord(0);
        //创建背景


        if (m_Back == null) {
            m_Back = new MyBack();
        }

        //创建枪和准心图像
        if (m_GunAim == null) {
            m_GunAim = new GunAndAim(getWidth(), getHeight());
        }
        //创建敌人
    //    if (m_aEnemy == null) {
            try {
                //读取随机敌人类型,一共是三种
                Random rdm1 = new Random();
                int randomImage = (rdm1.nextInt() >>> 1) % 3;
                Image img = null;
                if (randomImage == 0) {
                    img = Image.createImage("/enemy1.png");
                } else if (randomImage == 1) {
                    img = Image.createImage("/enemy2.png");
                } else if (randomImage == 2) {
                    img = Image.createImage("/enemy3.png");
                }
                m_aEnemy = new EnemySprite[6];
                for (int n = 0; n < m_aEnemy.length; n++) {
                    m_aEnemy[n] = new EnemySprite(img, 47, 45);
                    m_aEnemy[n].setState(EnemySprite.ENEMY_HIDE);
                }
                int x = getWidth() / 2;
                int y = getHeight() / 2;
                //设置六个敌人的位置
                m_aEnemy[0].setPosition(x - 90, y - 80);
                m_aEnemy[1].setPosition(x - 19, y - 80);
                m_aEnemy[2].setPosition(x + 40, y - 80);
                m_aEnemy[3].setPosition(x - 90, y - 20);
                m_aEnemy[4].setPosition(x - 18, y);
                m_aEnemy[5].setPosition(x + 40, y - 20);
            } catch (Exception exception) {
            }
    //    }
        

        if (MenuCommand == null) {
            //创建菜单
            MenuCommand = new Command("Menu", Command.OK, 0);
            addCommand(MenuCommand);
            setCommandListener(this);
           
        }
        if(HelpCommand ==null)
        {
             HelpCommand = new Command("Help", Command.OK, 0);
            addCommand(HelpCommand);
            setCommandListener(this);
        }
    }

    private void setState(int state) {					//设置游戏状态
        if (state < 0 || state >= GAME_STATE_NUM) {
            return;
        }
        m_nState = state;
        switch (m_nState) {
            case GAME_UI:										//进入用户界面
                m_UI.setState(MyUI.UI_TITLE);					//显示标题界面   


                //设置本游戏的按钮类型,本游戏有:开始及退出两种按钮
                m_UI.getButton().setShow(true, false, false,true, false, true);
                break;
            case GAME_BUTTON:									//在游戏中途显示按钮
                m_UI.setState(MyUI.UI_BUTTON);
                //游戏中途,显示复位与退出按钮
                m_UI.getButton().setShow(false, true, false, false, false, true);
                break;
            case GAME_GAMING:									//正在游戏
                m_UI.setState(MyUI.UI_HIDE);
                break;
            case GAME_END:										//游戏结束
                m_UI.setState(MyUI.UI_HIDE);
                break;
        }
    }

    public void Start() {
        m_bRunning = true;
        Thread thread = new Thread(this);	//分配新线程
        thread.start();						//线程启动
    }

    public void run() {
        //得到系统当前时间,并将时间换算成毫秒
        long T1 = System.currentTimeMillis();
        long T2 = T1;
        while (m_bRunning) {
            T2 = System.currentTimeMillis();
            if (T2 - T1 > time) {			//间隔100毫秒
                T1 = T2;
                Input();
                Logic();
                Paint();
            }
        }
    }

    public void Stop() {
        m_bRunning = false;
    }

    public void Input() {
        int flag = 1, tmp = 0;

        int keyStates = getKeyStates();
        isCol = 0;
        switch (m_nState) {
            case GAME_UI:
                 {
                    switch (m_UI.Input(keyStates)) {
                        case MyButton.BUTTON_START:					//按下开始键
                            flag = 0;                                 //flag为0时不发出声音
                            Reset();
                            setState(GAME_GAMING);
                            break;
                        case MyButton.BUTTON_EXIT:					//按下退出键
                            CSMidlet.midlet.notifyDestroyed();
                            break;
                    }
                }
                break;
            case GAME_GAMING:									//游戏中
                m_GunAim.Input(keyStates, getWidth(), getHeight(), isCol);   //检测输入

                //如果玩家开火,则将准心与敌人做碰撞检测
                //	if( m_GunAim.getState() == GunAndAim.GA_FIRE ){
                /********************************************************************************
                检验子弹是否和敌人飞机炸弹碰撞,是则一起爆炸失效
                 *******************************************************************************/
                for (int n = 0; n < m_aEnemy.length; n++) {
                    if (m_GunAim.m_AimSp.collidesWith(m_aEnemy[n], true)) {//如果打中敌人,则增加分数
                        if (m_aEnemy[n].getState() != EnemySprite.ENEMY_DEAD) //已打死的敌人不能再打死得分
                        {
                            isCol = 1;
                            int record = m_Record.getCurRecord();
                            m_Record.setCurRecord(record + 1);
                            m_aEnemy[n].setState(EnemySprite.ENEMY_DEAD);
                            if (flag == 1) {
                                SoundPlayer.getInstance().playDieSound();
                            }
                            //n=m_aEnemy.length;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -