整体思路:
1.画出英雄,敌人,boss
2.规定英雄的移动速度,敌人和boss的移动速度及方向
实现代码:
处理图片类:
package ui;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
//处理图片的工具类
//工具类中会将项目中从重复使用的代码抽离出来 定义成工具方法 工具类中的方法 一般需要加static
//加static的目的
//static :公用的 所有的对象公用这一份
//static修饰不依赖对象 可以直接通过类名调用
public class App {
//读取指定位置上的图片
//BufferedImage Java中用来表示图片的类
//ImageIO java中的IO流 输送数据的管道
//App.class 找到App的路径
//getResourc 获取资源
public static BufferedImage getImg (String path){
try {
BufferedImage img= ImageIO.read(App.class.getResource(path));
//如果找到图片 即将图片返回
return img;
} catch (IOException e) {
//catch 如果找不到图片 就将图片返回
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return null;
}
}
设置飞行类的父类:
package ui;
import java.awt.image.BufferedImage;
//场景中的飞行类(父)
public class FlyObject {
BufferedImage img;
//飞行物的横纵坐标
int x;
int y;
//飞行物的宽度 高度
int w;
int h;
}
设置所有场上角色:
子弹类:
package ui;
public class Fire extends FlyObject{
public Fire(int hx,int hy){
/**
*
*/
img = App.getImg("/img/dart.png");
w = img.getWidth()/4;
h = img.getHeight()/4;
x = hx+50;
y = hy+15;
}
public void move(){
x += 30;
}
}
英雄类:
package ui;
import java.awt.event.KeyAdapter;
import java.awt.image.BufferedImage;
import ui.GamePanel;
public class Hero extends FlyObject {
int hp;//英雄机的血量
public Hero() {
//确定游戏开始时,英雄机显示的图片
img =App.getImg("/img/forward2.png");
//使用横纵坐标显示英雄机器在图片上的位置
x=10;
y=220;
//确定英雄机的大小
//使用图片的大小作为飞机的大小
w=img.getWidth();
h=img.getHeight();
//确定游戏开始时候血量
hp=3;
}
public void moveDown(){
/**
* 向下移动的方法
*/
y += 60;
}
public void moveUp(){
//向上移动的方法
y -= 60;
}
public void moveLeft(){
//向左移动的方法
x -= 60;
}
public void moveRight(){
//向右移动的方法
x += 60;
}
}
怪物类:
package ui;
import java.util.Random;
public class Ep extends FlyObject{
int sp;//敌人速度
int hp;
public Ep() {
//1定义随机数的类
Random rd= new Random();
//生成一个随机数来随机选取得图片[0,15] +1后[1,16]
int index =rd .nextInt(5)+1;
//三目运算符 条件表达式?值1:值2
img =App.getImg("/img/ep0"+index+".png");
//确定图片的位置
//确定图片的大小
w=img.getWidth();
h=img.getHeight();
//rd.nextInt(num) 表示在【0,num)之间随机生成一个整数
y=rd.nextInt(900-w);
x=1210;
//设置速度
sp=40-index;
hp = 3;
}
//敌机移动方法
//敌机向下移动
public void Move() {
x -=sp;
}
//敌机是否被子弹击中
public boolean shootBy(Fire f) {
boolean hit =y<f.y+f.h&&
y>=f.y-h &&
x<=f.x&&
x>=f.x-w;
return hit;
}
public boolean hitBy(Hero he) {
boolean hit =y<he.y+he.h&&
y>=he.y-h &&
x<=he.x&&
x>=he.x-w;
return hit;
}
}
boss类:
package ui;
import java.util.Random;
public class Boss extends FlyObject {
int hp;
int sp;//速度
int a=0;
public Boss() {
//Random rd= new Random();
img =App.getImg("/img/龙王.png");
//确定图片的位置
//确定图片的大小
w = 349/3*2;
h = 322/3*2;
//rd.nextInt(num) 表示在【0,num)之间随机生成一个整数
y = 700;
x = 1000;
sp=10;
hp = 60;
}
public void Move(){
if(a==0){
y -=sp;
if(y==0){
a=1;
}
}
if(a==1){
x -=50;
y +=35;
if(y==700){
a=2;
}
}
if(a==2){
y -=sp;
if(y==0){
a=3;
}
}
if(a==3){
x +=50;
y +=35;
if(y==700){
a=0;
}
}
}
public boolean shootBy(Fire f) {
boolean hit =y<f.y+f.h&&
y>=f.y-h &&
x<=f.x&&
x>=f.x-w;
return hit;
}
public boolean hitBy(Hero f) {
boolean hit =y<f.y+f.h&&
y>=f.y-h &&
x<=f.x&&
x>=f.x-w;
return hit;
}
}
爆炸类:
package ui;
public class Boom extends FlyObject{
int x;
int y;
//炸弹的生命
int life = 6;
boolean isLive = true;
public Boom(int x,int y){
this.x=x;
this.y=y;
}
//减少生命值
public void lifeDown(){
if(life>0){
life--;
}
else{
isLive = false;
}
}
}
射击游戏是java初学者用来练手的一个很好的小型项目