本任务要求完成“特种部队”游戏开发,本游戏为枪战类游戏,包含玩家初始化、装配枪弹、双方对战等过程环节,在双方交战中,先打败对手一方获胜。以下通过三个阶段完成本实战任务
练习一一设计类结构并完成编码
张需求描述 玩家初始化。进入游戏后,玩家可根据提示信息录入个人昵称并选择对手,设置血量装配枪弹。装配机枪需要安装弹夹,弹夹需要上弹,为游戏双方装配枪弹之后让玩家持枪,战前准备完成,在控制台显示玩家信息 双方对战。每个回合交战双方依次向对方射击,输出信息“XX向XX开了一枪”。如果机枪未装配弹夹,则输出“枪械没有弹夹,放了一个空枪。”每发子弹的伤害值为 1~15的随机数击中对方后,对方将计算伤害值,损失与伤害值等值的血量。每个回合结束后,计算双方剩余血量,输出弹夹状态(子弹盈余/弹夹容量)、玩家信息,并可选择是否继续对战。如果双方有 一方血量为0,则结束游戏。
子弹类
public class Bullet { public void hitEnemy(Player enemy){ int hurt=(int)(Math.random()*20+1); enemy.damage(hurt); } }
弹夹类
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.println(">>>>>>>>>弹夹状态:"+surplus+"/"+capacity+"\n");
}
}
机枪类
//枪类
public class Gun {
private Clip clip;//弹夹
public Gun(){this(null);}
public Gun(Clip clip){
this.clip=clip;
}
//装弹夹
public void loadClip(Clip clip){
this.clip=clip;
}
//开枪
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=199;
private Gun gun;
public int getBlood() {
return blood;
}
public String getName() {
return name;
}
public Player(){}
public Player(String name){this(name,199);}
public Player(String name,int blood){
this.name=name;
this.blood=blood;
}
//持枪
public void holdGun(Gun gun){
this.gun=gun;
}
//射击
public void shootEnemy(Player enemy){
System.out.println(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+"已死亡");
}
}
//展示信息
public void showPlayer(){
boolean isHoldGun=gun!=null;
System.out.println("玩家信息:姓名:"+name+"血量:"+blood+"是否持枪:"+isHoldGun);
}
}
Main方法
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.println("请输入名称:");
String name= in.next();
System.out.println("1.雨潇声 2.清风 3.如梦令 请选择对战玩家(1~3):");
int num= in.nextInt();
switch (num){
case 1:
p1=new Player("雨潇声",400);
break;
case 2:
p1=new Player("清风",300);
break;
case 3:
p1=new Player("如梦令",350);
break;
default:
System.out.println("你输入有误!!!!!!!!");
break;
}
Player p2=new Player(name,250);
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.println("是否继续对战(输入y继续,其他键退出)?");
if (!(in.next().equals("y"))){
System.out.println("退出江湖");
return;
}
}
}
}