文字格斗游戏

题目:文字格斗游戏

内容:回合制的格斗类游戏,角色要包含:姓名,血量(在当选定角色时,血量就已确定)

本文章分为两个部分来实现:

1.低配版本

2.升级版本

一:低配版

javaBean类:
import java.util.Random;
//目的:javabean类——用此类方便进行角色的选定
public class Game { //当做游戏的类 -----
    //定义成员变量:
    private String name;
    private int HP;
    //定义空参:
   public Problem2_1(){};
   //定义带参:
    public Problem2_1(String name, int HP) {
        this.name=name;
        this.HP=HP;
    };
    //定义set方法与get方法:
    public void setname(String name){
        this.name=name;
    }
    public void setHP(int HP){
        this.HP=HP;
    }
    public String getname(){
        return name;
    }
    public int getHP(){
        return HP;
    }
 }
 

测试类:

import java.util.*;
public class Game_test {
    public static void main(String[] args) {
        Problem2_1 vs1 = new Problem2_1("奥特曼",100,'女');
        Problem2_1 vs2 = new Problem2_1("小怪兽",100,'男');
//调用方法,输出结果
   Fight(vs1_HP,vs2_HP,vs1name,vs2name);
定义方法:
-----为什么我要定义方法呢,因为我第一次想着图省事,就全部写在一个类里面了,后面在打升级版的时候意识到,我这图省力的方式,是非常不省力的,完全不如不如升级版!

public static boolean Fight(int vs1_HP,int vs2_HP,String vs1,String vs2) {
    //定义结果
    boolean result = true;
    Random r = new Random();
    int n = r.nextInt(1);//先手随机
    while (vs1_HP != 0 | vs2_HP != 0) {
        n++;
        if (n % 2 == 0) {//选手1 2轮流进攻
            int hit = r.nextInt(10) + 21;//攻击力大小
            vs2_HP = vs2_HP - hit;
            System.out.println(vs1 + "对" + vs2 + "造成了" + hit + "的巨额伤害");
        } else {
            int hit = r.nextInt(10) + 11;//攻击力大小
            vs1_HP = vs1_HP - hit;
            System.out.println(vs2 + "对" + vs1 + "造成了" + hit + "的巨额伤害");
        }
        if (vs1_HP <= 0) {
            System.out.println(vs1 + "选手太过垃圾被" + vs2 + "选手直接碾压");
            result = true;//vs1 失败 true
            break;
        } else if (vs2_HP <= 0) {
            System.out.println(vs2 + "选手太过垃圾被" + vs1 + "选手直接碾压");
            result = false;//vs 失败 false
            break;
        }
    }
    return result;
}}

在设计方法的时候(个人观点,仅供参考):

1.我的目的是什么?(方法的目的)---------同时想,我是否需要返回值?(设计方法的目的)

2.实现目的需要哪些数据?

3.补充我怎么获得数据,数据怎么定义,要怎么用这些数据?

4.列出我实现的步骤

5.补充我设计的步骤当中要用到的方法

二:升级版

何为升级版,让我来回答你!

1.在原有的基础上,加上性别与外貌(外貌是随机的,帅不帅,美不美一切靠天意)

2.更加丰富的攻击描述与受伤描述(一款文字游戏,当然要有华丽的文字来升级)

3.更换了令一种回合制的实现代码(更加简洁)

4.增加了选手信息展示的功能(比较简单)

5.让你真正体会文字格斗带给你的魅力

javaBean类:

import java.util.Random;

//目的:javabean类——用此类方便进行角色的选定
public class Problem2_1 { //当做游戏的类吧
    //定义成员变量:
    private String name;
    private int HP;
    private char gender;
    private String face;
    String [] boyface={"风流倜傥","气宇轩昂","相貌俊朗","五官端正","相貌平平"};
    String [] girlface={"美轮美奂","沉鱼落雁","亭亭玉立","身材姣好","相貌平平"};
        //---相貌随机
    //定义空参:
   public Problem2_1(){};
   //定义带参:
    public Problem2_1(String name, int HP,char gender) {//随机长相,长相不需要带参-------即不需要进行赋值
        this.name=name;
        this.HP=HP;
        this.gender=gender;
        setFace(gender);//随机长相,所以直接调用setface方法,随机获得长相
    };
    //定义set方法与get方法:
    public void setname(String name){
        this.name=name;
    }
    public void setHP(int HP){
        this.HP=HP;
    }
    public String getname(){
        return name;
    }
    public int getHP(){
        return HP;
    }
    public void setegnder(char gender){
        this.gender=gender;
    }
    public void setFace(char gender){// gender 是判断的值,因此只需要gender的值就可以随机得到长相
        Random r=new Random();
        if (gender=='男'){
            int a=r.nextInt(boyface.length);
            this.face=boyface[a];
        } else if (gender=='女') {
            int a=r.nextInt(girlface.length);
            this.face=girlface[a];
        }else {
            this.face="面目狰狞";
        }
    }
    public String getFace(){
        return face;
    }
    public char getgender(){
        return gender;
    }
    //角色信息展示:
    public void showplayer(){
        System.out.println("姓名:"+getname());
        System.out.println("血量:"+getHP());
        System.out.println("性别:"+getgender());
        System.out.println("外貌:"+getFace());
    }
    //attack攻击技能:
      String[] attack_desce ={
            "%s使用了一招【黑虎掏心】,瞄准%s胸口的位置猛力一抓!",
            "%s使用了【凌波微步】,刹那间转移到对方身后位置,一掌打向%s背心的灵台穴上拍去!",
            "%s使用了【如来神掌】,这是一招从天而降的掌法,一只幻形的巨掌向着%s拍去!",
            "%s一声爆喝,【狮吼功】产生的一阵音波迎面冲撞到了%s的面门上!",
            "一道惊雷在天空炸响,%s一指支出,天雷骤然降落,劈在了%s的身上!",
            "%s使用了【通灵术】,成功召唤了一只麒麟御兽,向着%s一步踏去!"
    };
    //injury受伤状态:
    String[] injury_desce={
            "结果:%s向后闪身而去,毫发无损!",
            "结果:%s被攻击的地方出现了紫青色的淤伤",
            "结果:%s痛苦的闷哼一声,显然受了些内伤",
            "结果:%s摇摇晃晃,摔倒在了地上!",
            "结果:%s脸色一下子变得惨白,接连退了好几步!",
            "结果:%s一声惨叫,像摊软泥一样在倒在了地上!"
    };

    //攻击行为:----------------------此处不考虑回合制的问题,仅进行攻击的描述
    //r1.attact(r2) r1攻击者打 参数r2
    //r1是调用攻击方法的所以使用:this
    // System.out.print(";对"+name+"造成了"+hit+"的伤害,"+name+"剩余"+hp+"的血量");
    public void attact(Problem2_1 role){
        Random r=new Random();
        //伤害范围:
        int hit=r.nextInt(20);
        //输出打击语句:
        int a=r.nextInt(attack_desce.length);
        String result=attack_desce[a];
        System.out.printf(result,this.name,role.name);//this.name 表示方法调用者;role.name 则表示参数的name属性
        System.out.print("    造成了"+hit+"的伤害");
        System.out.println();
        //血量反馈
        role.HP-=hit;
        if (role.HP<=100&&role.HP>=90){
            System.out.printf(injury_desce[0],role.name);
            System.out.println();//输出受到攻击后的语句 换行
        }else if(role.HP>=60&&role.HP<90){
            System.out.printf(injury_desce[1],role.getname());
            System.out.println("    "+role.name+"剩余"+role.HP+"的血量");
        } else if (role.HP>=40&&role.HP<60) {
            System.out.printf(injury_desce[2],role.getname());
            System.out.println("    "+role.name+"剩余"+role.HP+"的血量");
        }else if (role.HP>=20&&role.HP<40) {
            System.out.printf(injury_desce[3],role.getname());
            System.out.println("    "+role.name+"剩余"+role.HP+"的血量");
        }else if (role.HP>0&&role.HP<20) {
            System.out.printf(injury_desce[4],role.getname());
            System.out.println("    "+role.name+"剩余"+role.HP+"的血量");
        }else if (role.HP<=0){
            System.out.printf(injury_desce[5],role.getname());
            System.out.println();
            System.out.println(role.name+"被KO了");
        }
}
    }

测试类:

public static void main(String[] args) {
    Problem2_1 vs1 = new Problem2_1("奥特曼",100,'女');
    Problem2_1 vs2 = new Problem2_1("小怪兽",100,'男');
    String vs1name = vs1.getname();
    String vs2name = vs2.getname();
    int vs1_HP=vs1.getHP();
    int vs2_HP=vs2.getHP();
    String vs1face=vs1.getFace();
    String vs2face=vs2.getFace();
    //选手信息:
    System.out.println("选手信息如下:");
    vs1.showplayer();
    vs2.showplayer();

    //打印结果
    Fight(vs1_HP,vs2_HP,vs1name,vs2name);
    while (true){
        System.out.println();
        vs1.attact(vs2);
        if (vs2.getHP()<=0){ //此处为何用 vs.getHP 而不是 vs_HP 呢?
            break  //vs_HP的用get赋值得到的,而在javabean类当中,HP的获取是通过getHP获得的
        }      // 也就是说,在调用的方法当中,被赋值的vs_HP不会发生改变,而是vs.getHP发生改变
        vs2.attact(vs1);
        if (vs1.getHP()<=0){
            break;
        }
    }
}

以上内容均为自己亲手打出(有借鉴他人的地方),实力实属较差,有不妥之处还望海涵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值