J2ME游戏开发

J2ME游戏开发
GameCanvas.java
  1  package  MyJava3;
  2  import  com.nokia.mid.ui.FullCanvas;
  3  import  javax.microedition.lcdui.Display;
  4  import  javax.microedition.lcdui.Graphics;
  5  import  javax.microedition.lcdui.Image;
  6  import  javax.microedition.midlet.MIDlet;
  7 
  8  public   class  GameCanvas  extends  FullCanvas  implements  Runnable
  9  {
 10       // #------------------------------游戏主要部分------------------------------
 11       // #------------------------------公共变量------------------------------
 12       private   boolean  threadRunAble  =   true ; // 线程运行条件
 13       private  Thread mainThread;  // 线程
 14       private   int  key_state  =   0 ; // 当前键值
 15       private   boolean  key_lock  =   false ; // 按键执行状态 ture 执行时候其他逻辑绘制代码不执行
 16       private   int  main_state;  // 1级状态变量
 17       private   int  countTime; // 时间控制
 18       public   final   static   int  DC_KEY_SOFT_LEFT  =   - 6 // 左软件(此键值为NOKIA键值)
 19       public   final   static   int  DC_KEY_SOFT_RIGHT  =   - 7 // 右软件
 20       public   final   static   int  DC_KEY_SOFT_MID  =   - 5 ; // 中间键
 21       public   final   static   byte  ONE_MAIN_MIGLOGO  =   0 ; // 米格闪屏
 22       public   final   static   byte  ONE_MAIN_MENU  =   3 ; // 主菜单
 23      
 24       // &------------------------------公共变量------------------------------
 25         /**
 26         * 构造函数
 27         * 启动游戏主线程,初始化
 28         *  @param  midlet HeroMidlet
 29          */
 30       public  GameCanvas(MIDlet midlet)
 31      {
 32          init_MainMiglogo(); // 一开始进入为LOGO状态
 33          Display.getDisplay(midlet).setCurrent( this );
 34          mainThread  =   new  Thread( this );
 35          mainThread.start(); // 启动主线程
 36      }
 37      
 38        /**
 39         * 游戏主线程
 40          */
 41       public   void  run() // 游戏主线程,不停的循环执行
 42      {
 43           while (threadRunAble)
 44          {
 45               if ( ! key_lock)
 46              {
 47                  process_All(); // 逻辑处理
 48                  repaint();  // 绘制
 49                  serviceRepaints();
 50              }
 51          }
 52      }
 53      
 54        /**
 55         * 游戏绘制部分
 56         * 根据主状态处理不同的绘制
 57         *  @param  Graphics
 58          */
 59       public   void  paint(Graphics g)
 60      {
 61           switch (main_state) // 根据当前状态处理当前状态的绘制
 62          {
 63           case  ONE_MAIN_MIGLOGO:
 64                          draw_MainMiglogo(g); // 如果是LOGO状态处理LOGO的绘制
 65                           break ;
 66           case  ONE_MAIN_MENU:
 67                          draw_MainMenu(g); // 如果是MENU状态处理MENU的绘制
 68                               break ;
 69          }
 70      }
 71      
 72        /**
 73         * 游戏逻辑控制部分
 74         * 根据主状态处理不同的逻辑
 75          */
 76       protected   void  process_All()
 77      {
 78           switch (main_state)
 79          {
 80           case  ONE_MAIN_MIGLOGO:
 81                          process_MainMiglogo(key_state); // 如果是LOGO状态处理LOGO的逻辑
 82                           break ;
 83           case  ONE_MAIN_MENU:
 84                          process_MainMenu(key_state); // 如果是MENU状态处理MENU的逻辑
 85                           break ;
 86          }
 87      }
 88      
 89        /**
 90         * 游戏逻辑控制部分2,按键处理
 91         * 根据主状态处理不同的逻辑
 92         *  @param  keyCode
 93          */
 94       protected   void  keyPressed( int  keyCode) // 当按键按下去执行一次
 95      {
 96          key_lock  =   true ;
 97          key_state  =  keyCode;
 98           switch (main_state)
 99          {
100           case  ONE_MAIN_MIGLOGO:
101                          key_MainMiglogo(key_state); // 如果是LOGO状态处理LOGO的按键处理
102                           break ;
103           case  ONE_MAIN_MENU:
104                           key_MainMenu(key_state); // 如果是MENU状态处理MENU的按键处理
105                            break ;
106          }
107          key_lock  =   false ;
108      }
109      
110       /**
111         * 释放按键处理
112         *  @param  keyCode int
113          */
114       protected   void  keyReleased( int  keyCode) // 当按键松开执行一次
115      {
116          key_state  =   0 ;
117      }
118      
119       // &------------------------------游戏主要部分------------------------------
120         // ***********************1***********************
121       protected   void  init_MainMiglogo() // LOGO状态初始化
122      {
123          countTime  =   0 ;
124          main_state  =  ONE_MAIN_MIGLOGO;
125      }
126      
127      Image logoImg;
128      
129       public   final   static  Image loadImg(String pictureName)
130      {
131          Image img  =   null ;
132           try
133          {
134              img  =  Image.createImage( " /bin/ " + pictureName + " .png " );
135          }
136           catch (Exception e)
137          {
138              e.printStackTrace();
139          }
140           return  img;
141      }
142       protected   void  draw_MainMiglogo(Graphics g) // LOGO状态绘制
143      {
144          g.setClip( 0 0 240 320 );
145          g.setColor( 0x000000 );
146          g.fillRect( 0 0 240 320 ); // 清屏
147          g.setColor( 0xffffff );
148          logoImg  =  loadImg( " logo " );
149           // g.drawImage(logoImg,240>>1,320>>1,Graphics.HCENTER | Graphics.VCENTER);
150          g.drawString( " 是否开启音乐? " 73 120 0 );
151          g.drawString( " " 5 300 0 );
152          g.drawString( " " 220 300 0 );
153          
154      }
155      
156       protected   void  process_MainMiglogo( int  keyCode) // LOGO状态逻辑处理
157      {
158          countTime ++ ;
159           if (countTime  >   50 ) // 20次循环后转入菜单状态
160          {
161              out_MainMiglogo();
162              init_MainMenu();
163          }
164      }
165      
166       protected   void  key_MainMiglogo( int  keyCode)  // LOGO状态逻辑处理
167      {
168          
169      }
170      
171       protected   void  out_MainMiglogo()  // 退出LOGO状态
172      {
173          
174      }
175      
176        // ***********************2***********************
177       protected   void  init_MainMenu() // MENU状态初始化
178      {
179          countTime  =   0 ;
180          main_state  =  ONE_MAIN_MENU;
181      }
182      
183       protected   void  draw_MainMenu(Graphics g) // MENU状态绘制
184      {
185          g.setClip( 0 0 240 320 );
186          g.setColor( 0x000000 );
187          g.fillRect( 0 0 240 , 320 ); // 清屏
188          g.setColor( 0xffffff );
189          g.drawString( " this Menu " 0 0 0 );
190          g.drawString( "" + key_state,  0 20 0 );
191      }
192 
193       protected   void  process_MainMenu( int  keyCode)  // MENU状态逻辑
194      {
195          
196      }
197      
198       protected   void  key_MainMenu( int  keyCode) // MENU状态退出
199      {
200           switch (key_state)
201          {
202           case  DC_KEY_SOFT_LEFT:
203                      threadRunAble  =   false ; // 关闭线程
204                      myMIDlet.quitApp(); // 关闭程序
205                       break ;
206          }
207      }
208  }
209 
210 

myMIDlet.java

  1  package  MyJava3;
  2  import  javax.microedition.midlet. * ;
  3 
  4  public   class  myMIDlet  extends  MIDlet
  5  {
  6       static  myMIDlet instance; // 生成一个静态的myMIDlet的实例
  7      GameCanvas displayable; // 创建一个myCanvas实例
  8      
  9       public  myMIDlet()
 10      {
 11          instance  =   this ;
 12      }
 13      
 14       public   void  startApp() // 启动(该方法必须存在)
 15      {
 16          displayable  =   new  GameCanvas( this );
 17      }
 18      
 19       public   void  pauseApp() // 暂停(该方法必须存在)
 20      {
 21          
 22      }
 23      
 24       public   void  destroyApp( boolean  unconditional) // 销毁(该方法必须存在)
 25      {
 26          
 27      }
 28 
 29       public   static   void  quitApp() // 退出,此方法为JBuilder自动为我们生成,但不是必须的,你可以自定义其名称和内容以完成退出功能
 30      {
 31          instance.destroyApp( true );
 32          instance.notifyDestroyed();
 33          instance  =   null ;
 34      }
 35  }

     






















































































你可能感兴趣的:(J2ME游戏开发)