java 坦克大战画坦克_Java坦克大战部分:画出界面,敌人坦克,我的坦克,不出界,键盘事件【诗书画唱】...
含很多自己写的个理解和注释,想出的解决,建议,提示,注意事项等方法:
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坦克大战部分:画出界面,敌人坦克,我的坦克,不出界,键盘事件【诗书画唱】...相关推荐
- java飞机大战爆炸效果_Java飞机大战游戏设计与实现
1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...
- java字节输入与字符输入_Java中的字节输入出流和字符输入输出流
Java中的字节输入出流和字符输入输出流 下面哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...
- java坦克大战总体功能设计_java课程设计——坦克大战
##一.团队课程设计博客链接: ##二.个人负责模块或任务说明: ###模块:GUI设计(游戏面板,登录面板,主窗体,显示关卡面板) ##三.自己的代码提交记录截图 ##四.自己负责模块或任务详细说明 ...
- Java——【案例】Java坦克大战游戏[版本1]能控制移动的GUI界面坦克大战游戏
效果: 代码: 1.主方法 (调用.显示面板,画图形) //主方法,调用.显示面板,画图形 import javax.swing.*; import java.util.EventListener;p ...
- 怎么用java做全民飞机大战_Java飞机大战游戏设计与实现
1 概述 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程中的一些窗口类库. ...
- 基于Java语言在窗体上实现飞机大战小游戏
全套资料下载地址:https://download.csdn.net/download/sheziqiong/85594271 项目介绍 飞机大战:用 Java 语言在窗体上实现飞机大战小游戏,运行程 ...
- Java第十一课——多线程实现飞机大战
Java第十一课--多线程实现飞机大战 一.补充讲解一下线程 在第九课的基础上补充两点: 1.启动线程使用start()方法而不直接使用rin()方法,因为线程是一直重复执行的,调用run方法只会执行 ...
- Java Swing 经典小游戏《飞机大战》———— (四)碰撞检测 游戏状态与得分 玩家升级
前期回顾 Java Swing 经典小游戏<飞机大战>---- (一)获取素材,创建窗口,添加滚动背景,双缓冲 Java Swing 经典小游戏<飞机大战>---- (二)玩家 ...
- JAVA day10、11、12 飞机大战
1.小敌机(c) /*** 小敌机: 是飞行物,也是敌人**/ public class Airplane extends FlyingObject implements Enemy {int spe ...
最新文章
- linux复杂逻辑判断,20.5 shell脚本中的逻辑判断
- Ubuntu 进入单用户模式—修改启动项利器
- 不想帮人家写一辈子程序就要看的一本书
- 干货:4个小技巧助你搞定缺失、混乱的数据(附实例代码)
- Notepad++使用心得和特色功能介绍
- .Hbase批量导入数据应用
- 旅馆业治安管理信息系统
- echarts2获取series下的data数值
- [Android] Codec paramter
- stm32f407zgt6的2.2LCD实例1.2:LCD屏幕程序讲解之LCD驱动底层代码
- charles的简介、安装、破解及使用教程
- Hbase(二)hbase建表
- 部署LVS-DR集群
- SSA麻雀算法-LSTM-优化神经网络神经元个数-dropout-batch_size
- word转html (正常的html代码)
- 多多情报通:拼多多可以看到什么软件?拼多多的大数据分析软件是什么?
- printk()和printf()的比较
- 使用airodump-ng扫描网络
- 三菱PLC以太网模块FX3U-ENET-L的使用方法
- I. 知识图谱 应用案例 --- 美团
热门文章
- 网联到智能,上汽要靠R汽车打赢新一轮“卡位战”
- 澤火革 (易經大意 韓長庚)
- php源码 拼车网顺风车_php版某拼车网源码分享 微信拼车打车约车源码 微信拼车+手机拼车+双终端+发布平台...
- 空间直角坐标系、大地坐标系、平面坐标系、高斯平面直角坐标系
- 对人工智能芯片的一些看法
- 微软虚拟机转换(Virtual Machine Converter)解决方案加速器
- Android Studio 使用本地gradle的配置
- revit 二次开发之创建图纸和放置视图
- 惊!揭秘AI人工智能机器人自动写诗的奥秘!
- Pikachu漏洞平台练习