一个极其简化的控制台回合游戏

来源:互联网 发布:斯基德莫尔学院 知乎 编辑:程序博客网 时间:2024/05/22 16:10

首先定义一个接口类:

interface Fightable

{
     public final double MAX=20;//提示血液值
void win();//描述战斗者获胜后的行为
int injure(int x);//描述战斗者受伤后的行为 血量减少,并且血量过低提示

}

然后定义一个非抽象的类Warrior  实现这个接口

class Warrior implements Fightable
{
String name;
int experience=0;//战士获胜后经验值会增加
int level=1;
int  blood=200;//战斗者的血液值 受伤后血液值会减少x
    public int injure(int x)
{
       blood=blood-x;
  System.out.println(name+"血量值减少"+x);
  if(blood<=MAX)
  {
         System.out.println(name+"血量过低");
  }
  
  return blood;
}
   public void setName(String name)
   {
this.name=name;
   }
   public String getName()
   {
return name;
   }
public int getExperience()
{
return experience;
}


public void setBlood(int blood)
{
this.experience=experience;
}
public int getBlood()
{
return blood;
}
public void win()
//获胜之后增加经验值,达到100  升级 当前经验值清零
{
       experience+=20;
   System.out.println(name+"获胜!经验值加20");
       if(experience>100)
  {  
  System.out.println(name+"经验值达到等级上限,升级!");
           experience=0;
  level+=1;
  }
  System.out.println(name+"当前等级"+level);


}
}

BloodWarrior  继承于 Warrior并且重写了win( ) 和injure  方法

class BloodWarrior extends Warrior
{
   public int injure(int x)
{
       blood=blood-x;
  System.out.println(name+"血量值减少"+x);
  if(blood<=(MAX/2))
  {
         System.out.println(name+"血量过低");
  }
  
  return blood;
}
public void win()
{
       experience+=40;
  System.out.println(name+"获胜!经验值加40");
  if(experience>100)
  { 
  System.out.println(name+"经验值达到等级上限,升级!");
           experience=0;
  level+=1;
  }
  System.out.println(name+"当前等级"+level);
}
}


创建一个测试类,类的主要工作是创建两个随机的战士类(BloodWarrior  Warrior ) 的对象 ,并且给他们命名,然后进入战斗环节 Winner_Test

import java.util.*;
class  TestWarrior
{
public static void main(String[] args) 
{
Scanner sc=new Scanner(System.in);
         System.out.println("是否进入游戏(是 t    否  f)?");
    String m=sc.next();
char n=m.charAt(0);
if(n=='f')
     return;
else{
   Warrior w;
       Warrior bw;
   int a=(int)(Math.random()*10+1);
int b=(int)(Math.random()*10+1);
if(a<=5)
     {
    w=new Warrior();
 }
else
                   w=new BloodWarrior();


if(b<=5)
                   bw=new BloodWarrior();
else
bw=new Warrior();


                System.out.println("输入第一位选手的名字");
String name1=sc.next();
w.setName(name1);
                
System.out.println("输入第二位选手的名字");
String name2=sc.next();
bw.setName(name2);
Winner_Test.winner(w,bw);//进入比赛
}
}  
}

创建Winner_Test 类对两个战士 战况进行描述,谁攻击了谁, 谁掉血了  谁赢了

 import java.util.*;
 class Winner_Test
 {
    public static void winner(Warrior f1,Warrior f2)
    {
           Random rd=new Random();
  int bloodw=f1.blood;
  int bloodb=f2.blood;
  int i=1;
  for(int k=0;;k++)
  {
   System.out.println("第"+(k+1)+"场比赛");
  for(int j=0;;j++)
  {
  System.out.println("第"+(j+1)+"回合");
  int a=rd.nextInt(6);
  int b=rd.nextInt(6);
 if(a>b)
 {
                         
int x=rd.nextInt(30);
 System.out.println(f2.name + "攻击,并造成了"+x+"点伤害");
 bloodw=f1.injure(x);
 System.out.println(f1.name + "当前血量值为"+f1.blood);
 if(f1.blood<=0)
     {
System.out.println();
f2.win();
f1.blood=200;
    f2.blood=200;
    break;
     }
System.out.println("\r\n-------------------------\r\n");
 }
 if(b>=a)
 { 
int x=rd.nextInt(30);
System.out.println(f1.name + "攻击,并造成了"+x+"点伤害");
bloodb=f2.injure(x);
System.out.println(f2.name + "当前血量值为"+f2.blood);
                         if(f2.blood<=0)
     {
System.out.println();
f1.win();
f2.blood=200;
   f1.blood=200;
    break;
     }
System.out.println("\r\n-------------------------\r\n");
 }
 boolean gg=jixu();//继续比赛的判断
     if(!gg)
     break;  
  }
  boolean b=jixu();//继续比赛的判断
  if(!b)
break;
                 System.out.println("\r\n\r\n\r\n");
  }


}


//是否进行比赛的判断,返回布尔值 是 TRUE    否 FALSE
public static boolean jixu()
{
         Scanner sc=new Scanner(System.in);
                  System.out.println("是否继续比赛(是 t    否  f)?");
 String m=sc.next();
 char n=m.charAt(0);
 if(n=='t')
 return true;
 else 
 return false;
}
}


阅读全文
0 0