一、题目
1.功能描述
几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。
2.游戏角色应有的属性
本题目要求的游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。
名字:不超过50个字符。
性别:可以选择男性和女性。
种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。
职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。
其余属性均为整数。
本题目要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。
生命值=体力*20。
魔法值=(智力+智慧)*10。
3.职业限制
很多职业会限制某些种族选择,例如兽人不能就职圣骑士等等,种族和职业的限制表如下:
种族/职业 狂战士 圣骑士 刺客 猎手 祭司 巫师
人类 允许 允许 允许 允许 允许 允许
精灵 不允许 不允许 允许 允许 允许 允许
兽人 允许 不允许 不允许 允许 允许 不允许
矮人 允许 允许 不允许 不允许 允许 不允许
元素 不允许 不允许 不允许 不允许 允许 允许
所以在要求用户选择职业时,输出信息里面只能有用户所选择种族可以就职的职业。
4.初始属性
本题目要求力量、敏捷、体力、智力和智慧要求是随机值(利用随机数函数来取得随机数),但是五项属性的总和应该是100,并且应该和职业相关。例如狂战士的体力和力量就要比较高,而巫师需要较高的智力,而祭司则需要较高的智慧。各职业初始属性的大致比例应遵从下表:
职业/属性 力量 敏捷 体力 智力 智慧
狂战士 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
例如,前面示意图中的祭司的初始属性,大致满足该比例,但是应该是随机的。
然后利用属性值计算生命值和魔法值。
5.显示信息
最后向用户显示该角色的所有信息,然后询问用户是否满意,如用户不满意则重新创建,若用户满意则程序结束,并将用户创建角色的相关信息写入文件保存。
package 游戏页面;
import java.util.*;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.io.*;
class renwu{//定义一个类
public String [] Sex= {"男性","女性"};//性别
String [] zhongzu= {"人类","精灵","兽人","矮人","元素"};//可选种族
String [] caree= {"狂战士","圣骑士","刺客","猎手","祭司","巫师"};//可选角色
int s=0;//用来确种族的量
int t=0;
String name;//姓名
int i=0;
int j=0;
int [] str=new int [5];//关于各个角色属性点的分配
Random x=new Random();//定义一个随机函数
void shuxing () {//输入自己的角色属性
Scanner in=new Scanner(System.in);//输入函数
Scanner x=new Scanner(System.in);
System.out.println("请输入你的角色姓名:");
String name=x.next();
System.out.println("请选择角色性别(0男性、1女性):");
int i=in.nextInt();
System.out.println("请选择你的游戏角色种族(0人类、1精灵、2兽人、3矮人、4元素):");
int j=in.nextInt();
System.out.println("请选择你的游戏角色种族(0狂战士、1圣骑士、2刺客、3猎手、4祭司、5巫师):");
int s=in.nextInt();
if(j==1&&(s==0||s==1)) {//利用if语句来限制可选角色
System.out.println("该种族不能选择该角色,请重新选择");
int t=in.nextInt();
}
if(j==2&&(s==2||s==1||s==5)) {
System.out.println("该种族不能选择该角色,请重新选择");
int t=in.nextInt();
}
if(j==3&&(s==2||s==3||s==5)) {
System.out.println("该种族不能选择该角色,请重新选择");
int t=in.nextInt();
}
if(j==4&&(s==0||s==1||s==2||s==3)) {
System.out.println("该种族不能选择该角色,请重新选择");
int t=in.nextInt();
}
s=t;
}
void data() {//利用随机函数给角色属性赋值
if(s==0)
{
str[0]=x.nextInt(10)+30;
str[1]=x.nextInt(25);
str[2]=x.nextInt(10)+30;
str[3]=x.nextInt(8);
str[4]=100-str[1]-str[0]-str[2]-str[3];
}
if(s==1)
{
str[0]=x.nextInt(10)+20;
str[1]=x.nextInt(25);
str[2]=x.nextInt(10)+30;
str[3]=x.nextInt(10)+15;
str[4]=100-str[1]-str[0]-str[2]-str[3];
}
if(s==2)
{
str[0]=x.nextInt(10)+10;
str[1]=x.nextInt(15)+30;
str[2]=x.nextInt(10)+13;
str[3]=x.nextInt(8)+10;
str[4]=100-str[1]-str[0]-str[2]-str[3];
}
if(s==3)
{
str[0]=x.nextInt(10)+10;
str[1]=x.nextInt(10)+35;
str[2]=x.nextInt(10)+10;
str[3]=x.nextInt(8)+5;
str[4]=100-str[1]-str[0]-str[2]-str[3];
}
if(s==4)
{
str[0]=x.nextInt(10)+8;
str[1]=x.nextInt(10)+15;
str[2]=x.nextInt(10)+8;
str[3]=x.nextInt(10)+30;
str[4]=100-str[1]-str[0]-str[2]-str[3];
}
if(s==5)
{
str[0]=x.nextInt(10);
str[1]=x.nextInt(10)+14;
str[2]=x.nextInt(11);
str[3]=x.nextInt(8)+14;
str[4]=100-str[1]-str[0]-str[2]-str[3];
}
}
void dispaly() {//将角色的各个属性进行输出
System.out.println("=========================");
System.out.println("姓名: "+name );
System.out.println("=========================");
System.out.println("种族: "+zhongzu[i] );
System.out.println("=========================");
System.out.println("职业: "+caree[j]);
System.out.println("=========================");
System.out.println("力量: "+str[0]);
System.out.println("=========================");
System.out.println("敏捷: "+str[1]);
System.out.println("=========================");
System.out.println("体力: "+str[2]);
System.out.println("=========================");
System.out.println("智力: "+str[3]);
System.out.println("=========================");
System.out.println("智慧: "+str[4]);
System.out.println("=========================");
System.out.println("生命力: "+str[2]*20);
System.out.println("=========================");
System.out.println("魔法力: "+(str[3]+str[4])*10);
}
void save() {
try {//利用抛出异常机制编写文件流输出
PrintStream ps=new PrintStream("output.txt");//创建一个TXT文件
System.setOut(ps);
dispaly();//将输出的语句全部
}catch(Exception e)
{
e.printStackTrace();
}
}
}
public class 人物 {
public static void main(String[] args) {
renwu t1=new renwu();//利用对象生成一个函数
t1.shuxing();//调用角色设置函数
t1.data();//调用分配属性点的函数
t1.dispaly();//调用属性输出函数
t1.save();
}
}
五、总结
在本次游戏页面编写的过程中我在刚开始是利用对txt的文档写入进行操作,最后发现在实际运行时没有办法将带参数的输出直接写入文档中。最后利用了对文件流的一个操作进行输出,将输出的内容写入TXT文档中。在编写代码的同时,我们还学会了对文件流的一个操作。