===============================结果就只是需要修改下精灵内的帧图片 给按键设置了不超出 纠结了好几天...
package heyway;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.Random;
import java.io.*;
/**
* <p>Title: </p>
*
* <p>De scription: </p>
*
* <p>Copyright: Copyright (c) 2008</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class HeyWayCanvas extends GameCanvas implements Runnable{
private boolean sleeping;//确定动画是否开始,可以用来暂停一个动画
private long frameDelay;//控制循环的等待时间
private int inputDelay;//用来控制按键的灵敏度
private Image backgroundImage;//背景图像
private TiledLayer background;//公路背景
private byte[][] backgroundMap={{1,2,3,4,5,6,7,8,9,1,1,1,1},{1,2,3,4,5,6,7,8,9,1,1,1,1}};//地图数组
private Image HenHead;//母鸡脑袋图像,用来指示母鸡剩下性命的数量
private Sprite HenSprite;//一个母鸡精灵
private Sprite[] carSprite=new Sprite[4];//四个汽车精灵
private int[] carYSpeed=new int[4];//汽车速度
private boolean gameOver;//确定游戏是否结束
private int numLives;//保存剩下母鸡性命的数量
private int score;//保存游戏玩家的分数
public HeyWayCanvas() {
super(true);
frameDelay=33;//设定每帧的速率
inputDelay=0;//清除输入延迟
/** try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
} */
}
/** private void jbInit() throws Exception {
// add the Exit command
addCommand(new Command("Exit", Command.EXIT, 1));
}
protected void paint(Graphics g) {
/** @todo Add paint codes */
// }
public void start(){
//初始化主要游戏变量
gameOver=false;
numLives=3;
score=0;
//初始化图像母鸡和汽车精灵
try{
backgroundImage=Image.createImage("/res/Highway.png");
background=new TiledLayer(12,2,backgroundImage,20,177);
for(int i=0;i<2;i++)
{
for(int j=0;j<12;j++)
{
background.setCell(j,i,backgroundMap[i][j]);
}
}
HenHead=Image.createImage("/res/HenHead.png");
HenSprite=new Sprite(Image.createImage("/res/Hen.png"),22,22);
HenSprite.setPosition(2,77);
carSprite[0]=new Sprite(Image.createImage("/res/Car1.png"));
carSprite[0].setPosition(27,0);
carYSpeed[0]=3;
carSprite[1]=new Sprite(Image.createImage("/res/Car2.png"));
carSprite[1].setPosition(62,0);
carYSpeed[1]=1;
carSprite[2]=new Sprite(Image.createImage("/res/Car3.png"));
carSprite[2].setPosition(93,64);
carYSpeed[2]=-2;
carSprite[3]=new Sprite(Image.createImage("/res/Car4.png"));
carSprite[3].setPosition(128,64);
carYSpeed[3]=-5;
}
catch(IOException ex){
System.err.println("Failed loading images!");
}
//开始动画线程
sleeping=false;
Thread t=new Thread(this);
t.start();
}
public void stop()
{
//停止动画
sleeping=true;
}
public void update(){
//检查游戏是否重新开始
if(gameOver)
{
int keyState=getKeyStates();
if((keyState&FIRE_PRESSED)!=0){
//开始新游戏
HenSprite.setPosition(2,77);
gameOver=false;
score=0;
numLives=3;
}
//当游戏结束时,不必做任何更新
return;
}
if(++inputDelay>2)
{
int keyState=getKeyStates();
if((keyState&LEFT_PRESSED)!=0){
HenSprite.move(-6,0);
HenSprite.nextFrame();
if(HenSprite.getX()<0){
HenSprite.setPosition(0,HenSprite.getY());
}
}
else if((keyState&RIGHT_PRESSED)!=0){
HenSprite.move(6,0);
HenSprite.nextFrame();
if(HenSprite.getX()>getWidth()){
HenSprite.setPosition(getWidth(),HenSprite.getY());
}
}
else if((keyState&UP_PRESSED)!=0){
HenSprite.move(0,-6);
HenSprite.nextFrame();
if(HenSprite.getY()<0){
HenSprite.setPosition(HenSprite.getX(),0);
}
}
else if((keyState&DOWN_PRESSED)!=0){
HenSprite.move(0,6);
HenSprite.nextFrame();
if(HenSprite.getY()>getHeight()-24){
HenSprite.setPosition(HenSprite.getX(),getHeight()-24);
}
}
//重新设置输入延时
inputDelay=0;
}
//判断母鸡是否通过
if(HenSprite.getX()>154)
{
//重新设置母鸡位置并增加分数
HenSprite.setPosition(2,77);
score+=25;
}
//重设汽车精灵
for(int i=0;i<4;i++){
//移动汽车精灵
carSprite[i].move(0,carYSpeed[i]);
checkBounds(carSprite[i]);
//检查母鸡和汽车之间的冲突
if(HenSprite.collidesWith(carSprite[i],true)){
//母鸡被汽车撞到时,。。。
//检查游戏是否结束
if(--numLives==0){
gameOver=true;
}
else
{
//重置母鸡的位置
HenSprite.setPosition(2,77);
}
//不必继续更新汽车精灵
break;
}
}
}
private void draw(Graphics g)
{
//绘制公路背景
background.paint(g);
//绘制剩下的母鸡的性命数量
for(int i=0;i<numLives;i++)
g.drawImage(HenHead,180-((i+1)*8),getHeight()-12,Graphics.TOP|Graphics.LEFT);
//绘制母鸡精灵
HenSprite.paint(g);
//绘制汽车精灵
for(int i=0;i<4;i++){
carSprite[i].paint(g);
}
if(score>0){
g.setColor(255,255,255);
//g.drawString("分数:"+score,getWidth()-40,0,Graphics.TOP|Graphics.LEFT);
}
if(gameOver){
//如果游戏结束则结束绘制消息和得分
g.setColor(255,255,255);
g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE));
g.drawString("游戏结束",90,40,Graphics.TOP|Graphics.HCENTER);
g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE));
g.drawString("你的分数为:"+score,90,70,Graphics.TOP|Graphics.LEFT);
}
//将图像显示到屏幕上
flushGraphics();
}
public void checkBounds(Sprite sprite){
if(sprite.getY()<0) sprite.setPosition(sprite.getX(),getHeight());
if(sprite.getY()>getHeight()) sprite.setPosition(sprite.getX(),0);
}
public void run(){
Graphics g=getGraphics();
//主游戏循环
while(!sleeping){
update();
draw(g);
try{
Thread.sleep(frameDelay);
}
catch(InterruptedException ie){
}
}
}
}
----------------------------------
package heyway;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.Random;
import java.io.*;
/**
* <p>Title: </p>
*
* <p>De scription: </p>
*
* <p>Copyright: Copyright (c) 2008</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class HeyWayCanvas extends GameCanvas implements Runnable{
private boolean sleeping;//确定动画是否开始,可以用来暂停一个动画
private long frameDelay;//控制循环的等待时间
private int inputDelay;//用来控制按键的灵敏度
private Image backgroundImage;//背景图像
private TiledLayer background;//公路背景
private byte[][] backgroundMap={{1,2,3,4,5,6,7,8,9,1,1,1,1},{1,2,3,4,5,6,7,8,9,1,1,1,1}};//地图数组
private Image HenHead;//母鸡脑袋图像,用来指示母鸡剩下性命的数量
private Sprite HenSprite;//一个母鸡精灵
private Sprite[] carSprite=new Sprite[4];//四个汽车精灵
private int[] carYSpeed=new int[4];//汽车速度
private boolean gameOver;//确定游戏是否结束
private int numLives;//保存剩下母鸡性命的数量
private int score;//保存游戏玩家的分数
public HeyWayCanvas() {
super(true);
frameDelay=33;//设定每帧的速率
inputDelay=0;//清除输入延迟
/** try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
} */
}
/** private void jbInit() throws Exception {
// add the Exit command
addCommand(new Command("Exit", Command.EXIT, 1));
}
protected void paint(Graphics g) {
/** @todo Add paint codes */
// }
public void start(){
//初始化主要游戏变量
gameOver=false;
numLives=3;
score=0;
//初始化图像母鸡和汽车精灵
try{
backgroundImage=Image.createImage("/res/Highway.png");
background=new TiledLayer(12,2,backgroundImage,20,177);
for(int i=0;i<2;i++)
{
for(int j=0;j<12;j++)
{
background.setCell(j,i,backgroundMap[i][j]);
}
}
HenHead=Image.createImage("/res/HenHead.png");
HenSprite=new Sprite(Image.createImage("/res/Hen.png"),22,22);
HenSprite.setPosition(2,77);
carSprite[0]=new Sprite(Image.createImage("/res/Car1.png"));
carSprite[0].setPosition(27,0);
carYSpeed[0]=3;
carSprite[1]=new Sprite(Image.createImage("/res/Car2.png"));
carSprite[1].setPosition(62,0);
carYSpeed[1]=1;
carSprite[2]=new Sprite(Image.createImage("/res/Car3.png"));
carSprite[2].setPosition(93,64);
carYSpeed[2]=-2;
carSprite[3]=new Sprite(Image.createImage("/res/Car4.png"));
carSprite[3].setPosition(128,64);
carYSpeed[3]=-5;
}
catch(IOException ex){
System.err.println("Failed loading images!");
}
//开始动画线程
sleeping=false;
Thread t=new Thread(this);
t.start();
}
public void stop()
{
//停止动画
sleeping=true;
}
public void update(){
//检查游戏是否重新开始
if(gameOver)
{
int keyState=getKeyStates();
if((keyState&FIRE_PRESSED)!=0){
//开始新游戏
HenSprite.setPosition(2,77);
gameOver=false;
score=0;
numLives=3;
}
//当游戏结束时,不必做任何更新
return;
}
if(++inputDelay>2)
{
int keyState=getKeyStates();
if((keyState&LEFT_PRESSED)!=0){
HenSprite.move(-6,0);
HenSprite.nextFrame();
if(HenSprite.getX()<0){
HenSprite.setPosition(0,HenSprite.getY());
}
}
else if((keyState&RIGHT_PRESSED)!=0){
HenSprite.move(6,0);
HenSprite.nextFrame();
if(HenSprite.getX()>getWidth()){
HenSprite.setPosition(getWidth(),HenSprite.getY());
}
}
else if((keyState&UP_PRESSED)!=0){
HenSprite.move(0,-6);
HenSprite.nextFrame();
if(HenSprite.getY()<0){
HenSprite.setPosition(HenSprite.getX(),0);
}
}
else if((keyState&DOWN_PRESSED)!=0){
HenSprite.move(0,6);
HenSprite.nextFrame();
if(HenSprite.getY()>getHeight()-24){
HenSprite.setPosition(HenSprite.getX(),getHeight()-24);
}
}
//重新设置输入延时
inputDelay=0;
}
//判断母鸡是否通过
if(HenSprite.getX()>154)
{
//重新设置母鸡位置并增加分数
HenSprite.setPosition(2,77);
score+=25;
}
//重设汽车精灵
for(int i=0;i<4;i++){
//移动汽车精灵
carSprite[i].move(0,carYSpeed[i]);
checkBounds(carSprite[i]);
//检查母鸡和汽车之间的冲突
if(HenSprite.collidesWith(carSprite[i],true)){
//母鸡被汽车撞到时,。。。
//检查游戏是否结束
if(--numLives==0){
gameOver=true;
}
else
{
//重置母鸡的位置
HenSprite.setPosition(2,77);
}
//不必继续更新汽车精灵
break;
}
}
}
private void draw(Graphics g)
{
//绘制公路背景
background.paint(g);
//绘制剩下的母鸡的性命数量
for(int i=0;i<numLives;i++)
g.drawImage(HenHead,180-((i+1)*8),getHeight()-12,Graphics.TOP|Graphics.LEFT);
//绘制母鸡精灵
HenSprite.paint(g);
//绘制汽车精灵
for(int i=0;i<4;i++){
carSprite[i].paint(g);
}
if(score>0){
g.setColor(255,255,255);
//g.drawString("分数:"+score,getWidth()-40,0,Graphics.TOP|Graphics.LEFT);
}
if(gameOver){
//如果游戏结束则结束绘制消息和得分
g.setColor(255,255,255);
g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE));
g.drawString("游戏结束",90,40,Graphics.TOP|Graphics.HCENTER);
g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE));
g.drawString("你的分数为:"+score,90,70,Graphics.TOP|Graphics.LEFT);
}
//将图像显示到屏幕上
flushGraphics();
}
public void checkBounds(Sprite sprite){
if(sprite.getY()<0) sprite.setPosition(sprite.getX(),getHeight());
if(sprite.getY()>getHeight()) sprite.setPosition(sprite.getX(),0);
}
public void run(){
Graphics g=getGraphics();
//主游戏循环
while(!sleeping){
update();
draw(g);
try{
Thread.sleep(frameDelay);
}
catch(InterruptedException ie){
}
}
}
}
----------------------------------