java坦克大战代码简单的简单介绍

看了马士兵老师的坦克大战java程序,想按照自己的思路动手编一下,结果界面背景设置不了,

java 作图 不一定要继承JFrame或者Frame,但是所有的组件必须放到顶层容器,Java Swing 有三种顶层容器

创新互联致力于互联网网站建设与网站营销,提供网站设计、成都网站建设、网站开发、seo优化、网站排名、互联网营销、微信平台小程序开发、公众号商城、等建站开发,创新互联网站建设策划专家,为不同类型的客户提供良好的互联网应用定制解决方案,帮助客户在新的全球化互联网环境中保持优势。

JFrame:用来设计类似于Windows系统中的窗口形式的应用程序。

·JDialog:和JFrame类似,只不过JDialog是用来设计对话框。

·JApplet:用来设计可以在嵌入在网页中的Java小程序。

而且你的代码 Kosese001既然继承了JFrame 那么他的构造就是个JFrame ,你下面又new JFrame("坦克大战");这样何必继承,直接在构造里面实现操作就可以把Kosese001中,

你的背景色没有显示出来,是由于JFrame 是顶层容器,它默认的布局会设置它的背景色,除非你在前面 加上 jfrmMain.setLayout(null);使得布局变成空布局,下面的jfrmMain.getContentPane().setBackground(Color.green); 才会生效,或者你可以通过设置JFrame上组件的背景色来完成同样的效果 比如 mypaint = new MyPaint();

mypaint.setBackground(Color.green); 还有啥不懂的 可以问我。

在java编写坦克大战游戏时,如何判断两辆坦克不能重叠运动,有什么简单的算法

对于这个小游里面的类的抽象很重要,对坦克及其它类我在这里面就不定义了,其实J2SE的API里面就有关于图形重叠的算法,就是这个intersects()方法,具体伪代码如下:

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;

}

您可以根据自己的实际需求来改写,在我的百度文库里面有关于“坦克大战”的所有代码,如果有需要我可以把代码发给你,可以通过百度HI联系我。

JAVA 坦克大战

import java.awt.*;

import javax.swing.*;

public class Tank extends JFrame {

mypane mp=null;

Obj[] objs=new Obj[0];

public Tank() {

setTitle("坦克大战");

setSize(800,600);

pro();

add(new mypane(objs));

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLocationRelativeTo(null);

//在这里添加键盘事件、鼠标事件、让坦克移动,修改objs数组对象让他们移动

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;//坦克坐标

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://我方坦克,设置为红色

g.setColor(Color.red);

break;

case 1://敌方坦克,设置为蓝色

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;

}

}

}

JAVA坦克大战,这段代码为什么子弹的坐标在变,却不能repaint,但是按下任意键盘的建却重绘了呢?

Mypanel的  run方法里要调用repaint方法    否则你的repaint方法只会在keyPressed发生的时候才调用

修改一下两个地方

(1)

// 键盘获取事件的函数

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;

// 键盘获取事件的函数

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;

}

}

}

java课程设计创意小游戏

① 求Java课程设计—小游戏(含源代码)

//hi./srxboys/item/8ce4743da1adc991c2cf29c4

Tank——坦克大战(简洁版)源代码-------(此文档是自己在韩顺平教程总结而来)

*功能:1.防止敌人的坦克重叠运动

*(决定把判断是否碰撞的函数写到EnemyTank类)

*2.可以分关

*2.1(做一个开始的Panel,它是一个空的)

*2.2开始字体闪烁

*3.可以在玩游戏的时候,暂停和继续

*3.1当用户点击暂停时,子弹的速度和坦克速度设为0,并让坦克的方向

*不要发生变化。

*4.可以记录玩家的成绩

*4.1用文件流的方式(小游戏)[大游戏是用的数据库cs,bs结构,三国]

*4.2单写一个记录类,完成对玩家的记录

*4.3先完成保存共击毁了多少辆敌人坦克的功能

*4.4存盘退出游戏,可以记录当时的敌人的坦克坐标,并可以恢复

*5.java如何操作声音文件

*/

② JAVA课程设计,求个能用eclipse实现小游戏或小程序的源代码。感激不尽

你自己来去下自载吧,这里面都有 //oschina/project/java

③ 用JAVA编写一个小游戏

前天写的猜数字游戏,yongi控制猜测次数,有详细解析,用黑窗口可以直接运行,

我试验过了,没问题

import javax.swing.Icon;

import javax.swing.JOptionPane;

public class CaiShuZi4JOptionPane {

/**

* @param args

*/

public static void main(String[] args) {

Icon icon = null;

boolean bl = false;

int put = 0;

int c = (int) (((Math.random())*100)+1); //获取一个1-100的随机数

System.out.println("你获取的随机数是:"+c); //打印你的随机数字

String str1 = (String) JOptionPane.showInputDialog(null,"请输入你的猜测数字(1-100): ","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入"); //第一次输入你的猜测数字

if(str1==null){

JOptionPane.showMessageDialog(null, "你已经取消了本次游戏"); //如果你点取消那么本次游戏结束

}else{

bl = num(str1); //判断是输入的是不是数字或者是整数

if(true==bl){ //如果是数字的话进入与随机数比较的程序

System.out.println("你输入的数字是:"+str1); //打印你输入的数字

put = Integer.valueOf(str1);

for(int i = 4;i 0;i--){ //i是你可以猜测的次数

if(put==c){

JOptionPane.showMessageDialog(null, "恭喜你猜对了,正确答案是:"+c+"。"); //如果你猜对了就直接结束循环

break;

}else if(putc){ //如果输大了就让你再次从新输入

str1 = (String) JOptionPane.showInputDialog(null,"你的输入过大。你还有"+i+"次机会,请重新输入: ","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入");

if(str1==null){

JOptionPane.showMessageDialog(null, "你已经取消了本次输入");

break;

}else{

bl =num(str1);

if(true==bl){

put = Integer.valueOf(str1);

}else{

JOptionPane.showMessageDialog(null, "你的输入不正确,请重新输入");

}

}

}else if(putc){ //如果你输小了也让你从新输入

str1 = (String) JOptionPane.showInputDialog(null,"你的输入过小。你还有"+i+"次机会,请重新输入: ","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入");

if(str1==null){

JOptionPane.showMessageDialog(null, "你已经取消了本次输入");

break;

}else{

bl =num(str1);

if(true==bl){

put = Integer.valueOf(str1);

}else{

JOptionPane.showMessageDialog(null, "你的输入不正确,请重新输入");

}

}

}

}

}else if(bl==false){ //这个 是你第一次如果填写的不是数字的话也会结束本次游戏

JOptionPane.showMessageDialog(null, "请您下次按要求填写。本次游戏结束");

}

if(true==bl c!=put){ //如果你i次都没猜对,那么就直接告诉你这个数十什么

JOptionPane.showMessageDialog(null, "很遗憾你没能猜对,这个数字是:"+c+".");

}

}

}

public static boolean num(String value){ //一个静态方法,判断你输入的是不是数字

try {

Integer.parseInt(value);

return true;

} catch (Exception e) {

return false;

}

}

}

④ 用java制作一个小游戏 教学

static Scanner in =new Scanner(System.in);

public static int aaa(){

int c = 0;

while(true){

try {

if(c999c10000){

break;

}else{

// System.out.println("请输入4位整数");

c= in.nextInt();

if(c999c10000){

break;

}else{

System.out.println("输入有误,请重新输入4位整数");

}

}

} catch (Exception e) {

System.out.println("请输入整数");

c= in.nextInt();

}

}

//in.close();

return c;

}

public static void cai(){

//Scanner sa =new Scanner(System.in);

int haoma=(int)(Math.random()*10000);

if(haoma999)

{

haoma = Integer.parseInt(String.valueOf(haoma)+"0");

}

System.out.println(haoma);

System.out.println("请输入一位4位整数");

int aa = 0;

while(true){

aa= aaa();

String pd=String.valueOf(aa);

if(pd.length()!=4){

aa = aaa();

}else{

break;

}

}

while(true){

if(aa==haoma){

System.out.println("你猜对了,可以去买彩票了");

}else{

System.out.println("抱歉 , 你猜错了");

}

System.out.println("是否继续1继续 其他结束");

try {

int ss = in.nextInt();

if(ss==1){

cai();

}else{

break;

}

} catch (Exception e) {

in.close();

break;

}

}

}

public static void main(String[] args) {

System.out.println("欢迎来到猜号小游戏");

cai();

System.out.println("over");

}

⑤ 想做一个java小游戏 谁能给几个创意啊 注意 是创意!!!!! 不是已有的有创意的小游戏

比如有东西扔过来,选择吃掉或者躲开,考反应吧。

⑥ 急求java课程设计,内容可以是小游戏的,如(迷宫,计算器,停车场之恋的),要能运行,谢谢

俄罗斯方块,贪吃蛇。推箱子。

⑦ 求JAVA期末课程设计,要那种开发的小项目软件。可以是像记事本那种,也可以是小游戏那种。

网上搜不到的一般是不可共享的资源,建议去图书馆找本专门针对课程设计的书,里面的资料很丰富,你可以照着做一下,并作功能上适当的增减,这样网上就很难找到了


文章标题:java坦克大战代码简单的简单介绍
网页URL:http://bzwzjz.com/article/hjhcig.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 网站建设方案 成都网站建设 网站建设开发 成都网站建设公司 外贸营销网站建设 成都商城网站建设 成都企业网站制作 企业网站设计 手机网站制作 手机网站建设套餐 重庆网站制作 成都网站设计 成都网站设计 成都定制网站建设 网站设计制作报价 成都营销网站制作 网站制作 网站建设公司 成都网站建设 教育网站设计方案 手机网站制作 app网站建设