(2010年11月26)javaMe实现的智能小球碰墙游戏

package com.ball;

public class Ball 
{
   private int width=0;//画板的宽度
   private int hight=0;//画板的高度
   
   private int add_x=0;//自增变量x
   private int add_y=0;//自增变量y
   
   private  int x=0;// x轴坐标
   private  int y=0;//y轴坐标
   
   private boolean X_add=true;//判断小球在那个方向的增减变量
   private boolean Y_add=false;
   
   public Ball(int width,int hight)
   {
  this.width=width;
  this.hight=hight;
  
  add_x=base.add;
  add_y=base.add;  
  
  x=width/2;//定义开始小球的坐标位置
  y=hight-base.R;   
  
  
   }
   public int getX()//获得小球的坐标
   {
  if(x+base.R<width&&X_add)
  {
     if((x+add_x+base.R)<width)
        return x+=add_x;
    else 
    {
    X_add=false;
   return x=width-base.R;    
    }
  }
  else 
  {
  if(x-add_x>0)
   return x-=add_x;
  else 
  {
  X_add=true;
  return x=0;
  }   
  }
   }
   public int getY()
   {
  if(Y_add)
  {
  if(y+add_y+base.R<=hight)  
  return y+=add_y;
  else  
  return y=hight-base.R;   
  }
  else
  {
  if(y-add_y>0)
  return y-=add_y;
  else
  {
  Y_add=true;
  return y=0;
  
  }
  }  
   }
  public void setBallBack()
  {
 Y_add=false;
  }
   public int getCurrent_Y()
   {
  return y;
   }
   public int getCurrent_X()
   {
  return x;
   }
   public boolean get_X_Direction()
   {
  return this.X_add;
   }
   public boolean get_Y_Direction()
   {
  return this.Y_add;
   }
}


package com.ball;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class Ball_Main extends MIDlet  implements CommandListener
{
   private Display display=null;
   private BallCanvas canvas=null;
   
   private Command exit=null;
   private Command Start_Wisdom=null;
   private Command End_Wisdom=null;
   
   
public Ball_Main(){
display=Display.getDisplay(this);
canvas=new BallCanvas();
exit=new Command("退出",Command.EXIT,1);
Start_Wisdom=new Command("启动智能",Command.SCREEN,1);
End_Wisdom=new Command("结束智能",Command.SCREEN,2);
canvas.addCommand(exit);
canvas.addCommand(Start_Wisdom);
canvas.setCommandListener(this);
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}

protected void pauseApp() {
}

protected void startApp() throws MIDletStateChangeException {
display.setCurrent(canvas);
}

public void commandAction(Command arg0, Displayable arg1) {
if(arg0==exit)
{
try 
{
destroyApp(true);
catch (MIDletStateChangeException e) {
e.printStackTrace();
}
notifyDestroyed();
}
else if(arg0==Start_Wisdom)
{
canvas.startSmort(true);
canvas.removeCommand(Start_Wisdom);
canvas.addCommand(End_Wisdom);
}
else
{
canvas.startSmort(false);
canvas.removeCommand(End_Wisdom);
canvas.addCommand(Start_Wisdom);
}
}

}





package com.ball;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

public class BallCanvas extends Canvas
{
   private Ball ball=null;
   private int width=0;
   private int hight=0;
   private boolean isStart=false;
   
   private boolean gameIsover=false;
   /******************托板的成员变量**********************/
   private boolean keyPressed=false;//键一直处于按下的状态
   private static int desk_x=0;
   private int keyCode=0;
   private boolean smortStart=false;
   private int desk_add=0;
   private boolean desk_add_start=true;
   /****************************************/
   public BallCanvas()
   {
  width=this.getWidth();
  hight=this.getHeight();
  ball=new Ball(width,hight);
  desk_x=width/2;
  new ThreadRun().start();
  new KeyThread().start();
   }
protected void paint(Graphics g)
{
g.setColor(255,255,255);
g.fillRect(0, 0, width, hight);
g.setColor(0,0,0);
if(!isStart)
g.fillArc(width/2, hight-10, base.R, base.R, 0,360);
else
g.fillArc(ball.getX(),ball.getY(), base.R, base.R, 0,360);
/****************
* 绘制底层画板的代码
* ************************/
g.fillRect(desk_x, hight-base.DESK_hight, base.DESK_width,base.DESK_hight);
}
public void keyPressed(int code)
{
keyPressed=true;
keyCode=code;
 
keyEvent(code,5);
}
public void keyReleased(int code)
{
keyPressed=false;
}
private void keyEvent(int code,int size)
{
  if(!smortStart)
  {
switch(code){
  case base.LEFT:
  case base.LEFT_x:
  if(desk_x>0)
      desk_x=desk_x-size;
  else
  desk_x=0;  
break;
  case base.RIGHT:
  case base.RIGHT_x:
  if(desk_x+base.DESK_width+size<width)
  desk_x=desk_x+size;
  else
  desk_x= width-base.DESK_width;
break;
}
  }
}
private class KeyThread extends Thread
{
public void run()
{
while(true)
{
if(keyPressed){
keyEvent(keyCode,7);
}
try
{
this.sleep(100);
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
}
}
}
private class ThreadRun extends Thread
{
public void run()
{
isStart=true;
while(!gameIsover)
{
 if(smortStart)//启用智能
customStart();
 
repaint();
back();
try
{
    this.sleep(150);
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void back()
{
if(ball.getCurrent_Y()>=hight-base.R-base.DESK_hight-base.add)
{
 if(ball.getCurrent_X()+base.R/2>=desk_x&&ball.getCurrent_X()+base.R/2<=desk_x+base.DESK_width)
 {
ball.setBallBack();
 }  
 else
 gameIsover=true;
}
}
private void desk_Add_Values()
{
if(ball.get_X_Direction())//如果小球是向右移动
{
if(ball.getCurrent_X()>desk_x+base.DESK_width)
{
  //desk_add=(width-desk_x-base.R-base.DESK_width)/(width-ball.getCurrent_X()+base.R);
desk_add=(ball.getCurrent_X()-desk_x)/5;
}
else if(ball.getCurrent_X()<desk_x)
{
desk_add=(ball.getCurrent_X()-desk_x)/5;
}
}
else//如果小球是向左移动的
{
if(desk_x>ball.getCurrent_X())
{
//desk_add=base.add*(desk_x-2)/(ball.getCurrent_X()+2);
desk_add=(ball.getCurrent_X()-desk_x)/5;
}
else if(ball.getCurrent_X()>desk_x)
{
desk_add=(ball.getCurrent_X()-desk_x)/5;
 
}
}
}
private void customStart()
{
if(desk_add_start)//启动计算方法
{
  desk_Add_Values();
  System.out.println(desk_add);
  desk_add_start=false;
}
if(ball.getCurrent_X()+base.R/2>=desk_x&&ball.getCurrent_X()<desk_x+base.DESK_width)
{
  desk_x=ball.getCurrent_X()+base.R/2-base.DESK_width/2;
 if(desk_x<0)
  desk_x=0;
  else if(desk_x+base.DESK_width>width)
desk_x=width-base.DESK_width;
}
else
{
desk_x+=desk_add;
}
}
}
public void startSmort(boolean start)
{
smortStart=start;
desk_add_start=true;
}
}




package com.ball;

public class base 
{
   public final static int R=10;//小球的半径
   public final static int add=10;
   public final static int LEFT=-3;
   public final static int LEFT_x=52;
   
   public final static int RIGHT=-4;
   public final static int RIGHT_x=54;
   
   public final static int DESK_width=30;
   public final static  int DESK_hight=6;
}

本文出自 “技术人生” 博客,转载请与作者联系!

你可能感兴趣的:(java,职场,休闲,me,javaMe小游戏)