簡單的戰鬥小程序項目名稱tanke,含有兩個文件Tanke.java,zujian.java,在myeclipes中可以運行。
一:Tanke.java文件下:
package tanke;
import java.awt.image.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.*;
public class Tanke extends JFrame {
MyPanel mp = null;
public static void main(String[] args) {
Tanke t1 = new Tanke();
}
public Tanke() {
mp = new MyPanel();
this.add(mp);
this.addKeyListener(mp);
Thread t1 = new Thread(mp);
t1.start();
this.setSize(450, 350);
this.setLocation(600, 280);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class MyPanel extends JPanel implements KeyListener, Runnable {
MyTank mt = null;
Vector
int tksl = 10;
public MyPanel() {
mt = new MyTank(142, 232);
for (int i = 0; i < tksl; i++) {
DiTank dt = new DiTank((i) * 181 + 5, getY());
dtk.add(dt);
Thread t2=new Thread(dt);
t2.start();
}
}
public void jzdf(Zidan zd, DiTank dt) {
switch (dt.fangxiang) {
case 0:
case 2:
if (zd.x > dt.x && zd.x < dt.x + 20 && zd.y > dt.y
&& zd.y < dt.y + 30) {
zd.shengming = false;
dt.shengming = false;
}
break;
case 1:
case 3:
if (zd.x > dt.x && zd.x < dt.x + 30 && zd.y > dt.y
&& zd.y < dt.y + 20) {
zd.shengming = false;
dt.shengming = false;
}
}
}
public void paint(Graphics g) {
super.paint(g);
g.fillRect(0, 0, 450, 350);
this.drawTank(mt.getX(), mt.getY(), g, mt.fangxiang, 0);
for (int i = 0; i < dtk.size(); i++) {
DiTank dt=dtk.get(i);
if (dt.shengming) {
this.drawTank(dt.x,dt.y, g, dt.fangxiang, 1);
}
}
for (int i = 0; i < mt.aa.size(); i++) {
Zidan zd = mt.aa.get(i);
if (zd != null && zd.shengming == true) {
g.setColor(Color.white);
g.fill3DRect(zd.x, zd.y, 3, 3, false);
}
if (zd.shengming == false) {
mt.aa.remove(zd);
g.setColor(Color.white);
g.fill3DRect(zd.x, zd.y, 10, 10, false);
}
}
}
public void drawTank(int x, int y, Graphics g, int fangxiang, int leixing)
{
switch (leixing) {
case 0:
g.setColor(Color.yellow);
break;
case 1:
g.setColor(Color.green);
break;
}
switch (fangxiang) {
case 0:
g.fill3DRect(x, y, 5, 30, false);
g.fill3DRect(x + 15, y, 5, 30, false);
g.fill3DRect(x + 5, y + 5, 10, 20, false);
g.fillOval(x + 5, y + 10, 10, 10);
g.drawLine(x + 10, y + 15, x + 10, y - 3);
break;
case 1:
g.fill3DRect(x, y, 30, 5, false);
g.fill3DRect(x, y + 15, 30, 5, false);
g.fill3DRect(x + 5, y + 5, 20, 10, false);
g.fillOval(x + 10, y + 5, 10, 10);
g.drawLine(x + 15, y + 10, x - 3, y + 10);
break;
case 2:
g.fill3DRect(x, y, 5, 30, false);
g.fill3DRect(x + 15, y, 5, 30, false);
g.fill3DRect(x + 5, y + 5, 10, 20, false);
g.fillOval(x + 5, y + 10, 10, 10);
g.drawLine(x + 10, y + 15, x + 10, y + 33);
break;
case 3:
g.fill3DRect(x, y, 30, 5, false);
g.fill3DRect(x, y + 15, 30, 5, false);
g.fill3DRect(x + 5, y + 5, 20, 10, false);
g.fillOval(x + 10, y + 5, 10, 10);
g.drawLine(x + 15, y + 10, x + 33, y + 10);
break;
}
g.setColor(Color.yellow);
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W) {
this.mt.setFangxiang(0);
this.mt.xiangshang();
} else if (e.getKeyCode() == KeyEvent.VK_A) {
this.mt.setFangxiang(1);
this.mt.xiangzuo();
} else if (e.getKeyCode() == KeyEvent.VK_S) {
this.mt.setFangxiang(2);
this.mt.xiangxia();
} else if (e.getKeyCode() == KeyEvent.VK_D) {
this.mt.setFangxiang(3);
this.mt.xiangyou();
}
if (e.getKeyCode() == KeyEvent.VK_J) {
if (this.mt.aa.size() < 8) {
this.mt.fszd();
}
}
this.repaint();
}
public void run() {
while (true) {
try {
Thread.sleep(100);
} catch (Exception e) {
}
for (int i = 0; i < mt.aa.size(); i++) {
Zidan zd = mt.aa.get(i);
if (zd.shengming) {
for (int j = 0; j < dtk.size(); j++) {
DiTank dt = dtk.get(j);
if (dt.shengming) {
this.jzdf(zd, dt);
}
}
}
}
this.repaint();
}
}
}
二 Zujian.java文件下:
package tanke;
import java.util.Vector;
class Tank
{
int x=0,y=0;
int fangxiang=0;
int sudu=2;
boolean shengming;
public int getSudu(){
return sudu;
}
public void setSudu(int sudu){
this.sudu=sudu;
}
public int getFangxiang(){
return fangxiang;
}
public void setFangxiang(int fangxiang){
this.fangxiang=fangxiang;
}
public int getX(){return x;}
public void setX(int x){this.x=x;}
public int getY(){return y;}
public void setY(int y){this.y=y;}
public Tank(int x,int y)
{
this.x=x;
this.y=y;
}
}
class MyTank extends Tank
{
Vector
Zidan zd=null;
public MyTank(int x,int y)
{
super(x,y);
}
public void fszd()
{
switch(this.fangxiang)
{
case 0:
zd=new Zidan(x+10,y,0);
aa.add(zd);
break;
case 1:
zd=new Zidan(x,y+10,1);
aa.add(zd);
break;
case 2:
zd=new Zidan(x+10,y+30,2);
aa.add(zd);
break;
case 3:
zd=new Zidan(x+30,y+10,3);
aa.add(zd);
break;
}
Thread t=new Thread(zd);
t.start();
}
public void xiangshang()
{
y-=sudu;
}
public void xiangzuo()
{
x-=sudu;
}
public void xiangxia()
{
y+=sudu;
}
public void xiangyou()
{
x+=sudu;
}
}
class Zidan implements Runnable
{
int x;
int y;
int fangxiang;
int sudu=5;
boolean shengming=true;
public Zidan(int x,int y,int fangxiang)
{
this.x=x;
this.y=y;
this.fangxiang=fangxiang;
}
public void run()
{
while(true)//線程下面的死循環都要有個睡眠
{
try{
Thread.sleep(50);
}catch(Exception e){}
switch(fangxiang)
{
case 0:
y-=sudu;
break;
case 1:
x-=sudu;
break;
case 2:
y+=sudu;
break;
case 3:
x+=sudu;
break;
}
if(x<0||x>440||y<0||y>340)
{
shengming=false;
break;
}
}
}
}
class DiTank extends Tank implements Runnable
{
int x;int y;
boolean shengming=true;
public DiTank(int x,int y)
{
super(x,y);
}
public void run()
{
while(true)
{
int sudu=2;
try{
Thread.sleep(50);
}catch(Exception e){}
switch(this.fangxiang)
{
case 0:
for(int i=0;i<30;i++)
{
if(y>0){
y-=sudu;}else{this.fangxiang=2;}
try{
Thread.sleep(50);
}catch(Exception e){}
}
break;
case 1:
for(int i=0;i<30;i++)
{
if(x>0){
x-=sudu;}else{this.fangxiang=3;}
try{
Thread.sleep(50);
}catch(Exception e){}
}
break;
case 2:
for(int i=0;i<30;i++)
{
if(y<280){
y+=sudu;}else{this.fangxiang=0;}
try{
Thread.sleep(50);
}catch(Exception e){}
}
break;
case 3:
for(int i=0;i<30;i++)
{
if(x<380){
x+=sudu;}else{this.fangxiang=1;}
try{
Thread.sleep(50);
}catch(Exception e){}
}
break;
}
this.fangxiang=(int)(Math.random()*4);
if(this.shengming==false)
{
break;
}
}
}
}
閱讀更多 超光速漫遊者 的文章