正文

可以运行的简单Canvas游戏菜单2006-08-10 15:30:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/17464.html

分享到:


//by sword2008@程序之巢
//网上的那些错误基本上改正
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;

public class menucanvas extends MIDlet

{ public menucanvas(){}


 
 public void startApp(){
 Display.getDisplay(this).setCurrent(new Can());}
 public void pauseApp(){}
 public void destroyApp(boolean unkowmn){}

 

}

class Can extends Canvas{
//焦点
 private int selected=0;
 private int preferwidth=-1;
 private int preferheight=-1;
 public static final int[] options = {0,1,2,3};
 public static final String[] labels={"新游戏","设置","高分","退出"};


 public Can(){
 selected = options[0];
 Font f=Font.getDefaultFont();
 for(int i = 0;i<labels.length;i++){
 int temp = f.stringWidth(labels[i]);//计算字符串的宽度
 if(temp > preferwidth){
 preferwidth = temp;
                       }
 preferwidth = preferwidth + 2*16;
 preferheight = f.getHeight()+2*8;
       }
             }
//paint
 public void paint(Graphics g){
 int color=g.getColor();
 g.setColor(0xffffff);
 g.fillRect(0,0,getWidth(),getHeight());
 g.setColor(color);
  //计算整个菜单的高度,宽度和(x,y)
  int rectwidth = preferwidth;
  int rectheight = preferheight * labels.length;
  int x = (getWidth()-rectwidth)/2;
  int y = (getHeight()-rectheight)/2;
//画矩形
 g.drawRect(x,y,rectwidth,rectheight);
 for(int i = 1;i<labels.length;i++){
 g.drawLine(x,y+preferheight*i,x+rectwidth,y+preferheight*i);
       }
//
 for(int j = 0;j<labels.length;j++){
 if(selected == j){
 g.setColor(0x6699cc);
 g.fillRect(x+1,y+j*preferheight+1,rectwidth-1,preferheight-1);
 g.setColor(color);
     }
 g.drawString(labels[j],x+8,y+j*preferheight+4,Graphics.LEFT|Graphics.TOP);
       }
    }
public void keyPressed(int keycode){
//根据用户输入更新selected的值,并重新绘制屏幕
 int action = this.getGameAction(keycode);
 switch(action){
 case Canvas.FIRE:
 printlabel(selected);
 break;
 case Canvas.DOWN:
 selected = (selected+1)%4;
 break;
 case Canvas.UP:{
 if(--selected < 0){
  selected+=4;
  }
 break;
 }
 default:
 break;
 }
 repaint();
 serviceRepaints();
 }
 //shownotify()在paint()之前被调用
 public void shownotify(){//90
 System.out.println("shownotify() is called");
    }
 private void printlabel(int selected){
 System.out.println(labels[selected]);
          }
         

   }

 /*

int action = getGameAction(keyCode);

       其中,keyCode和游戏动作的对应关系如下:

              Canvas.UP——数字键2和向上导航键

              Canvas.DOWN——数字键8和向下导航键

              Canvas.LEFT——数字键4和向左导航键

              Canvas.RIGHT——数字键6和向右导航键

              Canvas.FIRE——数字键5和确定导航键

       Game_AGame_BGame_CGame_D分别对应键盘上的1379或者是79*#键。

       经过上面的转换以后,代码实现就和手机键盘上的键值无关了。

       另外,如果是Nokia系列的手机,还可以使用com.nokia.mid.ui.FullCanvas类里面的SOFTKEY1SOFTKEY2来控制Nokia系列手机上的左右两个软键,做到这两个软键的处理通用。

*/

 


 

阅读(3746) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册