import java.awt.Point; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class Car implements Runnable,KeyListener { /**这个游戏有4辆敌车*/ // DrawSquare car[] = new DrawSquare[4]; Cars car[] = new Cars[4]; /**主控制车*/ DrawSquare carMain; /**敌车的出现位置<li>初始化时赋值为 50</li>*/ int itStartLine; /**敌车的长度<li>为 Friendly 型,可以进行修改</li><li>车的长度在游戏初始化时自动赋值为40</li>*/ int itCarH; /**敌车的宽度<li>为 Friendly 型,可以进行修改</li><li>车的宽度在游戏初始化时自动赋值为20</li>*/ int itCarW; /**每辆敌车都有一个线程负责<li>线程的停顿时间为 300 毫秒</li>*/ Thread tdCar[] = new Thread[4]; /**每辆敌车的速度都可以调节<li>为 Friendly 型</li>*/ private int itSpeed[] = new int[4]; /**每辆敌车的某个时刻的坐标<li>[车的编号][0] :车的X坐标</li><li>[车的编号][1] 车的Y坐标</li>*/ private Point postion[] = new Point[4]; /**主控制车的坐标*/ private Point pMain; /**车道的宽度*/ int itLoadWidth; /**车道的车辆数<li>在屏幕上,一个车道最多只能有2辆车</li>*/ int itCarsOnLoad[] = new int[4]; /**使用工具包中的 MainFrame 类,生成一个窗体<li>用了重构,在初始化时设定了窗口的大小和坐标</li>*/ MainFrame mf; public static void main(String args[]){ new Car(); } Car(){ Init(); } /**初始化游戏的界面*/ public void Init(){ itStartLine = 50; itCarH = 40; itCarW = 20; itLoadWidth = 100; itSpeed[0] = 10; itSpeed[1] = 20; itSpeed[2] = 25; itSpeed[3] = 30; mf = new MainFrame(100,100,600,600); mf.setLayout(null); carMain = new DrawSquare(itCarW,itCarH); mf.add(carMain); pMain = new Point(); pMain.x = 300; pMain.y = 500; carMain.setLocation(pMain); mf.addKeyListener(this); for(int i=0;i<4;i++){ car = new Cars(itCarW,itCarH); // car = new DrawSquare(itCarW,itCarH); mf.add(car ); postion = new Point(); postion .x = i*itLoadWidth+1; postion .y = itStartLine; car .setLocation(postion ); tdCar = new Thread(this); tdCar .start(); } } public void run(){ while(true){ for(int i=0;i<4;i++){ if(Thread.currentThread()==tdCar ){ postion .y += itSpeed ; if(postion .y>=600){ // itCarsOnLoad[] postion .y = itStartLine; int loadNum = (int) Math.round(Math.random()*4); postion .x = itLoadWidth*loadNum; } if(Math.abs((postion .x-pMain.x))<=50&&Math.abs((postion .y-pMain.y))<=50){ System.exit(0); } car .setLocation(postion ); try { tdCar .sleep(50); } catch (InterruptedException e) { } } } } } public void keyPressed(KeyEvent e){ if(e.getKeyCode()==KeyEvent.VK_UP&&pMain.y>300){ pMain.y -= itLoadWidth; carMain.setLocation(pMain); } if(e.getKeyCode()==KeyEvent.VK_DOWN&&pMain.y<500){ pMain.y += itLoadWidth; carMain.setLocation(pMain); } if(e.getKeyCode()==KeyEvent.VK_LEFT&&pMain.x>0){ pMain.x -= itLoadWidth; carMain.setLocation(pMain); } if(e.getKeyCode()==KeyEvent.VK_RIGHT&&pMain.x<400){ pMain.x += itLoadWidth; carMain.setLocation(pMain); } if(e.getKeyCode()==KeyEvent.VK_S){ for(int i=0;i<4;i++){ itSpeed *=1.5; } } } public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e){} } /**汽车的类<li>继承自 DrawSquare ,车宽,车长</li>*/ class Cars extends DrawSquare{ /**车所在的车道<li>由于游戏升级问题,该版本没有使用 车道 </li><li>在游戏 Car_2 即版本2中使用了</li>*/ int LoadsNum; Cars(int w,int h){ this.sqWidth = w; this.sqHeight = h; this.InitSize(); } } /** * 生成一个画布,画布里面有一个正方形 * */ class DrawSquare extends Canvas{ /** * 长方形的 高 * <li>默认的值是 10</li> * */ public int sqHeight = 10; /** * 长方形的 宽 * <li>默认的值是 10</li> * */ public int sqWidth = 10; /** * 构造方法 * */ DrawSquare(){ setSize(this.sqWidth*2,this.sqHeight*2); // setSize(40,40); } public void InitSize(){ setSize(this.sqWidth*2,this.sqHeight*2); } public void paint(Graphics g){ g.drawRect(0,0,sqWidth,sqHeight); // g.drawRect(0,0,20,20); } DrawSquare(int w,int h){ this.sqHeight = h; this.sqWidth = w; setSize(this.sqWidth*2,this.sqHeight*2); // setSize(40,40); } }