📄 gamescreen.java
字号:
package Snowball;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import Creature.*;
public class GameScreen extends GameCanvas implements Runnable , CommandListener
{
private final static int Rate = 50; //屏幕刷新速率
private MIDlet GameMIDlet;
private Graphics g; //图形对象
private GameStatus gs; //游戏状态
private GameRender gr; //渲染游戏画面
private GameUpdate gu; //游戏世界更新
private GameImage gi; //游戏图片资源
private GameInput gn; //游戏输入处理
private ObjectManage om; //游戏对象管理器
//添加数据库
private Display display; //显示
private Form f; //表单(帮助、关于、输入)
private TextField tf; //文本框
//*======定义菜单命令======*//
private Command menuOk; //确认
//数据排行
protected ScoreData sd; //分数记录库
protected int finalScore;//最后得分
/** Creates a new instance of GameScreen */
public GameScreen(MIDlet GameMIDlet ,Display display)
{
super(false);
//设置成全屏模式
this.setFullScreenMode(true);
//初始化数据
this.GameMIDlet = GameMIDlet;
this.display = display;
g = this.getGraphics();
om = new ObjectManage();
gs = new GameStatus();
gi = new GameImage();
gu = new GameUpdate(gs, om ,gi);
gn = new GameInput(gs, this);
gr = new GameRender(g, this, gs, gi, om);
f = new Form(""); //实例化表单
tf=new TextField("请输入姓名", "", 20, TextField.ANY);
menuOk = new Command("确认", Command.OK, 1);
}
//开始运行游戏
public void Start()
{
Thread t = new Thread(this); //创建游戏线程
t.start();
}
//游戏处理循环
public void run()
{
long st = 0; //开始渲染时间
long et = 0; //结束渲染时间
while(gs.Continue)
{
st = System.currentTimeMillis();
gn.Process();
gu.Process();
gr.Process();
//游戏结束进入游戏排行榜
if(gs.gameState == 4){ //游戏排行
finalScore = gs.gp.Scores;
doScore();
}
//首页进入游戏排行榜
if(gs.gameState == 7){
sd = new ScoreData(finalScore); //new记录仓库
}
//显示排行榜
if(gs.drawState == gs.SHOW_SCORE){
sd.showCompet(g);
flushGraphics();
}
et = System.currentTimeMillis();
if((et - st) < Rate)
{
try
{
Thread.sleep(Rate - (et - st));
}
catch(Exception exp)
{
}
}
}
//结束游戏
GameMIDlet.notifyDestroyed();
}
//键盘按下
protected void keyPressed(int keycode)
{
switch(keycode)
{
case -7:
//INDEX or GAME
if(1 == gs.gameState || 2 == gs.gameState ){
gs.Continue = false;
gs.gMusic.stop();
}
//HELP or ABOUT
if( 5 == gs.gameState || 6 == gs.gameState || 4 == gs.gameState || 7 == gs.gameState ){
gs.gameState = 1;
}
break;
default:
break;
}
}
/**==============================**
** 记录仓库
**==============================**/
private void doScore(){
//gs.drawState = gs.SHOW_SCORE;
sd = new ScoreData(finalScore); //new记录仓库
boolean biger = sd.compareScore(); //对比
if( biger || sd.endId < 6 ){
inputName(); //输入名字
}else{
showScore(); //显示排名
}
}
/**==============================**
** 填写姓名
**==============================**/
protected void inputName(){ //Form
f.setCommandListener(this);
delForm(); //清除
f.addCommand(menuOk);
f.append(tf);
f.append("你的得分: "+finalScore+" 上榜了!");
display.setCurrent(f);
}
//======显示排名======
private void showScore(){ //Canvas
gs.drawState = gs.SHOW_SCORE;
display.setCurrent(this);
}
/**==============================**
** 清空Form
**==============================**/
private void delForm(){
for(int i=0;i<f.size();i++){
f.delete(i);
}
for(int i=0;i<f.size();i++){
f.delete(i);
}
}
/**==============================**
** 实现命令监听
**==============================**/
public void commandAction(Command c, Displayable s)
{
if (c == menuOk)
{
if( gs.gameState == 3 ){//游戏结束写入数据
sd.writeToDate(tf.getString()); //将记录写入仓库
showScore(); //显示排行榜
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -