package aibullet;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.IOException;
public class MyCanvas extends GameCanvas implements Runnable ,CommandListener
{
boolean running;
boolean isHit;
int win_width=getWidth();
int win_height=getHeight();
//飞机的一些属性
Image plane_img;
Plane plane_sp;
int img_plane_size=24;
//爆炸的动画
Image bomb_img;
Sprite bomb_sp;
int img_bomb_size=65;
//子弹的属性
Image bullet_img;
int bullet_size=6;
AI_Bullet b;
//背景
Image cloud_img;
Image back_img;
//引用MID类的一些方法
MyMIDlet fMIDlet;
Graphics g;
public MyCanvas(MyMIDlet fMIDlet)
{
super(true);
this.fMIDlet=fMIDlet;
g=getGraphics();
Command cmdExit=new Command("退出",Command.EXIT,0);
addCommand(cmdExit);
setCommandListener(this);
try
{
plane_img=Image.createImage("/plane.png");
bomb_img=Image.createImage("/bomb.png");
cloud_img=Image.createImage("/cloud.png");
back_img=Image.createImage("/cloudbackground.png");
bullet_img=Image.createImage("/bullet.png");
}
catch(IOException e)
{
System.out.print(e.getMessage());
}
//爆炸
bomb_sp=new Sprite(bomb_img,img_bomb_size,img_bomb_size);
bomb_sp.setFrame(0) ;
//生成子弹对象
b=new AI_Bullet(bullet_img,bullet_size,bullet_size) ;
// b.setPosition(50,50);
// b.setFrame(0);
//生成飞机对象
plane_sp = new Plane(plane_img, img_plane_size, img_plane_size);
plane_sp.setFrame(0);
//飞机初始位置
int x = (win_width - img_plane_size) / 2;
int y = (win_height - img_plane_size) / 2;
plane_sp.setPosition(x, y);
b.setBulletPos(10,10);
start();
}
public void start()
{
running=true;
Thread t=new Thread(this);
t.start();
}
public void commandAction(Command command, Displayable displayable)
{
if(command.getCommandType()==Command.EXIT )
fMIDlet.quitApp();
}
public void run()
{
long st=0,et=0,diff=0;
int rate=50;//刷新频率
while(running)
{
st=System.currentTimeMillis();
GameKeyInput();
render();
et=System.currentTimeMillis();
diff=st-et;
if(diff<rate)
{
try
{
Thread.sleep(rate-diff);
}
catch(InterruptedException ex)
{
stop();
}
}
}
}
public void GameKeyInput()
{
plane_sp.setFrame(0);
int KeyState=getKeyStates();
if((KeyState & UP_PRESSED)!=0)
{
if(plane_sp.getY()-3<0)
plane_sp.move(0,-plane_sp.getY());
else
plane_sp.move(0,-5);
plane_sp.setFrame(0);
}
if((KeyState & DOWN_PRESSED)!=0)
{
if(plane_sp.getY()+3+plane_sp.getHeight() >win_height)
plane_sp.move(0,win_height-plane_sp.getY()-plane_sp.getHeight());
else
plane_sp.move(0,5);
plane_sp.setFrame(0);
}
if((KeyState & LEFT_PRESSED )!=0)
{
if(plane_sp.getX()-3<0)
plane_sp.move(-plane_sp.getX(),0);
else
plane_sp.move(-5,0);
plane_sp.setFrame(1);
}
if((KeyState & RIGHT_PRESSED)!=0)
{
if(plane_sp.getX()+img_plane_size+3>win_width)
plane_sp.move(win_width-plane_sp.getX()-img_plane_size,0);
else
plane_sp.move(5,0);
plane_sp.setFrame(2);
}
if((KeyState&FIRE_PRESSED)!=0)
{
b.setBulletAlive(true);
}
}
private void render()
{
g.setColor(0xffffff);
g.fillRect(0,0,win_width,win_height);
g.drawImage(back_img,0,0,0);
g.drawImage(cloud_img,20,20,0);
g.drawImage(cloud_img,90,50,0);
// g.drawImage(cloud_img,30,120,0);
// g.drawImage(cloud_img,120,110,0);
isHit=b.collidesWith(plane_sp,true);
if(isHit)
{
bomb_sp.setPosition(plane_sp.getX()-(img_bomb_size-img_plane_size)/2,plane_sp.getY()-(img_bomb_size-img_plane_size)/2);
bomb_sp.nextFrame();
bomb_sp.paint(g);
}
else
{
b.AutoSearchTrg(plane_sp);
b.paint(g);
plane_sp.paint(g);
}
flushGraphics();
}
public void stop()
{
running=false;
}
}
飞机游戏源代码简单AI
需积分: 32 167 浏览量
2009-06-12
14:54:53
上传
评论 1
收藏 132KB RAR 举报
lianpin
- 粉丝: 0
- 资源: 2
最新资源
- ocr模型ch-ppocr-mobile-v2.0-cls-infer
- 计算两个地点之间的最短路线距离.php
- JavaWeb-学习笔记
- 一键安装docker环境:docker、docker-compose
- 使Unity开发的游戏支持热更新的解决方案
- 信息办公简易java开源订销管理系统-javainfo.zip
- 新闻文章NTsky新闻发布(提供JavaBean)v1.0-ntskynewsv1.0javabean.zip
- 搜索链接java(结合lucene)版的公交搜索系统-javaso.zip
- 毕业设计-基于Hadoop+Spark的大数据金融信贷风险控系统源码.zip
- 其他类别MeyboMail Web(Java)开源简化-meybomailweb.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈