文字格斗小游戏练习

做一个随机进行战斗的小游戏

思路:

创建两个角色小A和小B,角色按回合随机进行攻击和回复血量

每回合角色随机使用不同攻击技能,对对方造成1~20的伤害

每回合角色有1/5的概率对自己进行回复血量,一次恢复1~15

当一方血量为0时战斗结束

可以改变人物姓名和初始血量

import java.util.Random;

public class Role {
	private String name;
	private int blood;
	
	private String jineng_out;
	private String jineng_in;
	String[] jn_o = {"%s使出一记火箭脑门子锤,撞在%s肚子上",
			"%s大喝一声少侠饶命,趁%s骂'你犯什么病'的间隙一个扫堂腿撂倒了对手",
			"%s使出一记话疗,%s感到一条强力的道德枷锁绑住了自己",
			"%s唱了一首歌,%s吐了出来",
			"%s以迅雷不及掩耳盗铃之响叮当之势抽了%s一个大逼兜"};
	String[] jn_i = {"%s毫发无伤,","%s略感疲惫,","%s吐出一口老血,","%s还在嘴硬,",""};

	public Role() {
		
	}
	public Role(String name ,int blood ) {
		this.name = name;
		this.blood = blood;
	}

	//名字
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	//血量
	public int getBlood() {
		return blood;
	}
	public void setBlood(int blood) {
		this.blood = blood;
	}
	
	//攻击技能
	public String getJn_o() {
		return jineng_out;
	}
	
	public String getJn_i() {
		return jineng_in;
	}
	
	//回血
	public void reBlood(Role role) {
		int reblood = this.getBlood();
		Random re = new Random();
		int nai = re.nextInt(15)+1;//随机恢复1~15滴血
		Random hx = new Random();
		int hf = hx.nextInt(4)+1;//有1/5的概率进行回复
		
		if(hf == 1) {
			if(reblood < 50) {
			System.out.print(this.getName()+"趁"+role.getName()+"不备,吞下两颗大白兔奶糖,恢复了"+nai+"点血,");
			reblood = reblood + nai;
			reblood = reblood > 50 ? 50 :reblood;
			this.setBlood(reblood);
			System.out.println(this.getName()+"的血量变成了"+this.getBlood());
			}
			}
	}

	//攻击
	public void attack(Role role) {
		//伤害值
		Random h = new Random();
		int hurt = h.nextInt(20)+1;

		
		//剩余血量
		int remainblood = role.getBlood()-hurt;
		remainblood = remainblood < 0 ? 0 : remainblood;
		role.setBlood(remainblood);
		
		if(remainblood >= 40) jineng_in = jn_i[0];
		else if(remainblood >= 30) jineng_in = jn_i[1];
		else if(remainblood >= 15) jineng_in = jn_i[2];
		else if(remainblood > 0) jineng_in = jn_i[3];
		else  jineng_in = jn_i[4];
		
		

		//放技能
		Random jn = new Random();
		int n = jn.nextInt(jn_o.length);
		
		
		System.out.printf(jn_o[n],this.getName(),role.getName());
		System.out.print(",造成了"+hurt+"点伤害");
		System.out.print(",");
		System.out.printf(jineng_in, role.getName());
		System.out.print(role.getName()+"还剩下"+role.getBlood()+"点血");
		System.out.println();
	}
	public static void main(String[] args) {

		System.out.println("比赛开始了");
		System.out.println();
		
		Role s = new Role("小A",50);
		Role g = new Role("小B",50);
		while(true) {
			s.reBlood(g);
			s.attack(g);
			System.out.println();
			if(g.getBlood() == 0) {
				System.out.println(g.getName()+"寄了");
				System.out.println();

				break;
			}
			g.reBlood(s);
			g.attack(s);
			System.out.println();
			if(s.getBlood() == 0) {
				System.out.println(s.getName()+"寄了");
				System.out.println();
				break;
			}
		}
		
	}
}

运行结果随机,下面展示几个结果

总结:

其中有几处可以改进的地方,比如受到攻击的一方状态是根据剩余血量判断的,但是因为我偷懒了,所以直接按人物初始血量为50写了,设置其他初始血量会让结果看起来不太聪明,大家可以自行改进

改变代码里角色的名称拿来玩一玩还是挺有趣的(因为太懒,没有把角色名称做成外部输入)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值