坦克大戰:有意思的JAVA戰鬥小程序

簡單的戰鬥小程序項目名稱tanke,含有兩個文件Tanke.java,zujian.java,在myeclipes中可以運行。

坦克大戰:有意思的JAVA戰鬥小程序

一: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 dtk = new 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

{

Vectoraa=new 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;

}

}

}

}


分享到:


相關文章: