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

📄 maincanvas.java

📁 经典java手机游戏J2me(Rpj游戏)
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import javax.microedition.lcdui.*;
import com.nokia.mid.ui.*;

public class mainCanvas extends FullCanvas implements Runnable
{
    private Image       m_offScreen;
    private Graphics    m_offG;
    private int         m_gamePage = 0;     //标识游戏进行中的各页:   0--菜单页  1--游戏页
    private int         m_scene;        //游戏进行中的场景号:  0--战斗页 其它代表各场景的序号
    private int         m_toScene;      //即将要切换去的场景号
    private int         m_switchFightState;  //场景画面与战斗画面的切换状态:
                                             //  1:场景->战斗,亮->暗 应该:场景画面
                                             //  2:场景->战斗,暗->亮 应该:战斗画面
                                             //  3:战斗->场景,亮->暗 应该:战斗画面
                                             //  4:战斗->场景,暗->亮 应该:场景画面
    private int         m_sceneAfterFight;  //记录战斗之后应该回到的场景
    private CMenu       m_menu;         //菜单
    private CMan        m_player;       //主角
    private CSlide      m_slide;        //渐变
    private CText       m_text;         //显示信息
    private boolean     m_confirm  = false; //是否按下确定
    private boolean     m_dialogOn;     //是否处于对话状态
    private int         m_dialogID;     //对话ID号,随着剧情增加
    private boolean     m_firstBoot;    //是否第一次游戏
    private int         m_process = 0;  //游戏进度,与同一个 NPC 说不同的话时用到
    
    public mainCanvas()
    {
        m_offScreen = Image.createImage(176, 208);
        m_offG      = m_offScreen.getGraphics();
        
        m_menu   = new CMenu(m_offG);
        m_player = new CMan(m_offG, "/data/player.png");
        m_text   = new CText(m_offG);
        m_slide  = new CSlide(m_offG);
        int slideAreaX[] = {0, 176, 176, 0};
        int slideAreaY[] = {0, 0, 208, 208};
        m_slide.setSlideArea(slideAreaX, slideAreaY);
        
        (new Thread(this)).start();
    }
    
    public void paint(Graphics g)
    {
        g.drawImage(m_offScreen, 0, 0, 0);
    }
    
    public void run()
    {
    	while(true)
    	{
            //清屏
            m_offG.setColor(0,0,0);
            m_offG.fillRect(0,0,176,208);
            
            //游戏处理            
            switch (m_gamePage)
            {
                case 0:     //菜单页
                    m_menu.draw();
                    if (m_menu.isGameStarted()) //游戏开始
                    {
                        m_player.reset();
                        m_dialogOn = false;
                        m_dialogID = 1;
                        m_gamePage = 1;
                        m_player.loadScene(0, 2);
                        m_scene = 2;
                        m_slide.setSlideState(1);   //游戏开始有渐变效果
                        m_slide.setAlpha(255);
                        m_switchFightState = 4;
                        m_firstBoot = true;
                    }
                    break;
                case 1:     //游戏页
                    if (m_player.isFighted())   //已触发战斗,或正在战斗
                    {
                        if (m_player.isDead())
                        {
                            m_gamePage = 0;     //主角死亡,回到游戏菜单
                            m_menu.reset();
                        }
                        if (m_scene != 0)   //已经触发战斗,但还在场景页面渐变
                        {
                            m_toScene = 0;                  //即将切换到战斗画面
                            m_sceneAfterFight = m_scene;    //记录战斗完后应该返回的场景号
                            m_scene = 0;                    //此次战斗这条 if 语句不再执行
                            m_slide.setSlideState(2);       // 亮 -> 暗
                            m_switchFightState = 1;         //场景->战斗
                        }
                    }
                    else    //处于场景页面
                    {
                        if (m_scene == 0)
                        {
                            m_scene = m_toScene;        //渐变完后回到原来场景
                            m_toScene = 0;              //战斗结束渐暗处理完,即将处理变暗后的场景转换
                            m_slide.setSlideState(2);   // 亮 -> 暗
                            m_switchFightState = 3;     //战斗->场景
                        }
                    }
                    switch (m_switchFightState)
                    {
                        case 1: //场景->战斗,亮->暗 应该:场景画面
                        case 4: //战斗->场景,暗->亮 应该:场景画面
                            m_player.drawMap();
                            m_player.drawNPC();
                            m_player.drawPlayer();
                            checkTalk();    //是否主角触发了对话
                            setDialog();    //设置对话内容
                            break;
                        case 2: //场景->战斗,暗->亮 应该:战斗画面
                        case 3: //战斗->场景,亮->暗 应该:战斗画面
                            m_player.drawBattle();
                            break;
                    }
                    SwitchScene();
                    m_text.paint();
                    break;
            }
            
            //游戏渲染
            this.repaint();
            try{Thread.sleep(80);}catch(Exception d){}
    	}
    }
    
    public void checkTalk()
    {
        if (m_text.getTextState() == 0 && m_confirm)    //没有对话时,并且按下确定时
        {
            switch (m_player.getNextCollideNPC())
            {
                case 4: //与阿美对话时
                    m_dialogOn = true;
                    switch (m_process)
                    {
                        case 1: //与阿美第一次对话完后
                            m_dialogID = 14;
                            break;
                        case 2: //与霍恩第一次对话完后
                        case 3: //与胡尔第一次对话完后
                            m_dialogID = 26;
                            break;
                    }
                    break;
                case 2: //与霍恩对话
                    m_dialogOn = true;
                    switch (m_process)
                    {
                        case 1: //与阿美第一次对话完后
                            m_dialogID = 15;
                            break;
                        case 2: //与霍恩第一次对话完后
                        case 3: //与胡尔第一次对话完后
                            m_dialogID = 25;
                            break;
                    }
                    break;
                case 1: //与胡尔对话
                    m_dialogOn = true;
                    switch (m_process)
                    {
                        case 1: //还没到与此 NPC 对话的时候
                            m_dialogID = 44;
                            break;
                        case 2: //与霍恩第一次对话完后
                            m_dialogID = 27;
                            break;
                        case 3: //与胡尔第一次对话完后
                            m_dialogID = 37;
                            break;
                    }
                    break;
                case 0: //与萨耶对话
                    m_dialogOn = true;
                    switch (m_process)
                    {
                        case 1:
                        case 2: //还没发展到此情节
                            m_dialogID = 44;
                            break;
                        case 3: //与胡尔第一次对话完后
                            m_dialogID = 38;
                            break;
                    }
                    break;
            }
        }
    }
    
    public void setDialog()
    {
        if (m_dialogOn)
        {
            m_text.emptyText();
            switch (m_dialogID)
            {
                case 1:     //========= 与阿美第一次对话
                    m_text.setText(0, "阿美:你终于醒了!");
                    m_text.show();
                    break;
                case 2:
                    m_text.setText(0, "诺齐奥尼:这是什么地");
                    m_text.setText(1, "方?");
                    break;
                case 3:
                    m_text.setText(0, "阿美:我的家啊!你已");
                    m_text.setText(1, "经昏睡了3天啦!");
                    break;
                case 4:
                    m_text.setText(0, "诺齐奥尼:……");
                    break;
                case 5:
                    m_text.setText(0, "阿美:你和你的朋友倒");
                    m_text.setText(1, "在海边,是我爸爸把你");
                    m_text.setText(2, "们救回来的。");
                    break;
                case 6:
                    m_text.setText(0, "诺齐奥尼:露娜,露娜");
                    m_text.setText(1, "……她在哪?");
                    break;
                case 7:
                    m_text.setText(0, "阿美:哦。是那个女孩");
                    m_text.setText(1, "吗?");
                    break;
                case 8:
                    m_text.setText(0, "诺齐奥尼:嗯……");
                    break;
                case 9:
                    m_text.setText(0, "阿美:她还在昏迷当中");
                    m_text.setText(1, "……");
                    break;
                case 10:
                    m_text.setText(0, "诺奇奥尼:那我怎么才");
                    m_text.setText(1, "能救她啊……");
                    break;
                case 11:
                    m_text.setText(0, "阿美:这个我也不知道");
                    m_text.setText(1, "……你去门口找我爸爸");
                    m_text.setText(2, "问问吧,他就在这附近");
                    break;
                case 12:
                    m_text.setText(0, "卖装备呢!");
                    break;
                case 13:
                    m_text.setText(0, "诺奇奥尼:嗯,好的…");
                    m_text.setText(1, "…");
                    m_text.setCanEnd(true);     //第一对话结束!
                    m_process = 1;
                    break;
                case 14:    //========= 与阿美第二次对话
                    m_text.setText(0, "阿美:快去问问我爸爸");
                    m_text.setText(1, "吧,他就在外边附近。");
                    m_text.show();
                    m_text.setCanEnd(true);     //此次对话结束
                    break;
                case 15:    //========= 与霍恩第一次对话
                    m_text.setText(0, "霍恩:小伙子你醒啦?");
                    m_text.show();
                    break;
                case 16:
                    m_text.setText(0, "诺奇奥尼:谢谢您的救");
                    m_text.setText(1, "命之恩!我的朋友还没");
                    m_text.setText(2, "醒,能帮我救救他吗?");
                    break;
                case 17:
                    m_text.setText(0, "霍恩:我已经尽力了,");
                    m_text.setText(1, "她中了一种很奇怪的毒");
                    m_text.setText(2, ",我从来没有见过……");
                    break;
                case 18:
                    m_text.setText(0, "诺奇奥尼:那……那怎");
                    m_text.setText(1, "么办?");
                    break;
                case 19:
                    m_text.setText(0, "霍恩:村子附近有个男");
                    m_text.setText(1, "孩叫胡尔,他性格很孤");
                    m_text.setText(2, "僻,但是精通医术,你");
                    break;
                case 20:
                    m_text.setText(0, "试着去找他问问吧。");
                    break;
                case 21:

⌨️ 快捷键说明

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