题目:文字格斗游戏
内容:回合制的格斗类游戏,角色要包含:姓名,血量(在当选定角色时,血量就已确定)
本文章分为两个部分来实现:
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; } } }
以上内容均为自己亲手打出(有借鉴他人的地方),实力实属较差,有不妥之处还望海涵。