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 }
posted on 2011-11-25 20:39
zhangwei 阅读(243)
评论(0) 编辑 收藏 所属分类:
J2ME