java实现一个简单的射击游戏2

整体思路:

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初学者用来练手的一个很好的小型项目

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
实现功能:(1)客户端开机自动琐定,输入帐号、密码后进行验证登陆并开始计费。或控制端远程解锁上机。 (2).控制端能够对上网的客户端进行远程控制,比如:远程关机、注销、锁定、远程结帐后又自动锁定计算机等功能。 (3)能对客户端发送消息。 (4)客户端在上机过程中能够随时查看消费状态,比如:预缴金额、上机时间、上机金额等。 MySql表结构: desc user; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | uid | varchar(30) | NO | PRI | 0 | | | password | varchar(30) | NO | | 0 | | | balance | double | NO | | 0 | | | isvip | int(2) | NO | | 0 | | +----------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) desc userhistory; +-----------+-------------+------+-----+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+-------------------+-------+ | cid | varchar(30) | NO | | 0 | | | uid | varchar(30) | NO | MUL | 0 | | | isvip | int(2) | NO | | 0 | | | logintime | timestamp | NO | | CURRENT_TIMESTAMP | | | usetime | varchar(30) | NO | | 00:00:00 | | | cost | double | NO | | 0 | | +-----------+-------------+------+-----+-------------------+-------+ 6 rows in set (0.00 sec) 涉及知识点:swing,socket和serverSocket,jdbc,多线程,心跳包建立长连接,通信消息封装为xml。。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皇正经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值