📄 maincanvas.java
字号:
/***************************************************
* 程序文件名称: MainCanvas.java
* 功能:主游戏程序
***************************************************/
import java.io.*;
import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
public class MainCanvas extends GameCanvas implements Runnable
{
private Thread t;
private boolean sleeping;
private int begin;
private int frameDeleay;
private Image bkp, hammerImage, startImg, mouseImage, gameOverImg;
private HammerSprite hammerSprite;
private MouseSprite mouseSprite;
private int level;
private long Score;
private Player musicPlayer, musicPlayer1;
//构造函数,进行一些初始化的设置
public MainCanvas()
{
super(true);
//
frameDeleay = 33;
//
begin = 0;
//得分回零
Score = 0;
try
{
//游戏背景图像
bkp = Image.createImage("/bk.png");
//游戏开始封面
startImg = Image.createImage("/start.png");
//锤子系列图像,构造锤子精灵
hammerImage = Image.createImage("/chuizi.png");
//地鼠锤子系列图像,构造地鼠精灵
mouseImage = Image.createImage("/shu.png");
//地鼠贴片的宽和高
mouseSprite = new MouseSprite( mouseImage, 40, 30 );
//锤子贴片的宽和高
hammerSprite = new HammerSprite( hammerImage, 40, 30 );
//游戏结束画面
gameOverImg = Image.createImage("/gameover.png");
}
catch(IOException e)
{ }
try {
//定义声音文件的输入流
InputStream is = this.getClass().getResourceAsStream("Music.mid");
//建立midi文件媒体播放器
musicPlayer = Manager.createPlayer(is, "audio/midi");
//让播放器对声音流进行预提取
musicPlayer.prefetch();
//设置声音的播放次数(无限循环)
musicPlayer.setLoopCount(-1);
//启动播放器
musicPlayer.start();
}
catch (IOException ioe)
{}
catch (MediaException me)
{}
}
//精灵碰撞检测
private void checkSpritEvent()
{
if(hammerSprite.collidesWith(mouseSprite, true))
{
mouseSprite.checkBeat();
//加分
Score+=100;
}
}
//手机按键对应锤子精灵的坐标位置:
private void update()
{
//获取手机按键的键值
int keySelect = this.getKeyStates();
switch (keySelect)
{
case LEFT_PRESSED:
//移动锤子精灵到指定的坐标位置
hammerSprite.moveTo(42, 93);
//检测精灵碰撞
checkSpritEvent();
break;
case RIGHT_PRESSED:
//移动锤子精灵到指定的坐标位置
hammerSprite.moveTo(180, 92);
//检测精灵碰撞
checkSpritEvent();
break;
case FIRE_PRESSED:
//移动锤子精灵到指定的坐标位置
hammerSprite.moveTo(110, 95);
//检测精灵碰撞
checkSpritEvent();
break;
case UP_PRESSED:
//移动锤子精灵到指定的坐标位置
hammerSprite.moveTo(120, 73);
//检测精灵碰撞
checkSpritEvent();
break;
case DOWN_PRESSED:
//移动锤子精灵到指定的坐标位置
hammerSprite.moveTo(100, 134);
//检测精灵碰撞
checkSpritEvent();
break;
}
}
//显示游戏封面
private void drawStart(Graphics g )
{
g.setColor( 0, 0, 0 );
g.fillRect( 0, 0, getWidth(), getHeight() );
g.setColor( 255, 255, 255 );
g.drawImage( startImg, 0, 0, g.TOP|g.LEFT );
//刷新画面
flushGraphics();
}
//显示游戏画面
private void draw( Graphics g )
{
g.setColor( 0, 0, 0 );
g.fillRect( 0, 0, getWidth(), getHeight() );
g.setColor( 255, 255, 255 );
//显示背景图像
g.drawImage( bkp, 0, 0, g.TOP|g.LEFT );
//加载地鼠精灵
mouseSprite.paint(g);
//加载锤子精灵
hammerSprite.paint(g);
g.setColor( 0, 0, 0 );
//记录得分
g.drawString( ""+Score, 70, 194, g.TOP|g.LEFT);
//记录关卡
g.drawString( ""+mouseSprite.getLevel(), 220,194, g.TOP|g.LEFT);
//刷新画面
flushGraphics();
}
//过关,显示得分和过关数
private void drawLevel(Graphics g)
{
g.setColor( 0, 0, 0 );
g.fillRect( 0, 0, getWidth(), getHeight() );
g.setColor( 255, 255, 255 );
g.setColor( 255, 255, 255 );
//在93行27列显示得分情况
g.drawString( ""+Score, 27, 93, g.TOP|g.LEFT);
//在93行106列显示过关数
g.drawString( ""+mouseSprite.getLevel(), 106, 93, g.TOP|g.LEFT);
//在59行30列显示
g.drawString( "Level:"+mouseSprite.getLevel()+" Start", 30, 59, g.TOP|g.LEFT);
//刷新画面
flushGraphics();
}
//结束游戏画面
private void drawGameOver( Graphics g )
{
g.setColor( 0, 0, 0 );
g.fillRect( 0, 0, getWidth(), getHeight() );
//显示游戏结束画面
g.drawImage(gameOverImg, 0, 0, g.TOP|g.LEFT);
//刷新画面
flushGraphics();
}
//启动线程
public void start()
{
sleeping = false;
t = new Thread(this);
t.start();
}
//运行线程
public void run()
{
Graphics g = this.getGraphics();
while( !sleeping )
{
//游戏结束
if( mouseSprite.isGameOver() )
{
begin = -1;
}
//游戏进行中
if( begin == 1 )
{
//锤子精灵移动到指定的坐标位置
update();
//显示画面
draw(g);
try //暂停
{ Thread.sleep(frameDeleay); }
catch (InterruptedException ie)
{ }
//如果是进入新关
if( mouseSprite.isNewLevel() )
{
//显示新的关数
drawLevel(g);
mouseSprite.setNewLevel(false);
mouseSprite.initBeatMouse();
try
{
Thread.sleep(5000);
}
catch (InterruptedException ie)
{ }
}
}
//游戏开始
else if( begin == 0 )
{
drawStart(g);
try
{
Thread.sleep(frameDeleay);
}
catch (InterruptedException ie)
{ }
}
//游戏结束
else if( begin == -1 )
{
drawGameOver( g );
mouseSprite.stop();
try
{ musicPlayer.stop(); }
catch(Exception e)
{ }
try
{
Thread.sleep(500);
}
catch (InterruptedException ie)
{ }
}
}
}
//停止音乐
public void stop()
{
sleeping = true;
musicPlayer.close();
}
//设置开始状态标志
public void beginning( int b )
{
begin = b;
}
//设置开始状态
public int ifBegin()
{
return begin;
}
//游戏开始
public void gameStart()
{
//开始过关数第1关
beginning(1);
//得分归零
Score = 0;
//初始化地鼠精灵的一些状态设置
mouseSprite.initGame();
//加载地鼠精灵
mouseSprite.start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -