这个游戏大部分人都玩过,界面相当简单,主要就是子弹类,还有飞机类,然后再就是把子弹和飞机加到一个Canvas当中去,然后Canvas添加到JFrame中。
class Ball implements Runnable{ //子弹类
private int X,Y; private int moveX,moveY;
private int width,height;
private int rX,rY; private int rMoveX,rMoveY;
private BallCanvas canvas;
private Thread newThread;
public Ball(BallCanvas can){ width =can.getWidth(); //得到画图区的宽 height =can.getHeight(); //得到画图区的高
rX =(int)(height*Math.random()); rY =(int)(width*Math.random()); rMoveX =(int)(40*Math.random()); rMoveY =(int)(40*Math.random()); X =rX; //球的起始点坐标 Y =rY; //球的起始点坐标
moveX =rMoveX; //球位移的距离 moveY =rMoveY; //球位移的距离
canvas =can; //画图时用
newThread=new Thread(this); newThread.start(); } public void run(){ while(newThread!=null){
canvas.repaint();
try{ Thread.sleep(50); } catch(InterruptedException e){}
X=X+moveX; Y=Y+moveY;
if(X<=0){ X=0; moveX=-moveX; } if(X>=(width-30)){ X=width-30; moveX=-moveX; } if(Y<=0){ Y=0; moveY=-moveY; } if(Y>=(height-30)){ Y=height-30; moveY=-moveY; } } } public void draw(Graphics g){ g.setColor(Color.black); g.fillOval(X,Y,5,5); } }
这个类主要是实现子弹的一些功能,子弹在天上非,其中一个子弹一个线程, 飞机类主要是实现自己控制小飞机的飞行,通过从Canvas中接受到键盘事件来控制飞机的移动,
class Air { //飞机类 private int X,Y; //飞机的坐标 private int width,height; //飞机可以飞到的区域
private BallCanvas canvas; //画图用
//private Thread newThread; //飞机线程 public Air(BallCanvas can){ width =300; height =400; X =width/2; Y =height/2;
canvas =can; }
public void moveUp(){ this.Y-=10; if(Y<=0)Y=0; } public void moveDown(){ this.Y+=10; if(Y>=height)Y=height-5; } public void moveRight(){ this.X+=10; if(X>=width)X=width-5; } public void moveLeft(){ this.X-=10; if(X<=0)X=0; }
public void draw(Graphics g){ g.setColor(Color.red); g.fillOval(X,Y,5,5); } }
最后就是Canvas类实现KeyListener接口,并且paint方法画图
public void paint(Graphics g){ air.draw(g); for(int i=0;i<balls.length;i++){ balls[i].draw(g); } } public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){ case KeyEvent.VK_UP: air.moveUp(); repaint(); break; case KeyEvent.VK_DOWN: air.moveDown(); repaint(); break; case KeyEvent.VK_RIGHT: air.moveRight(); repaint(); break; case KeyEvent.VK_LEFT: air.moveLeft(); repaint(); break; } }
整个游戏的实现过程大概就是这样的,但是还有些地方没实现,子弹和飞机相遇的判断函数没写,没写过这方面的东西,希望大家给点指示,谢谢。
|