javaoop特动部队练习源码

package com.javaex.gungame;
/**
 * 子弹类
 */
public class Bullet {
    
    public Bullet(){
    }
    //子弹击中敌人
    public void hitEnemy(Player enemy){
        int hurt = (int)(Math.random()*15+1);
        enemy.damage(hurt);
    }
}
package com.javaex.gungame;
/**
 * 弹夹类
 */
public class Clip {
    private Bullet[] magazine;//弹仓
    private int capacity = 30;//弹夹容量
    private int surplus=0;//子弹盈余
    public Clip(){
        this(30);
    }
    public Clip(int capacity){
        this.magazine = new Bullet[capacity];
        this.surplus = 0;
        
    }
    //装子弹
    public void pushBullet(Bullet bullet){
        if(surplus == capacity){
            System.out.println(">>>弹夹已满,请勿重复装弹!");
            return;
        }
        magazine[surplus] = bullet;
        surplus++;
        
    }
    //卸子弹
    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);
    }
}

package com.javaex.gungame;
/**
 * 枪类
 */
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(">>>枪械信息:无弹夹");
        }
    }
}

package com.javaex.gungame;

/**
 * 玩家类
 */
public class Player {
    private String name;
    private int blood = 100;
    private Gun gun;
    public int getBlood() {
        return blood;
    }
    public String getName() {
        return name;
    }
    public Player(){}
    public Player(String name){
        this(name,100);
    }
    public Player(String name,int blood){
        this.name = name;
        this.blood = blood;
    }

    /**
     * 持枪
     * @param gun
     */
    public void holdGun(Gun gun){
        this.gun = gun;
    }
    /**
     * 射击
     * @param enemy 对手
     */
    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);
    }

    /**
     * 装弹夹
     * @param clip
     */
    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);
    }
}
package com.javaex.gungame;
import java.util.Scanner;

/**
 * 测试类
 */
public class Test {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.println("欢迎来到特种部队!");
        System.out.println("********战前准备********");
        Player p1 =new Player();
        System.out.print("请录入昵称:");
        String name = in.next();
        System.out.print("1.雨潇生 2.醉清风 3.如梦令 请选择对战玩家(1~3):");
        int num = in.nextInt();
        switch(num){
            case 1:
                p1 = new Player("雨潇生",100);
                break;
            case 2:
                p1 = new Player("醉清风",100);
                break;
            case 3:
                p1 = new Player("如梦令",100);
                break;
            default:
                System.out.println("您的输入有误!");
                break;
        }
        Player p2 = new Player(name,100);

        Gun gun1 = new Gun();
        Gun gun2 = new Gun();
        //玩家持枪
        p1.holdGun(gun1);
        p2.holdGun(gun2);
        //装配弹夹、子弹
        Clip clip1 = new Clip();
        Clip clip2 = new Clip();
        for(int i = 1;i <= 30;i++){
            clip1.pushBullet(new Bullet());
            clip2.pushBullet(new Bullet());
        }
        p1.loadClip(clip1);
        p2.loadClip(clip2);
        //显示信息
        p1.showPlayer();
        p2.showPlayer();
        int i = 0;  //回合数
        System.out.println("********开始对战********");
        boolean isExit = false;   //是否退出游戏
        while(true){
            System.out.println("---第"+(i+1)+"回合---");
            i++;
            p1.shootEnemy(p2);
            if(p2.getBlood()==0) {
                System.out.println(p1.getName()+"获胜!");
                System.out.println("退出江湖!");
                return;
            }
            p2.shootEnemy(p1);
            if(p1.getBlood()==0) {
                System.out.println(p2.getName()+"获胜!");
                System.out.println("退出江湖!");
                return;
            }
            System.out.println();
            p1.showPlayer();
            p2.showPlayer();
            System.out.print("是否继续对战(输入y继续,其他键退出)?");
            if(!(in.next().equals("y"))){
                System.out.println("退出江湖!");
                return;
            }
        }
    }
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值