Java TEST

package com.sunzhiyan04;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.*;

import java.util.*;
public class Tank_1 extends JFrame{

Mypanel_1 jp1 = null;
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
// TODO Auto-generated method stub
Tank_1 tank = new Tank_1();
}
public Tank_1() {
// TODO Auto-generated constructor stub
jp1 = new Mypanel_1();
this.add(jp1);
this.addKeyListener(jp1);
this.setTitle("Tank_1");
this.setSize(300,300);
this.setLocation(200,200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}

}
class Mypanel_1 extends JPanel implements KeyListener{
//实例化一个我的坦克
Hero hero = null;
Vector<EnemtyTank> ets = new Vector<>();
int ensize = 3;
public Mypanel_1(){
hero = new Hero(10,10);
for(int i=0;i<ensize;i++ ){
EnemtyTank et = new EnemtyTank((i+1)*50,0);
ets.add(et);
}

//this.addKeyListener(this);
}

public void paint(Graphics g){
super.paint(g);
//设置背景为一块黑色的矩形运动
g.fillRect(0, 0, 400, 300);
//调用画坦克的方法
this.drawTank(hero.getX(), hero.getY(), g, hero.direct, hero.type);
//画子弹
if(hero.shot !=null){
g.draw3DRect(hero.getX(), hero.getY(), 10, 10, false);
}
for(int i=0;i<ets.size();i++){
this.drawTank(ets.get(i).getX(), ets.get(i).getY(), g, ets.get(i).direct, ets.get(i).type);
}

}
public void drawTank(int x,int y,Graphics g ,int direct,int type){
switch(type)
{
case 0:
g.setColor(Color.CYAN);
break;
case 1:
g.setColor(Color.BLUE);
break;
}
switch(direct)
{
case 0:
case 2:
//画出我的坦克(届时封装成成一个画坦克的方法)
//1.左边的矩形
g.fill3DRect(x,y, 5, 30, false);
//2.右边的矩形
g.fill3DRect(x+15,y, 5, 30, false);
//2.中间的矩形
g.fill3DRect(x+5,y+5, 10, 20, false);
//3.画出圆形
g.fillOval(x+5,y+10, 10, 10);
if(direct == 0){
//3.画出线
g.drawLine(x+10,y+15, x+10, y);
}else if(direct == 2){
//3.画出线
g.drawLine(x+10,y+15, x+10, y+30);
}
break;
case 1:
case 3:
//画出我的坦克(届时封装成成一个画坦克的方法)
//1.左边的矩形
g.fill3DRect(x,y,30, 5, false);
//2.右边的矩形
g.fill3DRect(x,y+15, 30, 5, false);
//2.中间的矩形
g.fill3DRect(x+5,y+5, 20, 10, false);
//3.画出圆形
g.fillOval(x+10,y+5, 10, 10);
if(direct == 1){
//3.画出线
g.drawLine(x+15,y+10, x+30, y+10);
}else if(direct == 3){
//3.画出线
g.drawLine(x+15,y+10, x, y+10);
}
break;
}

}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
//设置我坦克的方向
if(e.getKeyCode() == KeyEvent.VK_W){
//上
this.hero.direct = 0;
this.hero.moveUP();

}else if(e.getKeyCode() == KeyEvent.VK_D){
this.hero.direct = 1;
this.hero.moveRIGHT();
//右
}else if(e.getKeyCode() == KeyEvent.VK_S){
//下
this.hero.direct = 2;
this.hero.moveDOWN();
}else if(e.getKeyCode() == KeyEvent.VK_A){
//左
this.hero.direct = 3;
this.hero.moveLEFT();
}

if(e.getKeyCode() == KeyEvent.VK_J){
//判断玩家是否按下J键
this.hero.shotEnemy();
}
this.repaint();

}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}

}

//子弹类
class Shot implements Runnable
{
int x ;
int y;
int direct;
public Shot(int x,int y){
this.x = x;
this.y = y;
}
public void run(){

}

}
//坦克类
class Tank{
int x;
int y;
int direct;
int type;
int speed = 2;
public int getDirect() {
return direct;
}
public void setDirect(int direct) {
this.direct = direct;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}

public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public void moveUP(){
this.y -= this.speed;
}
public void moveRIGHT(){
this.x += this.speed;
}
public void moveDOWN(){
this.y += this.speed;
}
public void moveLEFT(){
this.x -= this.speed;
}

public Tank(int x,int y){
this.x = x;
this.y = y;
}

}

//定义我的坦克
class Hero extends Tank{
//子弹是坦克的一个属性
Shot shot = null;
public Hero(int x, int y) {
super(x, y);
// TODO Auto-generated constructor stub

}
//子弹发射方法
public void shotEnemy(){
switch(this.direct){
case 0:
shot = new Shot(this.x+10,this.y);
break;
case 1:
shot = new Shot(this.x+30,this.y+10);
break;
case 2:
shot = new Shot(this.x+10,this.y+30);
break;
case 3:
shot = new Shot(this.x,this.y+10);
break;
}

}

}
//定义我的坦克
class EnemtyTank extends Tank{

public EnemtyTank(int x, int y) {
super(x, y);
// TODO Auto-generated constructor stub
}

}

Java TEST

时间: 2024-11-06 09:56:04

Java TEST的相关文章

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 1 2 3 4 5 6 7 new Thread(new

由@NotNull 注解引出的关于Java空指针的控制(转)

Java 小技巧和在java应用避免NullPonintException的最佳方法 在java应用程序中,一个NullPonintException(空指针异常)是最好解决(问题)的方法.同时,空指针也是写健壮的顺畅运行的代码的关键.“预防好过治疗”这句话也同样适用于令人不爽的NullPonintException.通过应用防御性的编码技术和在遵守多个部分之间的约定,你可以再很大程度上避免NullPointException.下面的这些java小技巧可以最小化像!=null这种检查的代码.作为

Java注解(2)-注解处理器(运行时|RetentionPolicy.RUNTIME)

如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用.读取注解的工具叫作注解处理器.Java提供了两种方式来处理注解:第一种是利用运行时反射机制:另一种是使用Java提供的API来处理编译期的注解. 反射机制方式的注解处理器 仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.下面结合例子来说明这种方式的处理方法. Java中的反射API(如java.lang.Class.java.lang.reflect.Field等)都实现了接

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个

Java注解(1)-注解基础

注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式.注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样.那么,注解到底可以做什么呢? 1.注解的作用. 提供用来完整地描述程序所需要的信息,如编译期校验程序信息. 生成描述符文件,或生成新类的定义. 减轻编写"样板"代码(配置文件)的负担,可以使用注解自动生成. 更加干净易读的代码. 编译期类型检查. 2.Java提供的注解 Java5内置了一些原生的注

异常笔记--java编程思想

开一个新的系列,主要记一些琐碎的重要的知识点,把书读薄才是目的...特点: 代码少,概念多... 1. 基本概念 异常是在当前环境下无法获得必要的信息来解决这个问题,所以就需要从当前环境跳出,就是抛出异常.抛出异常后发生的几件事: 1.在堆上创建异常对象. 2.当前的执行路径中止                                          3. 当前环境抛出异常对象的引用.                                         4. 异常处理机制接

Java自学序言

Java自学序言 亲爱的自己和各位读者朋友: 您们好! 这是作者本人自学Java编程开发的一系列文章,不具有一定的权威性,也算是自己一个人的学习笔记和总结,希望自己通过博客的形式将我自己的学习效率得到提高.如自学的稳重存在不足或错误的地方希望广大的博客朋友们多多指教.本人在此不胜感激! 学习Java是一件很痛苦的事儿,我自己要想不断的去挑战一下自己,把自己大学所学的Java知识能够巩固起来.不断的去改正自己开发中的不足之处.如何来学习Java?如何来更好的掌握Java开发语言?这些都是我们要不断

接口测试(java+testng+ant+jenkins)第五篇 java二

1.数据代码分离,方便维护. 一般做法是将数据保存在excel,通过程序读取. 2.读取excel数据. 在D盘新建excel,A列放url,B列放参数. 新建class redExcel package com.lx; import java.io.File; import java.io.IOException; import jxl.*; import jxl.read.biff.BiffException; public class redExcel{ public static voi