实现:
角色情况:
战士,生命值:120,攻击力:45,防御力:30,命中率:%80
骑兵,生命值:110,攻击力:55,防御力:30,命中率:%85
法师,生命值:90,攻击力:60,防御力:25,命中率:%70
角色特效:
战士,勇猛:恢复35生命值
骑士,追击:追加30伤害
法师,魔力:恢复自身20生命,追击20伤害
特效激发概率均为40%
游戏开始后,根据提示信息输入编号进行战斗
20个回合游戏结束或一方全体角色阵亡游戏结束
若某个角色阵亡,则无法使用切无法被攻击
游戏开始
有特效
20回合,游戏结束
代码:
import java.util.*;
class Combater//战斗基础类
{
public String name;//名称
public int live;//生命值
public int attack;//战斗力
public int defense;//防御力
public int rate;//命中率
public String addtion;//特效
public String state;//状态
public Combater()//无参数的构造函数
{
}
public void base_echo()//基本信息显示函数
{
System.out.print(name+",");
System.out.print("生命值:"+live+",");
System.out.print("攻击力:"+attack+",");
System.out.print("防御力:"+defense+",");
System.out.print("命中率:"+"%"+rate+",");
System.out.print("特效:"+addtion+",");
if(live>=0)
{
System.out.println("存活");
}
else
{
System.out.println("已阵亡");
}
}
}
class Soldier extends Combater//子类 战士
{
public Soldier()
{
name="战士";
live=120;
attack=45;
defense=30;
rate=80;
addtion="不屈战士";
}
}
class Cavalry extends Combater//子类 骑兵
{
public Cavalry()
{
name="骑兵";
live=110;
attack=55;
defense=30;
rate=85;
addtion="勇猛骑士";
}
}
class Master extends Combater//子类 法师
{
public Master()
{
name="法师";
live=90;
attack=60;
defense=25;
rate=70;
addtion="法师药水";
}
}
public class mainSet
{
public static void main(String[] args)//主函数
{ int i;
Soldier srole1=new Soldier();
Cavalry crole1=new Cavalry();
Master mrole1=new Master();//创建成员
Soldier srole2=new Soldier();
Cavalry crole2=new Cavalry();
Master mrole2=new Master();//创建成员
System.out.println("角色详情:");
System.out.println("战士,生命值:120,攻击力:45,防御力:30,命中率:%80,特效:不屈战士");
System.out.println("骑兵,生命值:110,攻击力:55,防御力:30,命中率:%85,特效:勇猛骑士");
System.out.println("法师,生命值:90,攻击力:60,防御力:25,命中率:%70,特效:法师药水");
System.out.println("使用说明:");
System.out.println("角色阵亡后,无法使用该角色,且无法被攻击,否则操作无效");
Random random1 = new Random();//生成随机数,用于玩家1攻击成功概率
Random random2 = new Random();//生成随机数,用于玩家1攻击成功概率
Random addtion1 = new Random();//生成随机数,用于战士加成产生概率
Random addtion2 = new Random();//生成随机数,用于骑士加成产生概率
Random addtion3 = new Random();//生成随机数,用于法师加成产生概率
for(i=1;i<=20;i++)//用于对战回合进行
{
System.out.println("回合"+i);
if(i%2==1)//角色1模块
{//if
System.out.println("玩家1发动攻击");
int choice1;//输入编号进行战斗
Scanner reader=new Scanner(System.in);
System.out.println("1、战士攻击对方战士,2、战士攻击对方骑士,3、战士攻击对方法师,");
System.out.println("4、骑士攻击对方战士,5、骑士攻击对方骑士,6、骑士攻击对方法师,");
System.out.println("7、法师攻击对方战士,8、法师攻击对方战士,9、法师攻击对方法师,");
System.out.print("请输入:");
choice1=reader.nextInt();//从键盘输入攻击情形
if(choice1==1&srole1.live>=0&srole2.live>=0)//输入1,战士攻击对方战士,若战士生命值<0,则无法攻击
{
System.out.println("战士攻击对方战士");
if(random1.nextInt(20)<=16)//设置攻击成功概率
{ System.out.println("攻击成功,玩家2战士生命值减45");
srole2.live=srole2.live-srole1.attack;//血量计算
if(addtion1.nextInt(10)<=4)//设置加成产生
{
srole2.live=srole2.live+35;//战士恢复生命值
System.out.println("不屈战士,玩家2战士生命值恢复35");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice1==2&srole1.live>=0&crole2.live>=0)//输入2,战士攻击对方骑士,若战士生命值<0,则无法攻击
{
System.out.println("战士攻击对方骑士");
if(random1.nextInt(20)<=16)//设置攻击成功概率
{ System.out.println("攻击成功,玩家2骑士生命值减45");
crole2.live=crole2.live-srole1.attack;//血量计算
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice1==3&srole1.live>=0&mrole2.live>=0)//输入3,战士攻击对方法师,若战士生命值<0,则无法攻击
{
System.out.println("战士攻击对方法师");
if(random1.nextInt(20)<=16)//设置攻击成功概率
{ System.out.println("攻击成功,玩家2法师生命值减45");
mrole2.live=mrole2.live-srole1.attack;//血量计算
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice1==4&crole1.live>=0&srole2.live>=0)//输入4,骑士攻击对方战士,若骑士生命值<0,则无法攻击
{
System.out.println("骑士攻击对方战士");
if(random1.nextInt(20)<=17)//设置攻击成功概率
{ System.out.println("攻击成功,玩家2战士生命值减55");
srole2.live=srole2.live-crole1.attack;//血量计算
if(addtion1.nextInt(10)<=4)//设置战士加成产生
{
srole2.live=srole2.live+35;//战士恢复生命值
System.out.println("不屈战士,玩家2战士生命值恢复35");
}
if(addtion2.nextInt(10)<=4)//设置骑士加成产生
{
srole2.live=srole2.live-30;//骑士追击
System.out.println("勇猛骑士,玩家1追加30伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice1==5&crole1.live>=0&crole2.live>=0)//输入5,骑士攻击对方骑士,若骑士生命值<0,则无法攻击
{
System.out.println("骑士攻击对方骑士");
if(random1.nextInt(20)<=17)//设置攻击成功概率
{ System.out.println("攻击成功,玩家2骑士生命值减55");
crole2.live=crole2.live-crole1.attack;//血量计算
if(addtion2.nextInt(10)<=4)//设置骑士加成产生
{
crole2.live=crole2.live-30;//骑士追击
System.out.println("勇猛骑士,玩家1追加30伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice1==6&&crole1.live>=0&mrole2.live>=0)//输入6,骑士攻击对方法师,若骑士生命值<0,则无法攻击
{
System.out.println("骑士攻击对方法师");
if(random1.nextInt(20)<=17)//设置攻击成功概率
{ System.out.println("攻击成功,玩家2法师生命值减55");
mrole2.live=mrole2.live-crole1.attack;//血量计算
if(addtion2.nextInt(10)<=4)//设置骑士加成产生
{
mrole2.live=mrole2.live-30;//骑士追击
System.out.println("勇猛骑士,玩家1追加30伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice1==7&mrole1.live>=0&srole2.live>=0)//输入7,法师攻击对方战士,若法师生命值<0,则无法攻击
{
System.out.println("法师攻击对方战士");
if(random1.nextInt(20)<=14)//设置攻击成功概率
{ System.out.println("攻击成功,玩家2战士生命值减60");
srole2.live=srole2.live-mrole1.attack;//血量计算
if(addtion1.nextInt(10)<=4)//设置加成产生
{
srole2.live=srole2.live+35;//战士恢复生命值
System.out.println("不屈战士,玩家2战士生命值恢复35");
}
if(addtion3.nextInt(10)<=4)//设置法师加成产生
{
srole2.live=srole2.live-20;//法师追击
mrole1.live=mrole1.live+20;//法师恢复
System.out.println("法师魔法,玩家1自身恢复20生命,追击20伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice1==8&mrole1.live>=0&crole2.live>=0)//输入8,法师攻击对方骑士,若法师生命值<0,则无法攻击
{
System.out.println("法师攻击对方骑士");
if(random1.nextInt(20)<=14)//设置攻击成功概率
{ System.out.println("攻击成功,玩家2骑士生命值减60");
crole2.live=crole2.live-mrole1.attack;//血量计算
if(addtion3.nextInt(10)<=4)//设置法师加成产生
{
crole2.live=crole2.live-20;//法师追击
mrole1.live=mrole1.live+20;//法师恢复
System.out.println("法师魔法,玩家1自身恢复20生命,追击20伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice1==9&mrole1.live>=0&mrole2.live>=0)//输入9,法师攻击对方法师,若法师生命值<0,则无法攻击
{
System.out.println("法师攻击对方法师");
if(random1.nextInt(20)<=14)//设置攻击成功概率
{ System.out.println("攻击成功,玩家2法师生命值减60");
mrole2.live=mrole2.live-mrole1.attack;//血量计算
if(addtion3.nextInt(10)<=4)//设置法师加成产生
{
mrole2.live=mrole2.live-20;//法师追击
mrole1.live=mrole1.live+20;//法师恢复
System.out.println("法师魔法,玩家1自身恢复20生命,追击20伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else
{
System.out.println("无效攻击");
}
if(srole2.live<=0&crole2.live<=0&mrole2.live<=0)
{i=i+100;
System.out.println("玩家2所有角色阵亡,玩家1胜利");
//如果血量为零跳出循环
}
}//if
else //角色2模块
{ //else括号
System.out.println("玩家2发动攻击");
int choice2;//输入编号进行战斗
Scanner reader=new Scanner(System.in);
System.out.println("1、战士攻击对方战士,2、战士攻击对方骑士,3、战士攻击对方法师,");
System.out.println("4、骑士攻击对方战士,5、骑士攻击对方骑士,6、骑士攻击对方法师,");
System.out.println("7、法师攻击对方战士,8、法师攻击对方战士,9、法师攻击对方法师,");
System.out.print("请输入:");
choice2=reader.nextInt();//从键盘输入攻击情形
if(choice2==1&srole2.live>=0&srole1.live>=0)//输入1,战士攻击对方战士,若战士生命值<0,则无法攻击
{
System.out.println("战士攻击对方战士");
if(random2.nextInt(20)<=16)//设置攻击成功概率
{ System.out.println("攻击成功,玩家1战士生命值减45");
srole1.live=srole1.live-srole2.attack;//血量计算
if(addtion1.nextInt(10)<=4)//设置加成产生
{
srole1.live=srole1.live+35;//战士恢复生命值
System.out.println("不屈战士,玩家1战士生命值恢复35");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice2==2&srole2.live>=0&crole1.live>=0)//输入2,战士攻击对方骑士,若战士生命值<0,则无法攻击
{
System.out.println("战士攻击对方骑士");
if(random2.nextInt(20)<=16)//设置攻击成功概率
{ System.out.println("攻击成功,玩家1骑士生命值减45");
crole1.live=crole1.live-srole2.attack;//血量计算
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice2==3&srole2.live>=0&mrole1.live>=0)//输入3,战士攻击对方法师,若战士生命值<0,则无法攻击
{
System.out.println("战士攻击对方法师");
if(random2.nextInt(20)<=16)//设置攻击成功概率
{ System.out.println("攻击成功,玩家1法师生命值减45");
mrole1.live=mrole1.live-srole2.attack;//血量计算
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice2==4&crole2.live>=0&srole1.live>=0)//输入4,骑士攻击对方战士,若骑士生命值<0,则无法攻击
{
System.out.println("骑士攻击对方战士");
if(random2.nextInt(20)<=17)//设置攻击成功概率
{ System.out.println("攻击成功,玩家1战士生命值减55");
srole1.live=srole1.live-crole2.attack;//血量计算
if(addtion1.nextInt(10)<=4)//设置加成产生
{
srole1.live=srole1.live+35;//战士恢复生命值
System.out.println("不屈战士,玩家1战士生命值恢复35");
}
if(addtion2.nextInt(10)<=4)//设置骑士加成产生
{
srole1.live=srole1.live-30;//骑士追击
System.out.println("勇猛骑士,玩家2追加30伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice2==5&crole2.live>=0&crole1.live>=0)//输入5,骑士攻击对方骑士,若骑士生命值<0,则无法攻击
{
System.out.println("骑士攻击对方骑士");
if(random1.nextInt(20)<=17)//设置攻击成功概率
{ System.out.println("攻击成功,玩家1骑士生命值减55");
crole1.live=crole1.live-crole2.attack;//血量计算
if(addtion2.nextInt(10)<=4)//设置骑士加成产生
{
crole1.live=crole1.live-30;//骑士追击
System.out.println("勇猛骑士,玩家2追加30伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice2==6&crole2.live>=0&mrole1.live>=0)//输入6,骑士攻击对方法师,若骑士生命值<0,则无法攻击
{
System.out.println("骑士攻击对方法师");
if(random1.nextInt(20)<=17)//设置攻击成功概率
{ System.out.println("攻击成功,玩家1法师生命值减55");
mrole1.live=mrole1.live-crole2.attack;//血量计算
if(addtion2.nextInt(10)<=4)//设置骑士加成产生
{
mrole1.live=mrole1.live-30;//骑士追击
System.out.println("勇猛骑士,玩家2追加30伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice2==7&mrole2.live>=0&srole1.live>=0)//输入7,法师攻击对方战士,若法师生命值<0,则无法攻击
{
System.out.println("法师攻击对方战士");
if(random1.nextInt(20)<=14)//设置攻击成功概率
{ System.out.println("攻击成功,玩家1战士生命值减60");
srole1.live=srole1.live-mrole2.attack;//血量计算
if(addtion1.nextInt(10)<=4)//设置加成产生
{
srole1.live=srole1.live+35;//战士恢复生命值
System.out.println("不屈战士,玩家1战士生命值恢复35");
}
if(addtion3.nextInt(10)<=4)//设置法师加成产生
{
srole1.live=srole1.live-20;//法师追击
mrole2.live=mrole2.live+20;//法师恢复
System.out.println("法师魔法,玩家2自身恢复20生命,追击20伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice2==8&mrole2.live>=0&crole1.live>=0)//输入8,法师攻击对方骑士,若法师生命值<0,则无法攻击
{
System.out.println("法师攻击对方骑士");
if(random1.nextInt(20)<=14)//设置攻击成功概率
{ System.out.println("攻击成功,玩家1骑士生命值减60");
crole1.live=crole1.live-mrole2.attack;//血量计算
if(addtion3.nextInt(10)<=4)//设置法师加成产生
{
crole1.live=crole1.live-20;//法师追击
mrole2.live=mrole2.live+20;//法师恢复
System.out.println("法师魔法,玩家2自身恢复20生命,追击20伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else if(choice2==9&mrole2.live>=0&mrole1.live>=0)//输入9,法师攻击对方法师,若法师生命值<0,则无法攻击
{
System.out.println("法师攻击对方法师");
if(random1.nextInt(20)<=14)//设置攻击成功概率
{ System.out.println("攻击成功,玩家1法师生命值减60");
mrole1.live=mrole1.live-mrole2.attack;//血量计算
if(addtion3.nextInt(10)<=4)//设置法师加成产生
{
mrole1.live=mrole1.live-20;//法师追击
mrole2.live=mrole2.live+20;//法师恢复
System.out.println("法师魔法,玩家2自身恢复20生命,追击20伤害");
}
}
else
{System.out.println("受击方闪躲成功");}//显示攻击详情
}
else
{
System.out.println("无效攻击");
}
if(srole1.live<=0&crole1.live<=0&mrole1.live<=0)
{i=i+100;
System.out.println("玩家1所有角色阵亡,玩家2胜利");
//如果血量为零跳出循环
}
}//else括号
System.out.println("玩家1:");
srole1.base_echo();//显示角色1
crole1.base_echo();
mrole1.base_echo();
System.out.println("玩家2:");
srole2.base_echo();//显示角色1
crole2.base_echo();
mrole2.base_echo();
if(i==20)//当回合结束时判断哪个玩家胜利
{
if(srole1.live+crole1.live+mrole1.live>srole2.live+crole2.live+mrole2.live)//根据总血量判断
{System.out.println("回合结束,玩家1胜利");}
else
{System.out.println("回合结束,玩家2胜利");}
}
}//for循环
System.out.println("战斗结束.。。。。。。");//战斗结束
}//主程序括号
}//主类括号