坦克大戰(zhàn)源代碼應(yīng)該是個完整的項目吧。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、西市網(wǎng)站維護、網(wǎng)站推廣。
對于完整的帶項目配置文件的java源碼,按步驟操作即可:
File - Import - General
選擇Existing Projects into Workspace,選擇要導(dǎo)入的文件,點擊“finish",OK。
import?java.awt.*;
import?javax.swing.*;
public?class?Tank?extends?JFrame?{
mypane?mp=null;
Obj[]?objs=new?Obj[0];
public?Tank()?{
setTitle("坦克大戰(zhàn)");
setSize(800,600);
pro();
add(new?mypane(objs));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
//在這里添加鍵盤事件、鼠標(biāo)事件、讓坦克移動,修改objs數(shù)組對象讓他們移動
setVisible(true);
}
private?void?pro(){
Obj[]?tmp=new?Obj[objs.length+1];
System.arraycopy(objs,0,tmp,0,objs.length);
tmp[tmp.length-1]=new?Obj(1,1,0,1);
objs=tmp;
int?num=(int)(Math.random()*5)+1;
for(int?i=0;inum;i++){
int?x=(int)(Math.random()*getWidth())+1;
int?y=(int)(Math.random()*getHeight())+1;
int?dir=(int)(Math.random()*4);
Obj[]?dst=new?Obj[objs.length+1];
System.arraycopy(objs,0,dst,0,objs.length);
dst[dst.length-1]=new?Obj(x,y,1,dir);
objs=dst;
}
}
public?static?void?main(String[]?args)?{
new?Tank();
}
}
class?Obj{
int?x,y;//坦克坐標(biāo)
int?type;
int?dir;
public?Obj(int?x,int?y,int?type,int?dir){
this.x=x;
this.y=y;
this.type=type;
this.dir=dir;
}
}
class?mypane?extends?JPanel{
Obj[]?objs;
public?mypane(Obj[]?objs){
this.objs=objs;
}
public?void?paint(Graphics?g)?{
super.paint(g);
for(int?i=0;iobjs.length;i++){
Obj?obj=objs[i];
drawtank(obj.x,obj.y,?g,?obj.type,?obj.dir);
}
g.dispose();
}
public?void?drawtank(int?x,int?y,Graphics?g,?int?type,int?direct)?{
/*type?為坦克類型,敵方,我方*/
switch(type)?{
case?0://我方坦克,設(shè)置為紅色
g.setColor(Color.red);
break;
case?1://敵方坦克,設(shè)置為藍色
g.setColor(Color.blue);
break;
}
switch(direct)?{
case?0://坦克方向朝上
g.drawRect(0+x,?0+y,?5,?30);
g.drawRect(5+x,?5+y,?10,20);
g.drawRect(15+x,0+y,?5,30);
g.drawLine(10+x,?15+y,?10+10+x,?15+y);
break;
case?1://坦克方向朝右
g.drawRect(0+x,?0+y,?30,?5);
g.drawRect(5+x,?5+y,?20,?10);
g.drawRect(0+x,?15+y,?30,?5);
g.drawLine(15+x,?10+y,?30+15+x,?10+10+y);
break;
case?2://方向向下
g.drawRect(0+x,?0+y,?5,?30);
g.drawRect(5+x,?5+y,?10,20);
g.drawRect(15+x,0+y,?5,30);
g.drawLine(10+x,?15+y,?10+10+x,?30+15+y);
break;
case?3://方向向左
g.drawRect(0+x,?0+y,?30,?5);
g.drawRect(5+x,?5+y,?20,?10);
g.drawRect(0+x,?15+y,?30,?5);
g.drawLine(15+x,?10+y,?15+x,?10+10+y);
break;
}
}
}
Mypanel的? run方法里要調(diào)用repaint方法??? 否則你的repaint方法只會在keyPressed發(fā)生的時候才調(diào)用
修改一下兩個地方
(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();
}
/**
* 這個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 自動生成的 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();
}
/**
*?這個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?自動生成的?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;
}
}//?我的坦克得在自己的類里定義怎么移動
public?void?moveDown()?{
if?(y??367)?{
y?+=?speed;
}
}
public?void?moveLeft()?{
if?(x??0)?{
x?-=?speed;
}
}
public?void?moveRight()?{
if?(x??365)?{
x?+=?speed;
}
}
}
本文標(biāo)題:關(guān)于java90坦克大戰(zhàn)代碼的信息
網(wǎng)頁URL:http://aaarwkj.com/article42/dssjcec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、關(guān)鍵詞優(yōu)化、網(wǎng)站建設(shè)、網(wǎng)站營銷、動態(tài)網(wǎng)站、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)