真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

關(guān)于java坦克大戰(zhàn)實(shí)用代碼的信息

在java編寫坦克大戰(zhàn)游戲時(shí),如何判斷兩輛坦克不能重疊運(yùn)動(dòng),有什么簡(jiǎn)單的算法

對(duì)于這個(gè)小游里面的類的抽象很重要,對(duì)坦克及其它類我在這里面就不定義了,其實(shí)J2SE的API里面就有關(guān)于圖形重疊的算法,就是這個(gè)intersects()方法,具體偽代碼如下:

創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元富川做網(wǎng)站,已為上家服務(wù),為富川各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220

public boolean collidesWithTanks(java.util.ListTank tanks) {

for(int i=0; itanks.size(); i++) {

Tank t = tanks.get(i);

if(this != t) {

if(this.live t.isLive() this.getRect().intersects(t.getRect())) {

this.stay();

t.stay();

return true;

}

}

}

return false;

}

您可以根據(jù)自己的實(shí)際需求來(lái)改寫,在我的百度文庫(kù)里面有關(guān)于“坦克大戰(zhàn)”的所有代碼,如果有需要我可以把代碼發(fā)給你,可以通過(guò)百度HI聯(lián)系我。

(100分)Java寫“坦克大戰(zhàn)”

package com.bjsxt.tank;

import java.awt.Color;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import java.util.Properties;

/**

* 這個(gè)類的作用是坦克游戲的主窗口

* @author mashibing

*

*/

public class TankClient extends Frame {

/**

* 整個(gè)坦克游戲的寬度

*/

public static final int GAME_WIDTH = 800;

public static final int GAME_HEIGHT = 600;

Tank myTank = new Tank(50, 50, true, Direction.STOP, this);

Wall w1 = new Wall(100, 200, 20, 150, this), w2 = new Wall(300, 100, 300, 20, this);

ListExplode explodes = new ArrayListExplode();

ListMissile missiles = new ArrayListMissile();

ListTank tanks = new ArrayListTank();

Image offScreenImage = null;

Blood b = new Blood();

public void paint(Graphics g) {

/*

* 指明子彈-爆炸-坦克的數(shù)量

* 以及坦克的生命值

*/

g.drawString("missiles count:" + missiles.size(), 10, 50);

g.drawString("explodes count:" + explodes.size(), 10, 70);

g.drawString("tanks count:" + tanks.size(), 10, 90);

g.drawString("tanks life:" + myTank.getLife(), 10, 110);

if(tanks.size() = 0) {

for(int i=0; iInteger.parseInt(PropertyMgr.getProperty("reProduceTankCount")); i++) {

tanks.add(new Tank(50 + 40*(i+1), 50, false, Direction.D, this));

}

}

for(int i=0; imissiles.size(); i++) {

Missile m = missiles.get(i);

m.hitTanks(tanks);

m.hitTank(myTank);

m.hitWall(w1);

m.hitWall(w2);

m.draw(g);

//if(!m.isLive()) missiles.remove(m);

//else m.draw(g);

}

for(int i=0; iexplodes.size(); i++) {

Explode e = explodes.get(i);

e.draw(g);

}

for(int i=0; itanks.size(); i++) {

Tank t = tanks.get(i);

t.collidesWithWall(w1);

t.collidesWithWall(w2);

t.collidesWithTanks(tanks);

t.draw(g);

}

myTank.draw(g);

myTank.eat(b);

w1.draw(g);

w2.draw(g);

b.draw(g);

}

public void update(Graphics g) {

if(offScreenImage == null) {

offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);

}

Graphics gOffScreen = offScreenImage.getGraphics();

Color c = gOffScreen.getColor();

gOffScreen.setColor(Color.BLACK);

gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);

gOffScreen.setColor(c);

paint(gOffScreen);

g.drawImage(offScreenImage, 0, 0, null);

}

/**

* 本方法顯示坦克主窗口

*

*/

public void lauchFrame() {

int initTankCount = Integer.parseInt(PropertyMgr.getProperty("initTankCount"));

for(int i=0; iinitTankCount; i++) {

tanks.add(new Tank(50 + 40*(i+1), 50, false, Direction.D, this));

}

//this.setLocation(400, 300);

this.setSize(GAME_WIDTH, GAME_HEIGHT);

this.setTitle("TankWar");

this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

this.setResizable(false);

this.setBackground(Color.GREEN);

this.addKeyListener(new KeyMonitor());

setVisible(true);

new Thread(new PaintThread()).start();

}

public static void main(String[] args) {

TankClient tc = new TankClient();

tc.lauchFrame();

}

private class PaintThread implements Runnable {

public void run() {

while(true) {

repaint();

try {

Thread.sleep(50);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

private class KeyMonitor extends KeyAdapter {

public void keyReleased(KeyEvent e) {

myTank.keyReleased(e);

}

public void keyPressed(KeyEvent e) {

myTank.keyPressed(e);

}

}

}

JAVA坦克大戰(zhàn),這段代碼為什么子彈的坐標(biāo)在變,卻不能repaint,但是按下任意鍵盤的建卻重繪了呢?

Mypanel的? run方法里要調(diào)用repaint方法??? 否則你的repaint方法只會(huì)在keyPressed發(fā)生的時(shí)候才調(diào)用

修改一下兩個(gè)地方

(1)

// 鍵盤獲取事件的函數(shù)

public void keyPressed(KeyEvent arg0) {

// TODO Auto-generated method stub

if (arg0.getKeyCode() == KeyEvent.VK_J) {

?if (hero.shot.size() 5) {

??? ?hero.shott();

?}

}

if (arg0.getKeyCode() == KeyEvent.VK_W) {

?hero.setSDC(hero.getSpeed(), 0, hero.getColor());

?hero.moveUp();

} else if (arg0.getKeyCode() == KeyEvent.VK_S) {

?hero.setSDC(hero.getSpeed(), 1, hero.getColor());

?hero.moveDown();

} else if (arg0.getKeyCode() == KeyEvent.VK_A) {

?hero.setSDC(hero.getSpeed(), 2, hero.getColor());

?hero.moveLeft();

} else if (arg0.getKeyCode() == KeyEvent.VK_D) {

?hero.setSDC(hero.getSpeed(), 3, hero.getColor());

?hero.moveRight();

}

/**

* 這個(gè)repaint注釋掉

*/

//this.repaint();

}

(2)

// 線程

/**

* 一秒鐘60幀

*/

public void run() {

// TODO Auto-generated method stub

while(true){

?this.repaint();

?try {

??? ?

??? ?Thread.sleep(1000 / 60);

?} catch (InterruptedException e) {

??? ?// TODO 自動(dòng)生成的 catch 塊

??? ?e.printStackTrace();

?}

}

}

完整代碼如下:

import?java.awt.*;

import?javax.swing.*;

import?java.util.*;

import?java.awt.event.*;

public?class?aaa?extends?JFrame?{

public?static?void?main(String[]?args)?{

aaa?a1?=?new?aaa();

Thread?t1?=?new?Thread(a1.mp);

t1.start();

}

MyPanel?mp?=?null;

public?aaa()?{

mp?=?new?MyPanel();

this.add(mp);

this.addKeyListener(mp);

this.setSize(500,?500);

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

class?MyPanel?extends?JPanel?implements?KeyListener,?Runnable?{

MyTank?hero?=?null;

VectorEmenyTank?emeny?=?new?VectorEmenyTank();

int?emsize?=?5;

//?鍵盤獲取事件的函數(shù)

public?void?keyPressed(KeyEvent?arg0)?{

//?TODO?Auto-generated?method?stub

if?(arg0.getKeyCode()?==?KeyEvent.VK_J)?{

if?(hero.shot.size()??5)?{

hero.shott();

}

}

if?(arg0.getKeyCode()?==?KeyEvent.VK_W)?{

hero.setSDC(hero.getSpeed(),?0,?hero.getColor());

hero.moveUp();

}?else?if?(arg0.getKeyCode()?==?KeyEvent.VK_S)?{

hero.setSDC(hero.getSpeed(),?1,?hero.getColor());

hero.moveDown();

}?else?if?(arg0.getKeyCode()?==?KeyEvent.VK_A)?{

hero.setSDC(hero.getSpeed(),?2,?hero.getColor());

hero.moveLeft();

}?else?if?(arg0.getKeyCode()?==?KeyEvent.VK_D)?{

hero.setSDC(hero.getSpeed(),?3,?hero.getColor());

hero.moveRight();

}

/**

*?這個(gè)repaint注釋掉

*/

//this.repaint();

}

public?void?keyReleased(KeyEvent?arg0)?{

//?TODO?Auto-generated?method?stub

}

public?void?keyTyped(KeyEvent?arg0)?{

//?TODO?Auto-generated?method?stub

}

//?完畢

public?MyPanel()?{

hero?=?new?MyTank(250,?250);

hero.setSDC(5,?2,?2);

for?(int?i?=?0;?i??emsize;?++i)?{

EmenyTank?em?=?new?EmenyTank((i?+?1)?*?60,?20);

em.setSDC(5,?1,?1);

emeny.add(em);

}

}

//?線程

/**

*?一秒鐘60幀

*/

public?void?run()?{

//?TODO?Auto-generated?method?stub

while(true){

this.repaint();

try?{

Thread.sleep(1000?/?60);

}?catch?(InterruptedException?e)?{

//?TODO?自動(dòng)生成的?catch?塊

e.printStackTrace();

}

}

}

public?void?paint(Graphics?g)?{

super.paint(g);

//?畫板,坦克得放在畫板后頭

g.fillRect(0,?0,?400,?400);

//?paint敵人坦克

for?(int?i?=?0;?i??emeny.size();?++i)?{

EmenyTank?em?=?null;

em?=?emeny.get(i);

this.drawTank(em.getX(),?em.getY(),?g,?em.getDirect(),

em.getColor());

}

//?畫我自己的坦克

this.drawTank(hero.getX(),?hero.getY(),?g,?hero.getDirect(),

hero.getColor());

//?畫出我的子彈

for?(int?i?=?0;?i??hero.shot.size();?i++)?{

Shot?myShot?=?hero.shot.get(i);

if?(myShot?!=?null??myShot.live?==?true)?{

g.draw3DRect(myShot.x,?myShot.y,?2,?2,?false);

}

if?(myShot.live?==?false)?{

hero.shot.remove(myShot);

}

}

}

public?void?drawTank(int?x,?int?y,?Graphics?g,?int?direct,?int?color)?{

//?判斷坦克的顏色(敵我)然后畫出坦克

switch?(color)?{

case?0:

g.setColor(Color.BLUE);

break;

case?1:

g.setColor(Color.YELLOW);

break;

case?2:

g.setColor(Color.GREEN);

break;

}

//?判斷坦克的方向然后再畫出坦克

switch?(direct)?{

case?0:

g.fill3DRect(x,?y,?10,?30,?false);

g.fill3DRect(x?+?26,?y,?10,?30,?false);

g.fill3DRect(x?+?10,?y?+?5,?16,?20,?false);

g.drawLine(x?+?18,?y?+?15,?x?+?18,?y);

break;

case?1:

g.fill3DRect(x,?y,?10,?30,?false);

g.fill3DRect(x?+?26,?y,?10,?30,?false);

g.fill3DRect(x?+?10,?y?+?5,?16,?20,?false);

g.drawLine(x?+?18,?y?+?15,?x?+?18,?y?+?30);

break;

case?2:

g.fill3DRect(x?+?3,?y?-?3,?30,?10,?false);

g.fill3DRect(x?+?3,?y?+?23,?30,?10,?false);

g.fill3DRect(x?+?8,?y?+?7,?20,?16,?false);

g.drawLine(x?+?18,?y?+?15,?x?+?3,?y?+?15);

break;

case?3:

g.fill3DRect(x?+?3,?y?-?3,?30,?10,?false);

g.fill3DRect(x?+?3,?y?+?23,?30,?10,?false);

g.fill3DRect(x?+?8,?y?+?7,?20,?16,?false);

g.drawLine(x?+?18,?y?+?15,?x?+?33,?y?+?15);

break;

}

}

}

class?EmenyTank?extends?Tank?implements?Runnable?{

public?EmenyTank(int?x,?int?y)?{

//?TODO?Auto-generated?method?stub

super(x,?y);

}

public?void?run()?{

}

}

class?Shot?implements?Runnable?{

protected?int?x;

protected?int?y;

protected?int?direct;

protected?int?speed?=?4;

protected?boolean?live?=?true;

public?void?setX(int?x)?{

this.x?=?x;

this.y?=?y;

}

public?int?getX()?{

return?x;

}

public?int?getY()?{

return?y;

}

public?void?setDirect(int?direct)?{

this.direct?=?direct;

}

public?int?getDirect()?{

return?direct;

}

public?void?setSpeed(int?speed)?{

this.speed?=?speed;

}

public?int?getSpeed()?{

return?speed;

}

//?子彈的上下左右以及走的速度

public?void?run()?{

//?TODO?Auto-generated?method?stub

while?(true)?{

try?{

Thread.sleep(100);

}?catch?(Exception?e)?{

}

switch?(direct)?{

case?0:

y?-=?speed;

break;

case?1:

y?+=?speed;

break;

case?2:

x?-=?speed;

break;

case?3:

x?+=?speed;

break;

}

if?(x??400?||?x??0?||?y??400?||?y??0)?{

this.live?=?false;

break;

}

}

}

}

class?Tank?{

protected?int?x;

protected?int?y;

protected?int?speed?=?5;

protected?int?direct;

protected?int?color;

boolean?live;

public?Tank(int?x,?int?y)?{

this.x?=?x;

this.y?=?y;

}

public?int?getX()?{

return?x;

}

public?int?getY()?{

return?y;

}

public?void?setSDC(int?speed,?int?direct,?int?color)?{

this.speed?=?speed;

this.direct?=?direct;

this.color?=?color;

}

public?int?getSpeed()?{

return?speed;

}

public?int?getDirect()?{

return?direct;

}

public?int?getColor()?{

return?color;

}

}

class?MyTank?extends?Tank?{

public?MyTank(int?x,?int?y)?{

//?TODO?Auto-generated?method?stub

super(x,?y);

}

VectorShot?shot?=?new?VectorShot();

Shot?shota?=?null;

public?void?shott()?{

switch?(this.direct)?{

case?0:

shota?=?new?Shot();

shota.x?=?x?+?18;

shota.y?=?y;

shota.direct?=?0;

shot.add(shota);

break;

case?1:

shota?=?new?Shot();

shota.x?=?x?+?18;

shota.y?=?y?+?30;

shota.direct?=?1;

shot.add(shota);

break;

case?2:

shota?=?new?Shot();

shota.x?=?x?+?3;

shota.y?=?y?+?15;

shota.direct?=?2;

shot.add(shota);

break;

case?3:

shota?=?new?Shot();

shota.x?=?x?+?33;

shota.y?=?y?+?15;

shota.direct?=?3;

shot.add(shota);

break;

}

Thread?t?=?new?Thread(shota);

t.start();

}

public?void?moveUp()?{

if?(y??0)?{

y?-=?speed;

}

}//?我的坦克得在自己的類里定義怎么移動(dòng)

public?void?moveDown()?{

if?(y??367)?{

y?+=?speed;

}

}

public?void?moveLeft()?{

if?(x??0)?{

x?-=?speed;

}

}

public?void?moveRight()?{

if?(x??365)?{

x?+=?speed;

}

}

}


網(wǎng)頁(yè)名稱:關(guān)于java坦克大戰(zhàn)實(shí)用代碼的信息
文章來(lái)源:http://weahome.cn/article/dogioei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部