一.题目分析:
题目要求,编写一个简化的创造游戏角色的程序,游戏角色应有:姓名,性别,种族,职业,力量,敏捷,体力,智力,智慧,生命值,魔法值等属性。

题目思路:根据题目可知,无论创建什么种族角色,都共同属于物种这一个大的类,而且都有职业选择,各种属性等共有特点。所以可以先创建一个抽象类的父类Preson(),由于姓名和性别属于关键信息。所以将姓名和性别变量设置成私有变量,通过构造方法或者SetXxx()方法对私有变量赋值,通过GetXxx()获取私有变量
在父类Preson()中,将除过名字和性别外的变量设置成静态公共类变量,然后定义一个抽象类的种族方法和职业的抽象方法,由于无论是玩家选择哪一个种族,哪一个职业,都最后需要输出他的所以游戏属性。所以直接在父类中定义show()方法来输出玩家的属性。由于题目中要求各种职业的属性都有一些微小的变化,所以定义一个ShowNumber()方法使各个属性发生-2到2的随机变化。
然后分别定义人、兽人、矮人等各个物种的子类,继承Person()类,然后重写Ability()和CarrerChoice()方法。最后定义一个工具类,通过玩家选择不同的种族创建不同类的对象,调用不同对象的方法,最后等到用户满意后,通过Write()方法,将结果存入文件中。

二.类图设计:

三.程序实现
源代码:
package GAME;
import java.util.Scanner;
import java.io.FileWriter;
import java.io.IOException;
//定义一个父类,表示所有的物种
abstract class Person {
private static String name;//私有变量名字
private static String sex;//私有变量性别
private int num;//私有变量种族编号
protected static int power;// 力量
protected static int agility;// 敏捷
protected static int physical;// 体力
protected static int wit;// 智力
protected static int wisdom;// 智慧
protected static int life;// 生命值
protected int Mp;// 魔法值
protected int number;//职业编号
public String[] race= {“人类”,“精灵”,“兽人”,“矮人”,“元素”};//所有的种族数组
public int[][] ability = { { 40, 20, 30, 5, 5 }, // 各种职业的标准能力数值
{ 25, 15, 30, 20, 10 }, { 20, 35, 20, 15, 10 }, { 15, 40, 15, 10, 20 }, { 15, 20, 15, 35, 15 },
{ 10, 20, 10, 20, 40 } };
public String[] profession = { “狂战士”, “圣骑士”, “刺客”, “猎手”, “祭司”, “巫师” };//所有职业的数组

public Person() {//无参构造
}public Person(String name, String sex,int num) {//接收名字和性别,以及种族编号的构造方法this.name = name;//给名字赋值this.sex = sex;this.num=num;
}public void ShowNumber() {//给各种职业的标准能力数值产生小范围的变化for (int i = 0; i < 6; i++) {for (int j = 1; j < 5; j++)//由于random()产生0-1的数字,将这个随机数*5-2就能产生-2--2的随机数ability[i][j] += (int) (Math.random() * 5) - 2;int sum = 100;for (int j = 1; j < 5; j++)//满足各种属性之和为100ability[i][0] = sum - ability[i][j];}
}
//由于不同的物种可以选择的职业不同,所有定义一个抽象的物种选择类
public abstract int CarrerChoice();public abstract void Ability();//职业属性赋值的抽象类public void show() {//输出姓名、性别等信息的类System.out.println("==============================");System.out.println("姓名:                                     " + GetName());System.out.println("==============================");System.out.println("性别:                                     " + GetSex());System.out.println("==============================");System.out.println("种族:                                       "+race[num]);System.out.println("==============================");System.out.println("职业:                                     " + profession[number]);System.out.println("==============================");System.out.println("力量:                                      " + power);System.out.println("==============================");System.out.println("敏捷:                                      " + agility);System.out.println("==============================");System.out.println("体力:                                      " + physical);System.out.println("==============================");System.out.println("智力:                                      " + wit);System.out.println("==============================");System.out.println("智慧:                                      " + wisdom);System.out.println("==============================");System.out.println("生命值:                                    " + physical * 20);System.out.println("==============================");System.out.println("魔法值:                                    " + (wit + wisdom) * 10);System.out.println("==============================");
};
public void SetName(String name) {//给名字赋值Person.name= name;
}public String GetName() {//获取名字return name;
}public void SetSex(String sex) {//给性别赋值Person.sex = sex;
}public String GetSex() {//获取性别return sex;
}
public void SetNum(int num) {Person.this.num=num;
}
public int GetNum() {return num;
}

}
//定义一个人物种的类,继承物种类
class Human extends Person {
public int number;

public Human() {//无参构造
}public Human(String name, String age,int num) {//有参构造super(name, age,num);
}public int CarrerChoice() {//方法重写Scanner sc = new Scanner(System.in);System.out.print("请选择你的职业(0.狂战士,1.圣骑士,2.刺客,3.猎手,4.祭司,5.巫师)");//人所能选择的职业number = sc.nextInt();return number;
}public void Ability() {// 方法重写ShowNumber();power = ability[number][0];// 力量agility = ability[number][1];// 敏捷physical = ability[number][2];// 体力wit = ability[number][3];// 智力wisdom = ability[number][4];// 智慧
}

}
//定义一个精灵物种的类,继承物种类
class Elf extends Person {// 精灵
public int number;

public Elf(String name, String sex,int num) {super(name, sex,num);
}public int CarrerChoice() {Scanner sc = new Scanner(System.in);System.out.print("请选择你的职业(0.刺客,1.猎手,2.祭司,3.巫师)");number = sc.nextInt();return number;
}public void Ability() {ShowNumber();power = ability[number][0];// 力量agility = ability[number][1];// 敏捷physical = ability[number][2];// 体力wit = ability[number][3];// 智力wisdom = ability[number][4];// 智慧
}

}
//定义一个兽人物种的类,继承物种类
class Orcish extends Person {// 兽人
public int number;

public Orcish(String name, String sex,int num) {super(name, sex,num);
}public int CarrerChoice() {Scanner sc = new Scanner(System.in);System.out.print("请选择你的职业(0.狂战士,1.猎手,2.祭司,)");number = sc.nextInt();if (number == 1) {//为了保证number与职业能力数字的行数值相等number = 3;} else if (number == 2) {number = 5;}return number;
}public void Ability() {ShowNumber();power = ability[number][0];// 力量agility = ability[number][1];// 敏捷physical = ability[number][2];// 体力wit = ability[number][3];// 智力wisdom = ability[number][4];// 智慧
}

}
//定义一个矮人物种的类,继承物种类
class dwarf extends Person {
public int number;

public dwarf(String name, String age,int num) {super(name, age,num);
}public int CarrerChoice() {Scanner sc = new Scanner(System.in);System.out.print("请选择你的职业(0.狂战士,1.圣骑士,2.祭司,)");number = sc.nextInt();if (number == 2) {number = 4;}return number;
}public void Ability() {ShowNumber();power = ability[number][0];// 力量agility = ability[number][1];// 敏捷physical = ability[number][2];// 体力wit = ability[number][3];// 智力wisdom = ability[number][4];// 智慧
}

}
//定义一个元素物种的类,继承物种类
class Element extends Person {
public int number;

public Element(String name, String age,int num) {super(name, age,num);
}public int CarrerChoice() {Scanner sc = new Scanner(System.in);// 0.狂战士1.圣骑士2.刺客3.猎手4.祭司5.巫师System.out.print("请选择你的职业(0.祭司,1.巫师)");number = sc.nextInt();if (number == 0) {number = 4;} else if (number == 1) {number = 5;}return number;
}public void Ability() {ShowNumber();power = ability[number][0];// 力量agility = ability[number][1];// 敏捷physical = ability[number][2];// 体力wit = ability[number][3];// 智力wisdom = ability[number][4];// 智慧
}

}
//定义一个工具类,用来判断创建具体的那一个子类
class Game {
public void plauGame() {
int leap = 1;//记录客户的满意程度
int num=0,number=0;
while (leap == 1) {
Scanner sc = new Scanner(System.in);
System.out.print(“请输入你游戏角色的姓名:”);
String name = sc.nextLine();
System.out.print(“请选择你游戏角色的性别(0.男性,1.女性):”);
int number1 = sc.nextInt();
String sex;
if (number1 == 0) {
sex = “男”;
} else {
sex = “女”;
}
System.out.print(“请选择你游戏角色的种族(0.人类,1.精灵,2.兽人,3.矮人,4.元素):”);
int number2 = sc.nextInt();
switch (number2) {//判断需要创建哪一个子类的对象
case 0: {
Person h = new Human(name, sex, 0);//创建人类对象
number=h.CarrerChoice();//调用子类的方法
h.Ability();
h.show();
num=0;
break;
}
case 1: {
Person e = new Elf(name, sex, 1);// 精灵
number=e.CarrerChoice();
e.Ability();
e.show();
num=1;
break;
}
case 2: {
Person o = new Orcish(name, sex, 2);// 兽人
number=o.CarrerChoice();
o.Ability();
o.show();
num=2;
break;
}
case 3: {
Person d = new dwarf(name, sex, 3);// 元素
number=d.CarrerChoice();
d.Ability();
d.show();
num=3;
break;
}
case 4: {
Person el = new Element(name, sex, 4);// 精灵
number=el.CarrerChoice();
el.Ability();
el.show();
num=4;
break;
}
default:
System.out.println(“输入错误”);
}
System.out.println(“是否满意:0.满意,1.不满意”);
leap = sc.nextInt();//判断是否结束while()循环
}
System.out.println(“创建对象完毕”);
Person p=new Human();//创建一个父类对象
//将所有需要存入文件的内容赋给字符串s
String s=“姓名:”+p.GetName()+"\r\n"+“性别:”+p.GetSex()+"\r\n"
+“种族:”+p.race[num]+"\r\n"+“职业:”+p.profession[number]+"\r\n"
+“力量:”+Person.power+"\r\n"+“敏捷”+Person.agility+"\r\n"
+“体力:”+Person.physical+"\r\n"+“智力”+Person.wit+"\r\n"+“智慧”+Person.wisdom
+"\r\n"+“生命值”+((Person.physical)*20)+"\r\n"+“魔法值”+((Person.wit+Person.wisdom)*10);
Write(s);//将s存入文件中
}

public void Write(String s)//将字符串s写入s中
{try {FileWriter bw = new FileWriter("Int.txt",true);bw.write(s+"\r\n");bw.close();}catch(IOException e) {e.printStackTrace();}
}

}

public class menu {
public static void main(String[] args) {
Game g = new Game();//建立工具类的对象
g.plauGame();
}
}
四.测试、调试及运行结果:
1.调试:

在父类将一些属性定义成静态类型的了,然后在工具中通过创建对象的方法调用变量,发生了错误。最后直接采用类名加变量名的方法进行调用。
2.测试:
对随机产生不同职业的各种属性的测试:

将输出结果存入文件中:

3.运行结果:


体现了不同种族所提供的职业选择使不同的
五。经验归纳

五.经验归纳
一开始在思路设计的思考,只考虑了很简单的层次结构,单纯的设计了一个父类和五个子类,然后就开始写代码,把所以的属性都设计成私有变量,然后通过构造方法赋值,结果在写工具类的时候发现只有一开始在创建子类对象的时候,只能给构造方法传名字和性别,而且又发现其他成员变量不是特别重要,所以又将其他成员变量设置成公共变量,使代码变得不是特别繁琐。
通过再一次向对象的七大的原则的思考,对此有了更深刻的理解

通过java程序写一个简单的创造游戏角色的程序相关推荐

  1. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  2. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  3. 用一个简单的创建游戏角色方案来理解类继承的运用以及浅淡protected权限修饰符的作用。

    最近不知道怎得懒了许多,就是不想写总结. 想了想还是在这里说下protected的权限关系吧,怕大家在后面找不到 首先我们可能在学c++中都会听到老师说protected权限是介于public和pri ...

  4. 几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。

    一:题目分析 1.功能描述 几乎所有的RPG游戏(一种源自<龙与地下城>的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色.本次上机要求编写一个简化的创建游戏角色的程序. 2.游戏 ...

  5. RPG角色生成器 1.功能描述 几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。要求编写一个简化的创建游戏角色的程序。 2.游戏角色应

    RPG角色生成器 1.功能描述 几乎所有的RPG游戏(一种源自<龙与地下城>的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色.本次上机要求编写一个简化的创建游戏角色的程序. 2. ...

  6. Java语言写一个简单的学生信息管理系统,通过JDBC连接数据库对学生信息进行增删改查,采用三层思想和DBUtils第三方框架。

    我把源代码和sql文件放GitHub上了,你们可以自行下载:https://github.com/fenglily1/student. 有问题可以留言或私信,我看到就会回. 进阶版加上页面的管理系统在 ...

  7. java程序 购物车_用java代码写一个简单的网上购物车程序

    1 需求:1.写一个商品类,有商品编号.商品名称.商品分类.商品单价属性.2.写一个商品条目信息类,有商品和数量两个属性,有商品总价格方法.2 3 3.写一个购物车类,有添加商品方法.查看订单信息,删 ...

  8. JAVA——如何写一个简单的聊天框

    这是上学期JAVA选修课课下的一道简单的线上家庭作业题,题目描述如下: 总的来说就是要按照它的描述写一个聊天室界面.由于是选修课要求不高,老师只要求我们写出大致界面即可不用实现具体功能,不过闲来无事我 ...

  9. 用C语言写一个简单的小游戏——猜数字

    我们该如何设计这个程序? 1.首先应该打印一个菜单,让玩家选择玩游戏或者退出游戏 2.当玩家选择玩游戏,我们让电脑生成一个1~100的随机数,让玩家去猜 3.如果玩家猜的数比电脑生成的数大,我们提示猜 ...

最新文章

  1. 【转】Android 快捷方式的创建
  2. 网络推广营销浅析网站在优化中流量突然减少了是为什么?
  3. java 1kb_[代码全屏查看]-java输入输出流及文件操作
  4. kali Linux/Linux 忘记root密码强行修理方法
  5. Jonathan Bryce说:OpenStack属于全世界,并不属于一个公司,也不会属于一个国家……...
  6. Android studio gradle 无法获取 pom文件
  7. Python实现单例
  8. 从用户的角度看 c语言中函数有两种,【南开大学】20秋学期(1709、1803、1809、1903、1909、2003、2009 )《C语言程序设计》在线作业答卷...
  9. 机器学习基础(四十五)—— 模拟退火(Simulated Annealing)
  10. Ubuntu16.04下 编译安装 Tensorflow
  11. 2017.4.26-morning
  12. java 文件夹不存在则创建_java判断文件不存在就创建的方法
  13. Java代码实现—寻找素数
  14. 查阅我们JavaScript学习新指南
  15. [教程]黑莓终极中文混刷教程 终身受用
  16. masm32 汇编hello world程序
  17. 热血传奇服务端源代码分析笔记
  18. python父亲节快乐_一个“MacBook”新手的Python“笨办法”自学之旅 #第七章:字符串、文本、各种打印、转义序列、手动输入raw_input()...
  19. framemaker中遍历及判断其属性是否存在
  20. 电子商务站点资源收集~~~

热门文章

  1. js 正则匹配,从字符串中提取数字
  2. 秋招第一面-OPPO
  3. 小米 移卡退资 服务器维护中,移卡退资,让你的小米公交更好用
  4. 关于Comparator使用说明
  5. Ubuntu18.04 怎么打开CAJ中国知网下载的文献
  6. BW2400GA 介绍
  7. 2022年it学什么专业好就业
  8. Storm的基础知识-调度,并行,守护进程等(3)
  9. 二本计算机专业考研清华,从普通二本成功考研到清华北大,是种怎样的体验?...
  10. Git 配置环境变量