J2ME的一点笔记

命运跟我开了一场玩笑,一个不喜欢很多游戏的人,却写起了游戏。。。
参加工作与在学校,有一点不同是:是否为强迫性的——对于工作,即使你不喜欢,同样要做。
既然在做,那就得尽力做,每个人都应该如此。
努力思考,学习。
笔记还是要做的:

笔记一:
发牌程序,对程序员来说,发牌的过程只是一个将本来排好序的数组的顺序打乱而已,这个方法耍的只是一个小聪明,使得 Random.nextInt() 方法的运行次数只等于牌的数量
 1       /**
 2       *  @author  liltos
 3       *  @param  length 要发的牌数
 4       * 
 5       * 随机发牌的程序,它的特点在于发length张牌的话
 6       * 只要运行length次Random.nextInt()方法!
 7       * 程序中的4个for循环,有2个用于输出,1个用于数组的初始化
 8       * 只有一个for循环是用于发牌的
 9        */
10       public   static   void  randomDeliverCard( int  length) {
11           int [] card1  =   new   int [length];
12           int [] result  =   new   int [length];
13 
14           for  ( int  i  =   0 ; i  <  card1.length; i ++ )
15              card1[i]  =  i  +   1 ;
16           for  ( int  i  =   0 ; i  <  card1.length; i ++ ) {
17              System.out.print(card1[i]  +   " /t " );
18               if  ((i  +   1 %   9   ==   0 )
19                  System.out.println();
20          }
21 
22          Random rand  =   new  Random(System.currentTimeMillis());
23 
24           int  rand_index  =   0 ;
25           int  remain  =  card1.length;
26 
27           /*
28           * 当将rand_index上的数取出后,为防止再次取到该数,
29           * 便将数组末尾的数填充到该位置上,并将数组末尾的标志remain减1
30           * 而下标随机数的取值一直是在remain范围之内的
31            */
32           for  ( int  i  =   0 ; i  <  card1.length; i ++ ) {
33              rand_index  =  Math.abs(rand.nextInt()  %  remain);
34              result[i]  =  card1[rand_index];
35              card1[rand_index]  =  card1[remain  -   1 ];
36              remain -- ;
37          }
38 
39          System.out.println( " /n/n " );
40           for  ( int  i  =   0 ; i  <  result.length; i ++ ) {
41              System.out.print(result[i]  +   " /t " );
42               if  ((i  +   1 %   10   ==   0 )
43                  System.out.println();
44          }
45      }

笔记二:
初始化一个 TiledLayer 地图,一般情况下的 TiledLayer 地图只是一个二维数组,这个方法只是将这个二维数组正确地转化成期望的地图。
 1  /**
 2   * @parm array 代表地图的数组
 3    */
 4  public   void  initMap( int [][] array) {
 5      map  =   new  TiledLayer(array[ 0 ].length, array.length, image, w, h);
 6       for  ( int  i  =   0 ; i  <  array.length; i ++ ) {
 7          for  ( int  j  =   0 ; j  <  array[ 0 ].length; j ++ ) {
 8             map.setCell(j, i, array[i][j]);
 9         }
10      }
11  }
这个方法的关键之处在于调用 构造方法和 setCell() 方法时前两个参数的顺序。

笔记三:
关于一个J2ME程序的框架,在第一次写J2ME的游戏时,只是感觉一头雾水。下面这个是总结的一点点东东:

MIDlet
  GameCanvas gameCanvas;
  GameThread gameThread;//如果有其它的一些事情,可以在此定义更多的线程,并在 startApp() 方法内启动线程
  Display display;

  startApp(){
    gameThread.start();
    display.setCurrent(gameCanvas);//如果有必要,可以调整显示对象
  }
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
GameCanvas
  LayerManager layerManager;

  GameCanvas(){
    super(false);
    layerManager = new LayerManager(this);
  }

  paint(Graphics g){
    switch(gameState){
      case GAMING:
        layerManager.paint(g, x_view, y_view);
    }
  }

  refresh(){
    layerManager.refresh();
    zepaint();
  }

  doKeyEvent(){
    int keyState = this.getKeyStates();
    switch(gameState){
      case GAMING:
        layerManager.doKeyEvent(keyState);
        break;
            case ...:(other state)
        //画面变化不大/非游戏状态下,调用本类的事件处理方法
        break;
    }
  }

  zepaint(){
    paint(g);
    flushGraphics();
  }

  处理静止画面在本类中

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
 LayerManager
  GameCanvas gameCanvas;

  LayerManager(GameCanvas gameCanvas){}

  refresh(){
   ...refresh sprites...
  }

  doKeyEvent(int key){
    switch(key){
      case ...:
        handle data;
    }
  }

  paint(Graphics g, int x, y){
    super();
   ...paint sprites...
  }
  很多程序会只调用 append(Layer) 方法而不重载父类的 paint(Graphics, int, int) 方法,同样可以实现游戏中的绘画功能。而当用的是 TiledLayer 作背景时,我还不知道如果重载该方法 -_-! 本质上是对坐标系的认识不清!
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
GameThread
  GameCanvas gameCanvas;
  GameThread(GameCanvas gameCanvas){}
  run(){
    while(true){
      gameCanvas.doKeyEvent();
      gameCanvas.refresh();
      Thread.sleep(100);
    }
  }
------------------------
  这只是我一般程序里的框架,可不是死框架,但从我接触过的来看,这个框架还是比较经典的。

  如此的笔记希望让别人能够看懂。 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值