欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简易的吃鸡小游戏

程序员文章站 2022-05-07 22:41:27
...

学习了面向对象,练习一个简易的吃鸡小游戏,仅仅只有双方射击的过程……

我们具体的分析如下:

玩家 Player

  • 姓名 String name
  • 血量 int blood
  • 枪械 Gun gun
  • 持枪 void holdGun(Gun gun)
  • 开枪 void shootEnemy(Player enemy)  如果没枪械则提示
  • 装弹夹 void loadClip(Clip clip)
  • 受伤 void damage(int hurt)   如果为0则提示
  • 显示信息 void showPlayer()

枪械 Gun

  • 弹夹 Clip clip
  • 装弹夹 void loadClip(Clip clip)
  • 开枪 void shootEnemy(Player enemy)    如果没有弹夹则提示;如果没有子弹则提示
  • 显示信息 void showGun()

弹夹 Clip

  • 容量 int capacity
  • 余量 int surplus
  • 弹仓 Bullet[] magazine
  • 装子弹 void pushBullet(Bullet bullet)    如果已满则提示
  • 卸子弹 Bullet popBullet()    如果已空则提示 并返回null
  • 显示信息 void showClip()

子弹 Bullet

  • 伤害值 hurt
  • 击中 void hitEnemy(Player enemy)

 

类图:

 简易的吃鸡小游戏

关系分析:

简易的吃鸡小游戏

 我们先写出大概框架,然后再具体分析。

 在弹夹中调用子弹;在枪中调用弹夹;在枪械中调用弹夹;在玩家中调用枪械。从而将各个类串起来……

下面我们来写细节方面的东西:

子弹:

public class Bullet {
	private int hurt=10;
	private Bullet(){}
	public Bullet(int hurt){
		this.hurt=hurt;
	}
	public void hitEnemy(Player enemy){
		enemy.damage(hurt);
	}
}

 弹夹:

public class Clip {
	private Bullet[] magazine;
	private int capacity=30;//总量
	private int surplus;//余量
	public Clip(){
		this(30);
	}
	public Clip(int capacity){
		this.magazine=new Bullet[capacity];
		this.surplus=0;
		showClip();
//		this.capacity=capacity;
	}
	public void pushBullet(Bullet bullet){
		if(surplus==capacity){
			System.out.println(">>>弹夹已满,请勿重复装弹!");
			return;
		}
		magazine[surplus]=bullet;
		surplus++;
		showClip();
	}
	public Bullet popBullet(){
		if(surplus==0){
			System.out.println(">>>弹夹已空,无法取出子弹");
			return null;
		}
		Bullet bullet=magazine[surplus-1];
		magazine[surplus-1]=null;
		surplus--;
		showClip();
		return bullet;
	}
	public void showClip(){
		System.out.printf(">>>弹夹状态:%d/%d\n",surplus,capacity);
	}
}

 枪械:

public class Gun {
	private Clip clip;
	public Gun(){
		this(null);
	}
	public Gun(Clip clip){//指定一个弹夹
		this.clip=clip;
		showGun();
	}
	public void loadClip(Clip clip){
		this.clip=clip;
		showGun();
	}
	public void shootEnemy(Player enemy){
        if(clip==null){
            System.out.println(">>>枪械没有弹夹,放了一个空枪!");
            return;
        }
        Bullet bullet=clip.popBullet();
        if(bullet==null){
			System.out.println(">>>枪械弹夹已空,放了一个空枪!");
			return;
        }
        bullet.hitEnemy(enemy);
	}
	public void showGun(){
		if(clip!=null){
			System.out.println(">>>枪械信息:有弹夹");
		}else{
			System.out.println(">>>枪械信息:无弹夹");
		}
	}
}

玩家:

public class Player {
	private String name;
	private int blood=100;
	private Gun gun;
	public Player(){}
	public Player(String name){
		this(name,100);
	}
	public Player(String name,int blood){
		this.name=name;
		this.blood=blood;
		showPlayer();
	}
	public void holdGun(Gun gun){
		this.gun=gun;
		showPlayer();
	}
	public void shootEnemy(Player enemy){
        System.out.printf("%s向%s开了一枪\n",this.name,enemy.name);
        if(gun==null){
            System.out.println(">>>"+name+"没有枪,无法进行射击!");
            return;
        }
        gun.shootEnemy(enemy);
    }
	public void loadClip(Clip clip){
		if(gun==null){
            System.out.println(">>>"+name+"没有枪,无法装弹夹!");
            return;
        }
		gun.loadClip(clip);
	}
	public void damage(int hurt){
        if(blood==0){
            System.out.println(">>>"+name+"已死亡,请勿鞭尸!");
            return;
        }
        blood-=hurt;
        if(blood<=0){
            blood=0;
            System.out.println(">>>"+name+"已经死亡!");
        }
        showPlayer();
    }
	public void showPlayer(){
        boolean isHoldGun = gun!=null;
        System.out.printf(">>>玩家信息: 姓名=%s,血量=%d,持枪=%b\n",name,blood,isHoldGun);
    }
}

 吃鸡(主函数):

public class ChiJi {
	public static void main(String[] args) {
		Player p1=new Player("老张",100);
        Player p2=new Player("老王",100);

        Gun gun=new Gun();
        p1.holdGun(gun);
        Clip clip=new Clip();
        for(int i=1;i<=30;i++){
            clip.pushBullet(new Bullet(12));
        }
        p1.loadClip(clip);
        for(int i=1;i<=15;i++){
            p1.shootEnemy(p2);
        }
				
	}
}

特别的,我们需要实时关注玩家的状态,所以要在 每次操作之后,调用show()函数;

结果:

>>>玩家信息: 姓名=老张,血量=100,持枪=false
>>>玩家信息: 姓名=老王,血量=100,持枪=false
>>>枪械信息:无弹夹
>>>玩家信息: 姓名=老张,血量=100,持枪=true
>>>弹夹状态:0/30
>>>弹夹状态:1/30
>>>弹夹状态:2/30
>>>弹夹状态:3/30
>>>弹夹状态:4/30
>>>弹夹状态:5/30
>>>弹夹状态:6/30
>>>弹夹状态:7/30
>>>弹夹状态:8/30
>>>弹夹状态:9/30
>>>弹夹状态:10/30
>>>弹夹状态:11/30
>>>弹夹状态:12/30
>>>弹夹状态:13/30
>>>弹夹状态:14/30
>>>弹夹状态:15/30
>>>弹夹状态:16/30
>>>弹夹状态:17/30
>>>弹夹状态:18/30
>>>弹夹状态:19/30
>>>弹夹状态:20/30
>>>弹夹状态:21/30
>>>弹夹状态:22/30
>>>弹夹状态:23/30
>>>弹夹状态:24/30
>>>弹夹状态:25/30
>>>弹夹状态:26/30
>>>弹夹状态:27/30
>>>弹夹状态:28/30
>>>弹夹状态:29/30
>>>弹夹状态:30/30
>>>枪械信息:有弹夹
老张向老王开了一枪
>>>弹夹状态:29/30
>>>玩家信息: 姓名=老王,血量=88,持枪=false
老张向老王开了一枪
>>>弹夹状态:28/30
>>>玩家信息: 姓名=老王,血量=76,持枪=false
老张向老王开了一枪
>>>弹夹状态:27/30
>>>玩家信息: 姓名=老王,血量=64,持枪=false
老张向老王开了一枪
>>>弹夹状态:26/30
>>>玩家信息: 姓名=老王,血量=52,持枪=false
老张向老王开了一枪
>>>弹夹状态:25/30
>>>玩家信息: 姓名=老王,血量=40,持枪=false
老张向老王开了一枪
>>>弹夹状态:24/30
>>>玩家信息: 姓名=老王,血量=28,持枪=false
老张向老王开了一枪
>>>弹夹状态:23/30
>>>玩家信息: 姓名=老王,血量=16,持枪=false
老张向老王开了一枪
>>>弹夹状态:22/30
>>>玩家信息: 姓名=老王,血量=4,持枪=false
老张向老王开了一枪
>>>弹夹状态:21/30
>>>老王已经死亡!
>>>玩家信息: 姓名=老王,血量=0,持枪=false
老张向老王开了一枪
>>>弹夹状态:20/30
>>>老王已死亡,请勿鞭尸!
老张向老王开了一枪
>>>弹夹状态:19/30
>>>老王已死亡,请勿鞭尸!
老张向老王开了一枪
>>>弹夹状态:18/30
>>>老王已死亡,请勿鞭尸!
老张向老王开了一枪
>>>弹夹状态:17/30
>>>老王已死亡,请勿鞭尸!
老张向老王开了一枪
>>>弹夹状态:16/30
>>>老王已死亡,请勿鞭尸!
老张向老王开了一枪
>>>弹夹状态:15/30
>>>老王已死亡,请勿鞭尸!

那么我们一个简单的吃鸡游戏就写完了,我们到时候也可以自己加一点别的性能……

 

相关标签: 面向对象编程