含很多自己写的个理解和注释,想出的解决,建议,提示,注意事项等方法:

package tankeGame;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import javax.swing.*;

import java.util.*;

//这个来做绘制内容,发射子弹一类的操作

//让这个类实现键盘点击的接口

public class caoZuoPaintFangFaDiaoYong extends

JPanel implements KeyListener {

//在构造法方法里实例化我方坦克

//arraylist:存储任意类型,内容长度任意,有下标

Vector diRentankeJiHe=new Vector();

mytankeYiDongFangFa mytankeYiDongFangFa=null;

public caoZuoPaintFangFaDiaoYong(){

//个人理解:mytankeYiDongFangFa类的这个构造方法

//mytankeYiDongFangFa(int x, int y,

//int fangxiang)中用了super(x, y, fangxiang);(因为子类

//继承了父类的mytankeYiDongFangFa(int x, int y,

//int fangxiang)方法,所以子类中用

//super(x, y, fangxiang)代替

//父类中这个构造方法中的具体方法内容

//,就可以这里用了。

mytankeYiDongFangFa=new mytankeYiDongFangFa(150,440,0);

for(int i=0;i<5;i++){

//diRentanke类中也有public diRentanke(int x, int y, int fangXiang)

//用来传值的方法

//Random Random=new Random();

//int num=10+Random.nextInt (100);

//,那么10<=num<10+100

diRentanke diRentanke=new diRentanke(100*i+90, 0, 2);

//因为敌人坦克本身有宽高所以在100*i上要+90来调整

//x轴方向位置,不然就会第一量有部分看不见,超出范围。

diRentankeJiHe.add(diRentanke);

}

}

//绘制的方法

int fangXiang2=0;

//个人理解:“fangXiang2”为“leiXing”

//,其实也可以统一把int类型改成String的类型,

//然后再在swich判断中传入"left"之类的,这样代码更明确

//,容易懂等。放在paint方法前是为了,使用键盘事件后,

//fangXiang2改变,进而用repaint来重新执行一遍paint方法中内容时

//huiZhitanke(g,mytankeYiDongFangFa.x,

//mytankeYiDongFangFa.y,0,fangXiang2)

//中fangXiang2会改变,进而用huiZhitanke方法,

//在页面显示对应方向的坦克图形

//来实现

//“坦克方向会变”的效果。这里的坦克是自己绘制的,

//如果用图片

//,就是换加载的对应方向的坦克图片,

//huiZhitanke方法中的内容进行改变即可。

public void paint(Graphics g){

g.setColor(Color.black);

g.fillRect(0,0,600,600);

g.setColor(Color.green);

//开始默认用huiZhitanke方法在界面绘制向上的坦克:

huiZhitanke(g,mytankeYiDongFangFa.x,

mytankeYiDongFangFa.y,0,fangXiang2);

//遍历刚才存入的5个敌方坦克

for(int i=0;i

diRentanke diRentanke=diRentankeJiHe.get(i);

huiZhitanke(g,diRentanke.x,diRentanke.y,

1,diRentanke.fangxiang);

}

}

//封装坦克的方法:

//1.画笔   2.x  3.y  4.坦克的类型  5.坦克的方向

public void huiZhitanke(Graphics g,int x,int y,

int leiXing,int fangXiang){

//在这个方法里既可以绘制我方坦克,也可以绘制

//敌方tank,tank的类型就是判断是绘制什么颜色的坦克

switch(leiXing){

case 0:

//画我方坦克:

g.setColor(Color.green);break;

case 1:

g.setColor(Color.yellow);break;

}

switch(fangXiang){

//根据fangXiang值(的不同),

//画出对应的fangXiang值(的不同方向)的坦克

case 0://向上坦克图形:

g.fillRect(x, y, 10,30);

g.fillRect(x+10, y-10, 10,30);

g.fillRect(x+20, y, 10,30);

break;

case 1://向右坦克图形:

g.fillRect(x, y, 30,10);

g.fillRect(x+10, y+10, 30,10);

g.fillRect(x, y+20, 30,10);

break;

case 2://向下坦克图形:

g.fillRect(x, y, 10,30);

g.fillRect(x-10, y+10, 10,30);

g.fillRect(x-20, y, 10,30);

break;

case 3://向左坦克图形:

g.fillRect(x, y, 30,10);

g.fillRect(x-10, y+10, 30,10);

g.fillRect(x, y+20, 30,10);

break;

}

}

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

}

@Override

//键盘按下的事件

public void keyPressed(KeyEvent e) {

//点击W键

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

//Graphics g = null;

//huiZhitanke(g,mytankeYiDongFangFa.x,

//mytankeYiDongFangFa.y,0,0);

//switch(0);

fangXiang2=0;

mytankeYiDongFangFa.yiDongFangFa(0);

}

if(e.getKeyCode()==KeyEvent.VK_S){

//Graphics g = null;

//huiZhitanke(g,mytankeYiDongFangFa.x,

//mytankeYiDongFangFa.y,0,1);

fangXiang2=2;

mytankeYiDongFangFa.yiDongFangFa(2);

}

if(e.getKeyCode()==KeyEvent.VK_A){

fangXiang2=3;

mytankeYiDongFangFa.yiDongFangFa(3);

}

if(e.getKeyCode()==KeyEvent.VK_D){

fangXiang2=1;

mytankeYiDongFangFa.yiDongFangFa(1);

}

this.repaint();

}

@Override

public void keyReleased(KeyEvent e) {

// TODO Auto-generated method stub

}

}

package tankeGame;

public class diRentanke extends tankeFuLei{

//敌方坦克类也是继承坦克父类

public diRentanke(int x, int y, int fangXiang) {

super(x, y, fangXiang);

}

}

package tankeGame;

import javax.swing.*;

public class mains extends JFrame{

public static void main(String[] args) {

new mains();

}

public  mains(){

this.setLayout(null);

this.setSize(600,600);

this.setLocationRelativeTo(null);

caoZuoPaintFangFaDiaoYong caoZuo=new caoZuoPaintFangFaDiaoYong();

caoZuo.setBounds(0,0,600,600);

this.addKeyListener(caoZuo);

this.add(caoZuo);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

}

package tankeGame;

public class mytankeYiDongFangFa extends tankeFuLei{

//我方坦克类继承坦克父类

public mytankeYiDongFangFa(int x, int y, int fangXiang) {

super(x, y, fangXiang);

}

//点击移动的方法

public void yiDongFangFa(int fangxiang){

//if(x<=600&&y<=600){

switch(fangxiang){

//判断这个方向,方向是谁就移动谁

case 0:

if(y>=10){

this.y-=this.suDu;}break;

//个人理解:

//如果“}”把break包住,y>=10时

//,就会执行case 1的情况,会向右移动

//x<=550等也类似

//550等数值是在页面宽600,长600或

//最初始位置(0,0)数值上调整得来的(加或减坦克的宽或长),因为

//坦克存在宽和长,所以要调整数值等,别的地方也是依次类推。

case 1:

if(x<=550){

this.x+=this.suDu;}break;

case 2:

if(y<=520){

this.y+=this.suDu;}break;

case 3:if(x>=10){

this.x-=this.suDu;}break;

}

//}

}

}

package tankeGame;

//x,y

public class tankeFuLei {//父类

//x轴,y轴,方向,速度,生命

int x,y,fangxiang;

int suDu=15;//坦克默认移动的速度为15px

boolean shengMing=true;//每个坦克默认都是存在的

public tankeFuLei(int x,int y,int fangXiang){

this.x=x;

this.y=y;

this.fangxiang=fangXiang;

}

}

java 坦克大战画坦克_Java坦克大战部分:画出界面,敌人坦克,我的坦克,不出界,键盘事件【诗书画唱】...相关推荐

  1. java飞机大战爆炸效果_Java飞机大战游戏设计与实现

    1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...

  2. java字节输入与字符输入_Java中的字节输入出流和字符输入输出流

    Java中的字节输入出流和字符输入输出流 下面哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...

  3. java坦克大战总体功能设计_java课程设计——坦克大战

    ##一.团队课程设计博客链接: ##二.个人负责模块或任务说明: ###模块:GUI设计(游戏面板,登录面板,主窗体,显示关卡面板) ##三.自己的代码提交记录截图 ##四.自己负责模块或任务详细说明 ...

  4. Java——【案例】Java坦克大战游戏[版本1]能控制移动的GUI界面坦克大战游戏

    效果: 代码: 1.主方法 (调用.显示面板,画图形) //主方法,调用.显示面板,画图形 import javax.swing.*; import java.util.EventListener;p ...

  5. 怎么用java做全民飞机大战_Java飞机大战游戏设计与实现

    1 概述 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程中的一些窗口类库. ...

  6. 基于Java语言在窗体上实现飞机大战小游戏

    全套资料下载地址:https://download.csdn.net/download/sheziqiong/85594271 项目介绍 飞机大战:用 Java 语言在窗体上实现飞机大战小游戏,运行程 ...

  7. Java第十一课——多线程实现飞机大战

    Java第十一课--多线程实现飞机大战 一.补充讲解一下线程 在第九课的基础上补充两点: 1.启动线程使用start()方法而不直接使用rin()方法,因为线程是一直重复执行的,调用run方法只会执行 ...

  8. Java Swing 经典小游戏《飞机大战》———— (四)碰撞检测 游戏状态与得分 玩家升级

    前期回顾 Java Swing 经典小游戏<飞机大战>---- (一)获取素材,创建窗口,添加滚动背景,双缓冲 Java Swing 经典小游戏<飞机大战>---- (二)玩家 ...

  9. JAVA day10、11、12 飞机大战

    1.小敌机(c) /*** 小敌机: 是飞行物,也是敌人**/ public class Airplane extends FlyingObject implements Enemy {int spe ...

最新文章

  1. linux复杂逻辑判断,20.5 shell脚本中的逻辑判断
  2. Ubuntu 进入单用户模式—修改启动项利器
  3. 不想帮人家写一辈子程序就要看的一本书
  4. 干货:4个小技巧助你搞定缺失、混乱的数据(附实例代码)
  5. Notepad++使用心得和特色功能介绍
  6. .Hbase批量导入数据应用
  7. 旅馆业治安管理信息系统
  8. echarts2获取series下的data数值
  9. [Android] Codec paramter
  10. stm32f407zgt6的2.2LCD实例1.2:LCD屏幕程序讲解之LCD驱动底层代码
  11. charles的简介、安装、破解及使用教程
  12. Hbase(二)hbase建表
  13. 部署LVS-DR集群
  14. SSA麻雀算法-LSTM-优化神经网络神经元个数-dropout-batch_size
  15. word转html (正常的html代码)
  16. 多多情报通:拼多多可以看到什么软件?拼多多的大数据分析软件是什么?
  17. printk()和printf()的比较
  18. 使用airodump-ng扫描网络
  19. 三菱PLC以太网模块FX3U-ENET-L的使用方法
  20. I. 知识图谱 应用案例 --- 美团

热门文章

  1. 网联到智能,上汽要靠R汽车打赢新一轮“卡位战”
  2. 澤火革 (易經大意 韓長庚)
  3. php源码 拼车网顺风车_php版某拼车网源码分享 微信拼车打车约车源码 微信拼车+手机拼车+双终端+发布平台...
  4. 空间直角坐标系、大地坐标系、平面坐标系、高斯平面直角坐标系
  5. 对人工智能芯片的一些看法
  6. 微软虚拟机转换(Virtual Machine Converter)解决方案加速器
  7. Android Studio 使用本地gradle的配置
  8. revit 二次开发之创建图纸和放置视图
  9. 惊!揭秘AI人工智能机器人自动写诗的奥秘!
  10. Pikachu漏洞平台练习