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

📄 cmenu.java

📁 经典java手机游戏J2me(Rpj游戏)
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.Canvas;
import com.nokia.mid.ui.*;

public class CMenu
{
    private Graphics    m_offG;
    private Image       m_imbk;
    private Image       m_imHelp;
    private Image       m_imSign1;
    private Image       m_imSign2;
    private Image       m_imLOGO1;
    private Image       m_imLOGO2;
    private int         m_Frame = 1;          //起始状态,通过按键控制当前选项
    private int         m_nowFrame = 1;       //按下确定键时的当前状态
    private boolean     m_confirm = false;    //判断是否按下确定键
    private int         m_t2 = 0;             //用来限制从按下确定到下一个页面显示之间的时间
    private int         m_t1 = 0;             //用来限制移动百宝箱和移动LOGO的加载时间
    private boolean     m_start = true;
    private int         m_alpha = 0;          //做渐变效果
    private int         m_px[]={0,176,176,0};
    private int         m_py[]={0,0,208,208};
    private boolean     m_isStarted = false;  //是否开始进行游戏
    private boolean     m_canSelect = true;  //是否允许选择菜单
    
    public CMenu(Graphics graphics)
    {
        m_offG    = graphics;
        try
        {
            m_imbk    = Image.createImage("/data/logo6.png");
            m_imHelp  = Image.createImage("/data/help.png");
            m_imSign1 = Image.createImage("/data/xx.png");
            m_imSign2 = Image.createImage("/data/xx2.png");
            m_imLOGO2 = Image.createImage("/data/Mbox-Icon.png");
            m_imLOGO1 = Image.createImage("/data/monlernet.png");
        } catch(Exception e) { System.out.println("CMenu PIC ERROR!!!"); }
    }
    
    public void drawHelp()
    {
        m_offG.setClip(0, 0, 176, 208);
        m_offG.drawImage(m_imHelp, 0, 0, 0);
    }
    
    public void drawLOGO()
    {
        m_offG.setClip(0, 0, 176, 208);
        m_offG.drawImage(m_imbk, 0, 0, 0);
        if(!m_confirm)//没有按下确定的时候加载翅膀合拢的图片
        {
            m_offG.setClip(60, 105, 59, 81);
            m_offG.drawImage(m_imSign1, 60 - (this.m_Frame - 1) * 59, 105, 0);
        }
        else    //按下确定之后加载翅膀展开的图片
        {
            m_offG.setClip(22, 105, 138, 81);
            m_offG.drawImage(m_imSign2, 22 - (this.m_Frame - 1) * 138, 105, 0);
            m_nowFrame = m_Frame;
        }
    }
    
    public void draw()
    {
        run();
        
        DirectGraphics dg = DirectUtils.getDirectGraphics(m_offG);
        if(m_t1 <= 30)    //显示第一张移动百宝箱 LOGO
        {
            m_offG.setColor(255, 255, 255);
            m_offG.fillRect(0, 0, 176, 208);
            m_offG.setClip(30, 66, 116, 75);
            m_offG.drawImage(m_imLOGO1, 30, 66, 0);
        }
        else if(m_t1 > 30 && m_t1 <= 55)    //显示第二张移动百宝箱 LOGO
        {
            m_offG.setClip(0, 0, 176, 208);
            m_offG.drawImage(m_imLOGO2, 0, 0, 0);
        }
        else    //显示菜单
        {
            drawLOGO();
            m_start = false;
        }
        switch(m_nowFrame)
        {
            case 1: //start
                m_offG.setClip(0, 0, 176, 208);
                dg.fillPolygon(m_px, 0, m_py, 0, 4, 0x00000000 + m_alpha * 0x10000000);
            	if (m_t2 > 15)
            	{
                    setGameStarted(true);
                    m_confirm = false;
            	}
                break;
            case 2: //read
            	//未完成,需要用到数据仓库暂时搁置
                break;
            case 3: //help
                m_offG.setClip(0, 0, 176, 208);
                dg.fillPolygon(m_px, 0, m_py, 0, 4, 0x00000000 + m_alpha * 0x10000000); //255是不透明
            	if (m_t2 > 15)
            	{
                    drawHelp();
                    m_confirm = false;
            	}
                break;
            case 4: //about
            	//未完成
                break;
            case 5: //exit
            	gameStart.midlet.notifyDestroyed();
                break;
        }
    }
    
    public void run()
    {
        if(m_start)   //标志一开始的时候显示移动和百宝箱的LOGO
        {
            m_t1++;
            if (m_t1 > 60)
                m_t1 = 0;
        }
        else if (m_confirm) //标志按下确定键后控制进入下一个画面的时间差,渐变
        {
            m_t2++;
            if (m_t2 > 20)
                m_t2 = 0;
            if (m_alpha < 255)
            {
                m_alpha += 17;
            }
            else
            {
                m_confirm = false;
                m_alpha = 255;
            }
        }
    }
    
    public void reset()
    {
        m_Frame = 1;          //起始状态,通过按键控制当前选项
        m_nowFrame = 1;       //按下确定键时的当前状态
        m_confirm = false;    //判断是否按下确定键
        m_t2 = 0;             //用来限制从按下确定到下一个页面显示之间的时间
        m_t1 = 56;            //用来限制移动百宝箱和移动LOGO的加载时间
        m_start = false;
        m_alpha = 0;          //做渐变效果
        m_isStarted = false;  //是否开始进行游戏
        m_canSelect = true;   //是否允许选择菜单
    }
    
    public void setGameStarted(boolean isStarted)
    {
        m_isStarted = isStarted;
    }
    
    public boolean isGameStarted()
    {
        return m_isStarted;
    }
    
    public void keyPressed(int key)
    {
        if (!m_start && m_canSelect)   //移动LOGO显示完后才响应菜单选择,同时正在渐变效果时不能选择
        {
            switch(key)
            {
                case Canvas.UP:
                    m_Frame -= 1;
                    if (m_Frame < 1)
                        m_Frame = 5;
                    break;
                case Canvas.DOWN:
                    m_Frame += 1;
                    if (m_Frame > 5)
                        m_Frame = 1;
                    break;
                case Canvas.FIRE:
                    m_confirm   = true;
                    m_canSelect = false;
                    break;
            }
        }
        if (!m_start)
        {
            if (key == 0)   //按下右键或左键、1 键、3 键、0 键,返回菜单
            {
                m_nowFrame = 0; 
                m_Frame    = 1;     //返回菜单时显示第一项“进入游戏”
                m_t2       = 0;
                m_alpha    = 0;
                m_canSelect = true;
            }
        }
    }
}

⌨️ 快捷键说明

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