请各位大虾帮忙该一个程序
使用低级UI知识,设计一个小程序,实现一个小球在屏幕上运动的效果,要求如下:? 初始状态下小球就处于运动状态,
? 当按下上下左右键时小球会向着对应的方向运动,
? 当小球撞到屏幕边框的时候停止运动。
我写的代码如下:
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
public class Gamecanvas extends GameCanvas implements Runnable {
private boolean isPlay; //isPlay为真时游戏线程开始运行
private long delay; //线程保持的时间
private int currentX,currentY; //当前的坐标
private int width; //屏幕宽度
private int height; //屏幕高度
public Gamecanvas() {
// TODO 自动生成构造函数存根
super(true); //抑制键盘
width = getWidth(); //获取屏幕宽度
height = getHeight(); //获取屏幕高度
currentX = width / 2; //设置球的当前位置X
currentY = height / 2; //设置球的当前位置Y
delay = 20;
}
public void start()
{
isPlay = true;
Thread t = new Thread(this); //创建一个线程实例
t.start(); //启动线程
}
public void stop()
{
isPlay = false;
}
public void run() //游戏循环
{
Graphics g = getGraphics(); //获取对象
while (isPlay == true)
{
input(); //键盘输入
draw(g); //绘制画布
try{
Thread.sleep(delay);
}
catch(InterruptedException ie){}
}
}
private void input()
{
int keyStates = getKeyStates(); //获取键盘状态
if((keyStates & LEFT_PRESSED)!=0) //按下左键
currentX = Math.max(10, currentX-1);
if((keyStates & RIGHT_PRESSED)!=0) //按下右键
if(currentX + 5 < width)
currentX = Math.min(width-10, currentX + 1);
if((keyStates & UP_PRESSED)!=0) //按下上键
currentY = Math.max(10, currentY-1);
if((keyStates & DOWN_PRESSED)!=0) //按下下键
if(currentY + 10 < height)
currentY = Math.min(height-10, currentY + 1);
}
private void draw(Graphics g)
{
g.setColor(0xffffff); //设置颜色为白色
g.fillRect(0, 0, width, height); //填充整个屏幕
g.setColor(0xff00ff); //颜色设置为紫色
g.fillArc(currentX-10, currentY -10, 20, 20, 0, 360); //绘制小球
flushGraphics();
}
}
import javax.microedition.
import javax.microedition.
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class GameCanvasMIDlet extends MIDlet implements CommandListener {
private Gamecanvas gameCanvas; //声明游戏画布对象
private Command exitCmd = new Command("Exit",Command.SCREEN,1); //退出
public GameCanvasMIDlet() {
// TODO 自动生成构造函数存根
gameCanvas = new Gamecanvas(); //创建游戏画布对象
gameCanvas.addCommand(exitCmd); //添加退出键
gameCanvas.setCommandListener(this); //监听事件
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO 自动生成方法存根
}
protected void pauseApp() {
// TODO 自动生成方法存根
}
protected void startApp() throws MIDletStateChangeException {
gameCanvas.start(); //启动游戏线程
Display.getDisplay(this).setCurrent(gameCanvas); //显示画布
// TODO 自动生成方法存根
}
public void commandAction(Command cmd, Displayable disp) {
// TODO 自动生成方法存根
if(cmd == exitCmd) //退出的判断
{
System.gc();
try {
destroyApp(false);
} catch (MIDletStateChangeException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
notifyDestroyed();
}
}
}
偶写的代码只是可以通过方向键来控制球的运动方向而已
不能实现刚运行时小球就开始运动,也不能实现碰到屏幕边框
时暂停运动,麻烦各位大虾帮忙改一下好吗???
千里冰封哥哥,帮忙改一下好吗??
要你帮偶写一个也可以,谢谢哈~~~~~~~~~~~~~~~``
谢谢各位哈```````