/*
*DSGameApplication.java用于游戏的总实现
* 基于MVC技术
* 釆用了模型 显示 控制分开
*/
import javax.microedition.lcdui.*;
import java.util.*;
/**
* 游戏的描绘与操作所用的类
*
*
*/
class DSGameApplication extends Canvas implements Runnable, CommandListener
{
//主类用于关闭
DSMain ds_Main ;
/** Start指令变量 */
private Command ds_StartCmd = new Command("开始游戏", Command.SCREEN, 5);
/** Exit指令变量 */
private Command ds_ExitCmd = new Command("退出游戏", Command.SCREEN, 1);
/** Pause指令变量 */
private Command ds_PauseCmd = new Command("停止游戏", Command.SCREEN, 5);
/** Resume指令变量 */
private Command ds_ResumeCmd = new Command("返回游戏", Command.SCREEN, 5);
//用于help显示帮助
private Command ds_HelpCmd = new Command("显示帮助",Command.SCREEN,5);
//显示版权信息
private Command ds_AboutCmd = new Command("关于游戏",Command.SCREEN,5);
//用于保存屏幕的宽度
private int ds_ScreenWidth;
//用于保存屏幕的产高度
private int ds_ScreenHeight;
//显示当前分数
private int ds_Score = 0 ;
// 储存默认字体的变量
private Font ds_Font = Font.getDefaultFont();
//以下是一些常量用于游戏的运行状态的标识
//用于游戏的状态标识
private int ds_GameState ;
private DSPlayer ds_Player = new DSPlayer() ;
private DSEnemy ds_Enemy = new DSEnemy() ;
private DSPlayerBullet ds_PBullet = new DSPlayerBullet() ;
private DSEnemyBullet ds_EBullet = new DSEnemyBullet() ;
//为游戏的开始
private static final short DSGAMESTART = 1 ;
//用于游戏的暂停
private static final short DSGAMEPAUSE = 2 ;
//用于游戏的恢复
private static final short DSGAMERESUME = 3 ;
//用于游戏的退出
private static final short DSGAMEEXIT = 4 ;
//用于游戏的帮助
private static final short DSGAMEHELP = 5 ;
//关于开发者与游戏本身
private static final short DSGAMEABOUT = 6 ;
//用于实现屏幕的动作
//实现卷屏处理
Image ds_BKImage1 ;
Image ds_BKImage2 ;
int ds_BKY;
//用于构造函数
DSGameApplication(DSMain Main )
{
this.ds_Main = Main ;
ds_ScreenWidth = getWidth();
ds_ScreenHeight = getHeight();
//将命令加入主菜单
addCommand( ds_StartCmd );
addCommand( ds_PauseCmd );
addCommand( ds_HelpCmd );
addCommand( ds_AboutCmd );
addCommand( ds_ExitCmd );
try{
ds_BKImage1 = Image.createImage("/sky.PNG");
ds_BKImage2 = Image.createImage("/sky.PNG");
}catch(Exception e)
{}
setCommandListener(this);
}
/** 指定的事件发生时被调用出来的方法 */
public void commandAction(Command c, Displayable s) {
//当选取了开始游戏
if(c == ds_StartCmd )
{
DS_GameInit();
new Thread(this).start();
repaint();
}
//当选取了帮助页面
else if( c == ds_HelpCmd )
DS_GameHelp();
//当按下中止
else if( c == ds_PauseCmd)
DS_GamePause();
//当按下回复
else if(c == ds_ResumeCmd )
DS_GameResume();
//当按下关于作者
else if(c == ds_AboutCmd )
DS_GameAbout();
//当按下退出
else if(c== ds_ExitCmd )
DS_ExitCmd();
}
//------------------------------------
//用于游戏的初始化工作
//
//
//------------------------------------
public void DS_GameInit()
{
ds_GameState = DSGAMESTART;
ds_Player.DS_SetX( ds_ScreenWidth /2 );
ds_Player.DS_SetY( ds_ScreenHeight - ds_Player.DS_GetHeight() - 23 );
ds_Enemy.DS_SetX(30);
ds_Enemy.DS_SetY(50);
}
//------------------------------------
//显示游戏的帮助页面
//
//
//------------------------------------
public void DS_GameHelp()
{
ds_GameState = DSGAMEHELP;
repaint();
}
//------------------------------------
//暂停游戏
//
//
//------------------------------------
public void DS_GamePause()
{
ds_GameState = DSGAMEPAUSE;
repaint();
}
//------------------------------------
//从暂停中恢复过来
//
//
//------------------------------------
public void DS_GameResume()
{
ds_GameState = DSGAMERESUME;
repaint();
}
//------------------------------------
//关于开发者
//
//
//------------------------------------
public void DS_GameAbout()
{
ds_GameState = DSGAMEABOUT;
repaint();
}
//------------------------------------
//退出游戏
//
//
//------------------------------------
public void DS_ExitCmd()
{
ds_GameState = DSGAMEEXIT;
repaint();
ds_Main.DS_Exit();
}
//------------------------------------
//用于游戏的系统调度
//
//
//------------------------------------
public void run()
{
if( ds_GameState == DSGAMESTART )
while(true)
{
//此处为背景的卷动
ds_BKY += 5 ;
if(ds_BKY >= ds_ScreenHeight )
ds_BKY = 0 ;
int x = ds_Enemy.DS_GetX() + ds_Enemy.DS_GetWidth()/2 ;
if( x > ds_ScreenWidth -ds_Enemy.DS_GetWidth()/2 )
x = 0 ;
ds_Enemy.DS_SetX(x);
if( ds_PBullet.DS_GetActive() )
{
int y = ds_PBullet.DS_GetY();
if(y == 0)
ds_PBullet.DS_SetActive( false );
else
ds_PBullet.DS_FrameMove();
DS_CheckCollsion( ds_Enemy,ds_PBullet ) ;
}
try{
Thread.sleep(80);
}catch(Exception e)
{}
repaint();
}
}
//------------------------------------------
//算法为:
//
//
//
public boolean DS_CheckCollsion( DSEnemy ds_Enemy,DSPlayerBullet ds_PBullet )
{
/* if( ds_Enemy.DS_GetX() == ds_PBullet.DS_GetX() )
{
if(ds_Enemy.DS_GetY()-ds_Enemy.DS_GetWidth()-ds_PBullet.DS_GetY() >= 0 )
{
ds_Enemy.DS_SetActive(false);
ds_PBullet.DS_SetActive(false);
ds_Score += 100 ;
return true ;
}
}*/
int x1,x2,y1,y2;
x1 = ds_Enemy.DS_GetX() + ds_Enemy.DS_GetWidth()/2 ;
x2 = ds_PBullet.DS_GetX() + ds_PBullet.DS_GetWidth()/2 ;
y1 = ds_Enemy.DS_GetY() + ds_Enemy.DS_GetHeight()/2;
y2= ds_PBullet.DS_GetY() + ds_PBullet.DS_GetHeight()/2 ;
int x3 = ds_Enemy.DS_GetWidth()/2+ds_PBullet.DS_GetWidth()/2 ;
int y3 = ds_Enemy.DS_GetHeight()/2+ds_PBullet.DS_GetHeight()/2 ;
if( ( x1-x2 <= x3 ) && ( x2-x1 <= x3 ) )
if( ( y1 -y2 <= y3 ) && ( y2-y1 <= y3 ) )
{
ds_Enemy.DS_SetActive(false);
ds_PBullet.DS_SetActive(false);
ds_Score += 100 ;
return true ;
}
return false ;
}
//
//用于发射子弹
//
//
public void DS_Fire()
{
int x = ds_Player.DS_GetX() + ds_Player.DS_GetWidth()/2 ;
int y = ds_Player.DS_GetY() + ds_Player.DS_GetHeight() ;
ds_PBullet.DS_SetActive( true );
ds_PBullet.DS_SetX(x);
ds_PBullet.DS_SetY(y);
}
//------------------------------------
//
// 按键按下事件发生时被调用出来的方法
//
//------------------------------------
protected synchronized void keyPressed(int keyCode)
{
if( ds_GameState != DSGAMESTART )
{
//非游戏中,或在游戏中暂停时为return
return;
}
//为清除按键时不处理
if(keyCode == 0) return; //for KDDI
int ds_GameCode = getGameAction(keyCode);
switch(ds_GameCode) {
case LEFT: //按下向左按键时
int X = ds_Player.DS_GetX() - ds_Player.DS_GetWidth()/2 ;
if( X<=0 )
X = 0;
ds_Player.DS_SetX(X);
repaint();
break;
case RIGHT: //按下向右按键时
int x = ds_Player.DS_GetX()+ds_Player.DS_GetWidth()/2 ;
if( x >= ds_ScreenWidth - ds_Player.DS_GetWidth()/2 )
x = ds_ScreenWidth - ds_Player.DS_GetWidth()/2 ;
ds_Player.DS_SetX(x);
repaint();
break;
case FIRE: //按下Fire按键时
case UP: //按下向上按键时
DS_Fire(
评论0