简易的吃鸡小游戏
程序员文章站
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
>>>老王已死亡,请勿鞭尸!
那么我们一个简单的吃鸡游戏就写完了,我们到时候也可以自己加一点别的性能……
上一篇: parse_url返回值的有关问题
下一篇: JAVA-面向对象(学习总结第二篇)