import java.awt.*;
import java.awt.List;
import java.awt.event.*;
import java.util.*;public class tankclient extends Frame {
final static int width =600;
final static int height=600;
Image offScreenImage = null;
tank mytank=new tank(32,54,this,true);
ArrayList<tank> tanks = new ArrayList<tank>();
ArrayList<baozha>baozhas=new ArrayList<baozha>();
ArrayList<missile> missiles = new ArrayList<missile>();
public void lanchfame(){
this.setSize(width, height);
this.setVisible(true);
this.setBackground(Color.green);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(1);
}
});
new Thread(new repaint()).start();
this.addKeyListener(new kn());
for(int i=0;i<7;i++){
tanks.add(new tank(50+(i*80),170,this,false,tank.direction.D));
tanks.get(i).move();
}
}
public void paint(Graphics g) {
g.drawString("tanks count:" + tanks.size(), 10, 40);
g.drawString("missile count:" + missiles.size(), 10, 60);
g.drawString("explodes count:" + baozhas.size(), 10, 80);
mytank.draw(g);
for(int i=0;i<tanks.size();i++){
tanks.get(i).draw(g);
}
for(int i=0;i<baozhas.size();i++){
baozhas.get(i).draw(g);
}
for(int i=0;i<missiles.size();i++){
missile m=missiles.get(i);
m.zhodang(tanks);
m.draw(g);
}
}
public static void main(String args[]){
tankclient tc=new tankclient();
tc.lanchfame();
}
class repaint implements Runnable {
public void run(){
while(true){
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class kn extends KeyAdapter {
public void keyPressed(KeyEvent e){
mytank.keyPressed(e);
}
public void keyReleased(KeyEvent e) {
mytank.keyReleased(e);
}
}
public void update(Graphics g) {
if(offScreenImage == null) {
offScreenImage = this.createImage(width, height);
}
Graphics gOffScreen = offScreenImage.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.GREEN);
gOffScreen.fillRect(0, 0, width, height);
gOffScreen.setColor(c);
paint(gOffScreen);
g.drawImage(offScreenImage, 0, 0, null);
}
}
import java.awt.List;
import java.awt.event.*;
import java.util.*;public class tankclient extends Frame {
final static int width =600;
final static int height=600;
Image offScreenImage = null;
tank mytank=new tank(32,54,this,true);
ArrayList<tank> tanks = new ArrayList<tank>();
ArrayList<baozha>baozhas=new ArrayList<baozha>();
ArrayList<missile> missiles = new ArrayList<missile>();
public void lanchfame(){
this.setSize(width, height);
this.setVisible(true);
this.setBackground(Color.green);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(1);
}
});
new Thread(new repaint()).start();
this.addKeyListener(new kn());
for(int i=0;i<7;i++){
tanks.add(new tank(50+(i*80),170,this,false,tank.direction.D));
tanks.get(i).move();
}
}
public void paint(Graphics g) {
g.drawString("tanks count:" + tanks.size(), 10, 40);
g.drawString("missile count:" + missiles.size(), 10, 60);
g.drawString("explodes count:" + baozhas.size(), 10, 80);
mytank.draw(g);
for(int i=0;i<tanks.size();i++){
tanks.get(i).draw(g);
}
for(int i=0;i<baozhas.size();i++){
baozhas.get(i).draw(g);
}
for(int i=0;i<missiles.size();i++){
missile m=missiles.get(i);
m.zhodang(tanks);
m.draw(g);
}
}
public static void main(String args[]){
tankclient tc=new tankclient();
tc.lanchfame();
}
class repaint implements Runnable {
public void run(){
while(true){
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class kn extends KeyAdapter {
public void keyPressed(KeyEvent e){
mytank.keyPressed(e);
}
public void keyReleased(KeyEvent e) {
mytank.keyReleased(e);
}
}
public void update(Graphics g) {
if(offScreenImage == null) {
offScreenImage = this.createImage(width, height);
}
Graphics gOffScreen = offScreenImage.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.GREEN);
gOffScreen.fillRect(0, 0, width, height);
gOffScreen.setColor(c);
paint(gOffScreen);
g.drawImage(offScreenImage, 0, 0, null);
}
}
import java.util.ArrayList;
public class missile {
final static int width=5;
final static int height=5;
tank.direction paoto;
int x;
int y;
tankclient tc;
boolean islive=true;
boolean begood=true;
public missile(int x, int y,tank.direction paoto,tankclient tc,boolean begood) {
this.x=x;
this.y=y;
this.paoto=paoto;
this.tc=tc;
this.begood=begood;
}
public void draw(Graphics g){
g.fillOval(x, y, width, height);
move();
}
public Rectangle getRect() {
return new Rectangle(x, y, width, height);
}
public void zhodang(ArrayList<tank> tanks){
for(int i=0; i<tanks.size(); i++) {
if(this.begood&&this.getRect().intersects(tanks.get(i).getRect())) {
tanks.remove(i);
tc.missiles.remove(this);
tc.baozhas.add(new baozha(x,y,tc));}
}
}
private void move() {
final int XSPEED=10;
final int YSPEED=10;
switch(paoto) {
case L:
x -= XSPEED;
break;
case LU:
x -= XSPEED;
y -= YSPEED;
break;
case U:
y -= YSPEED;
break;
case RU:
x += XSPEED;
y -= YSPEED;
break;
case R:
x += XSPEED;
break;
case RD:
x += XSPEED;
y += YSPEED;
break;
case D:
y += YSPEED;
break;
case LD:
x -= XSPEED;
y += YSPEED;
break;
}
}
}
import java.awt.*;
public class baozha {
int x;int y;
boolean belive=true;
tankclient tc;
int step=0;
int banjing[]={4, 7, 12, 18, 26, 32, 49, 30, 14, 6};
public baozha(int x,int y,tankclient tc){
this.x=x;
this.y=y;
this.tc=tc;
}
public void draw(Graphics g) {
if(!belive) {
tc.baozhas.remove(this);
return;
}
if(step ==banjing.length) {
belive = false;
step = 0;
return;
}
Color c = g.getColor();
g.setColor(Color.ORANGE);
g.fillOval(x, y, banjing[step], banjing[step]);
g.setColor(c);
step ++;
}
}
import java.awt.event.*;
import java.util.Random;
public class tank {
final static int width=30;
final static int height=30;
final static int XSPEED=5;
final static int YSPEED=5;
int oldX;
int oldY;
Random r=new Random();
boolean belive=false;
enum direction{L,D,U,R,LD,LU,RU,RD,STOP};
private boolean bL=false, bU=false, bR=false, bD = false;
direction dir=direction.STOP;
direction tanksdir=null;
private int step=r.nextInt(12)+3;
boolean begood=true;
int x,y;
tankclient tc;
direction paoto=direction.D;
public Rectangle getRect() {
return new Rectangle(x, y, width, height);
}
public void tanksmove(){
}
public void zhodang(){
for(int i=0;i<tc.missiles.size();i++){
if(tc.missiles.get(i).getRect().intersects(tc.tanks.get(i).getRect())){
tc.tanks.remove(i);
tc.missiles.remove(i);
}
}
}
public tank(int x,int y,tankclient tc,boolean begood){
this.begood=begood;
this.x=x;
this.y=y;
this.oldX=x;
this.oldY=y;
this.tc=tc;
}
public tank(int x,int y,tankclient tc,boolean begood,direction dir){
this(x,y,tc,begood);
this.dir=dir;
}
public void draw(Graphics g){
Color c=g.getColor();
if(begood) g.setColor(Color.RED);
else g.setColor(Color.yellow);
g.fillOval(x, y, width, height);
paotofangxiang();
g.setColor(Color.BLACK);
switch(paoto) {
case L:
g.drawLine(x + tank.height/2, y + tank.height/2, x, y + tank.height/2);
break;
case LU:
g.drawLine(x + tank.width/2, y + tank.height/2, x, y);
break;
case U:
g.drawLine(x + tank.width/2, y + tank.height/2, x + tank.width/2, y);
break;
case RU:
g.drawLine(x + tank.width/2, y + tank.height/2, x + tank.width, y);
break;
case R:
g.drawLine(x + tank.width/2, y + tank.height/2, x + tank.width, y + tank.height/2);
break;
case RD:
g.drawLine(x + tank.width/2, y + tank.height/2, x + tank.width, y + tank.height);
break;
case D:
g.drawLine(x + tank.width/2, y + tank.height/2, x + tank.width/2, y + tank.height);
break;
case LD:
g.drawLine(x + tank.width/2, y + tank.height/2, x, y + tank.height);
break;
}
move();
}
void paotofangxiang(){
locateDirection();
switch(dir){
case L:
paoto=direction.L;
break;
case LU:
paoto=direction.LU;
break;
case U:
paoto=direction.U;
break;
case RU:
paoto=direction.RU;
break;
case R:
paoto=direction.R;
break;
case RD:
paoto=direction.RD;
break;
case D:
paoto=direction.D;
break;
case LD:
paoto=direction.LD;
break;
case STOP:
}
if(x < 0) x = 0;
if(y < 30) y = 30;
if(x + tank.width> tankclient.width) x = tankclient.width - tank.width;
if(y + tank.height > tankclient.height) y = tankclient.height - tank.height;
}
void move() {
if(!begood){
direction[] dirs ={direction.L,direction.D,direction.U,direction.R,direction.LD,direction.LU,direction.RU,direction.RD};
if(step == 0) {
step = r.nextInt(12)+3;
int rn = r.nextInt(dirs.length);
dir = dirs[rn];
paoto=dir;
}
step --;
if(dir==direction.D)x+=5;
if(r.nextInt(40) > 38) tc.missiles.add(new missile((x+width/2)-(missile.height),y+(height/2)-(missile.height/2),paoto,tc,false));
}
switch(dir) {
case L:
x -= XSPEED;
break;
case LU:
x -= XSPEED;
y -= YSPEED;
break;
case U:
y -= YSPEED;
break;
case RU:
x += XSPEED;
y -= YSPEED;
break;
case R:
x += XSPEED;
break;
case RD:
x += XSPEED;
y += YSPEED;
break;
case D:
y += YSPEED;
break;
case LD:
x -= XSPEED;
y += YSPEED;
break;
case STOP:
break;
}
if(!begood){
direction[] dirs ={direction.L,direction.D,direction.U,direction.R,direction.LD,direction.LU,direction.RU,direction.RD};
if(step == 0) {
step = r.nextInt(12)+3;
int rn = r.nextInt(dirs.length);
dir = dirs[rn];
paoto=dir;
}
step --;
if(r.nextInt(40) > 38) tc.missiles.add(new missile((x+width/2)-(missile.height),y+(height/2)-(missile.height/2),paoto,tc,false));
}
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_CONTROL:
tc.missiles.add(new missile((x+width/2)-(missile.height),y+(height/2)-(missile.height/2),paoto,tc,true));
break;
case KeyEvent.VK_LEFT :
bL = true;
break;
case KeyEvent.VK_UP :
bU = true;
break;
case KeyEvent.VK_RIGHT :
bR = true;
break;
case KeyEvent.VK_DOWN :
bD = true;
break;
}
locateDirection();
}
void locateDirection() {
if(bL && !bU && !bR && !bD) dir = direction.L;
else if(bL && bU && !bR && !bD) dir = direction.LU;
else if(!bL && bU && !bR && !bD) dir = direction.U;
else if(!bL && bU && bR && !bD) dir = direction.RU;
else if(!bL && !bU && bR && !bD) dir = direction.R;
else if(!bL && !bU && bR && bD) dir = direction.RD;
else if(!bL && !bU && !bR && bD) dir = direction.D;
else if(bL && !bU && !bR && bD) dir = direction.LD;
else if(!bL && !bU && !bR && !bD) dir = direction.STOP;
} public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_LEFT :
bL = false;
break;
case KeyEvent.VK_UP :
bU = false;
break;
case KeyEvent.VK_RIGHT :
bR = false;
break;
case KeyEvent.VK_DOWN :
bD = false;
break;
case KeyEvent.VK_A :
superFire();
break;
}
locateDirection();
}
private void superFire() {
direction[] dirs = direction.values();
for(int i=0; i<8; i++) {
tc.missiles.add(new missile((x+width/2)-(missile.height),y+(height/2)-(missile.height/2),dirs[i],tc,true));
}
}
private void stay() {
x = oldX;
y = oldY;
}
}
如过是我的话...t=random.next(100)if(t<80)
直走else
转换一个可以行进的方向这种最简单的方法....我曾经做过一个是50%..效果就不错..如果楼主想让坦克走的更自然些我想想。.咱交流交流吧..很少找到有相同兴趣的朋友..89631718可以的话加我QQ吧...大家一起研究
void locateDirection() {
if (bL && !bU && !bR && !bD)
dir = direction.L;
else if (bL && bU && !bR && !bD)
dir = direction.LU;
else if (!bL && bU && !bR && !bD)
dir = direction.U;
else if (!bL && bU && bR && !bD)
dir = direction.RU;
else if (!bL && !bU && bR && !bD)
dir = direction.R;
else if (!bL && !bU && bR && bD)
dir = direction.RD;
else if (!bL && !bU && !bR && bD)
dir = direction.D;
else if (bL && !bU && !bR && bD)
dir = direction.LD;
else if (!bL && !bU && !bR && !bD)
dir = direction.STOP;
}
这有什么用
paotofangxiang();
而机器人 不按键盘 所以老是 dir = direction.STOP;