一. 问题描述
1.功能描述:几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。
2.游戏角色应有的属性本题目要求的游戏角色应有以下属性:
名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。
名字:不超过50个字符。性别:可以选择男性和女性。
种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。
职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。其余属性均为整数。
本题目要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。
生命值=体力*20。
魔法值=(智力+智慧)*10。
3. 职业限制

4.初始属性:本题目要求力量、敏捷、体力、智力和智慧要求是随机值(利用随机数函数来取得随机数),但是五项属性的总和应该是100,并且应该和职业相关。
例如狂战士的体力和力量就要比较高,而巫师需要较高的智力,而祭司则需要较高的智慧。各职业初始属性的大致比例应遵从下表:

5.显示信息:最后向用户显示该角色的所有信息,然后询问用户是否满意,如用户不满意则重新创建,若用户满意则程序结束,并将用户创建角色的相关信息写入文件保存。
二.流程图及类图


三.完整代码

  1. Role类:定义角色的姓名、性别:
import java.util.Scanner;
public class Role {//定义角色的性别、姓名private String name;  //姓名private int gender; //性别//获取姓名public String getName() {return name;}//设置姓名public void setName(String name) {this.name = name;}//获取性别public int getGender() {return gender;}//设置性别public void setGender(int gender) {this.gender = gender;}//获取到角色的姓名跟性别public int  Define(){System.out.println("请输入您游戏角色的姓名:");Scanner in=new Scanner(System.in);this.name=in.next();while(true){System.out.println("请选择角色的性别:(0.男    1.女)");this.gender=in.nextInt();if(gender==0||gender==1){break;}else{System.out.println("请选择0或1来选择性别!");}}return gender;}//输出角色的姓名跟性别public void output(){System.out.println("===============================");System.out.println("姓名\t\t\t\t"+this.name);System.out.println("===============================");if(this.gender==0){System.out.println("性别\t\t\t\t"+"男");}else{System.out.println("性别\t\t\t\t"+"女");}}
}

2 define_raceANDOccupation类:定义角色的种族跟职业:

import java.util.Scanner;//角色的种族及职业
public class define_raceANDoccupation {private int race;//种族private int occupation;//职业private String[] races={"人类","精灵","兽人","矮人","元素"};private String[] occupations={"狂战士","圣骑士","刺客","猎手","祭司","巫师"};//获取角色种族信息public int getRace(){return this.race;}//获取角色职业信息public int getOccupation(){return this.occupation;}//设置角色种族public void setRace(){this.race=race;}//选择角色种族public int selectRace(){while(true){System.out.println("请输入您要选择的角色的种族:(0.人类  1.精灵  2.兽人   3.矮人  4.元素)");Scanner in=new Scanner(System.in);this.race=in.nextInt();if(race>=0&&race<=4){break;}else{System.out.println("请在0-4数字中选择角色种族!");}}return race;}//选择角色职业public int selectOccupation(){switch (race){case 0:while(true){System.out.println("请选择您要选择的职业:(0.狂战士  1.圣骑士  2.刺客   3.猎手   4.祭司   5.巫师)");Scanner in=new Scanner(System.in);this.occupation=in.nextInt();if(occupation>=0&&occupation<=5){break;}else{System.out.println("请在0-5数字中选择角色职业!");}}break;case 1:while(true){System.out.println("请选择您要选择的职业:(2.刺客   3.猎手   4.祭司   5.巫师)");Scanner in=new Scanner(System.in);this.occupation=in.nextInt();if(occupation>=2&&occupation<=5){break;}else{System.out.println("请在2-5数字中选择角色职业!");}}break;case 2:while(true){System.out.println("请选择您要选择的职业:(0.狂战士  3.猎手  4.祭司)");Scanner in=new Scanner(System.in);this.occupation=in.nextInt();if(occupation==0||occupation==3||occupation==4){break;}else{System.out.println("请在0,3,4数字中选择角色职业!");}}break;case 3:while(true){System.out.println("请选择您要选择的职业:(0.狂战士  1.圣骑士  4.祭司)");Scanner in=new Scanner(System.in);this.occupation=in.nextInt();if(occupation==0||occupation==1||occupation==4){break;}else{System.out.println("请在0,1,4数字中选择角色职业!");}}break;case 4:while(true){System.out.println("请选择您要选择的职业:(4.祭司   5.巫师)");Scanner in=new Scanner(System.in);this.occupation=in.nextInt();if(occupation==4||occupation==5){break;}else{System.out.println("请在4,5数字中选择角色职业!");}}break;default:break;}return occupation;}//输出种族及职业信息public void outRaceANDOccupation(){System.out.println("===============================");System.out.println("种族\t\t\t\t"+races[this.race]);System.out.println("===============================");System.out.println("职业\t\t\t\t"+occupations[this.occupation]);}
}

3 .Attribute类:为职业分配属性值:

import java.util.Random;
//角色属性
public class Attribute {private int strength;//力量private int agility;//敏捷private int power;//体力private int intelligenge;//智力private int wisdom;//智慧private int LP;//生命值private int MP;//魔法值//获取角色力量属性public int getStrength(){return strength;}//获取角色敏捷属性public int getAgility(){return agility;}//获取角色体力属性public int getPower(){return power;}//获取角色智力属性public int getIntelligenge(){return intelligenge;}//获取角色智慧属性public int getWisdom(){return wisdom;}//获取角色生命值属性public int getLP(){return LP;}//获取角色魔力值属性public int getMP(){return MP;}//生成角色属性public void autoattribute(int str,int agi,int pow,int intell,int wis){int sum=0;Random random=new Random();do{strength=random.nextInt(10)+str;agility=random.nextInt(10)+agi;power=random.nextInt(10)+pow;intelligenge=random.nextInt(10)+intell;wisdom=random.nextInt(10)+wis;sum=strength+agility+power+intelligenge+wisdom;}while(sum!=100);//生命值为体力的20倍LP=power*20;//法力值为智力与智慧之和的10倍MP=(intelligenge+wisdom)*10;}//初始化角色属性public void Initialize(int occupation){if(occupation==0){autoattribute(40,20,30,5,5);}if(occupation==1){autoattribute(25,15,30,20,10);}if(occupation==2){autoattribute(20,35,20,15,10);}if(occupation==3){autoattribute(15,40,15,10,20);}if(occupation==4){autoattribute(15,20,15,35,15);}if(occupation==5){autoattribute(10,20,10,20,40);}}//输出属性值public void OutputArrtibute(){System.out.println("===============================");System.out.println("力量\t\t\t\t"+this.strength);System.out.println("===============================");System.out.println("敏捷\t\t\t\t"+this.agility);System.out.println("===============================");System.out.println("体力\t\t\t\t"+this.power);System.out.println("===============================");System.out.println("智力\t\t\t\t"+this.intelligenge);System.out.println("===============================");System.out.println("智慧\t\t\t\t"+this.wisdom);System.out.println("===============================");System.out.println("生命值\t\t\t\t"+this.LP);System.out.println("===============================");System.out.println("魔力值\t\t\t\t"+this.MP);}}

4 .Test类:将角色的信息输出并保存在文件中:

import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;//游戏运行类
public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);boolean flag = true;//创建角色对象Role role = new Role();define_raceANDoccupation ro = new define_raceANDoccupation();Attribute att = new Attribute();do {role.Define();int race = ro.selectRace();ro.selectOccupation();//输出角色基本信息role.output();ro.outRaceANDOccupation();att.Initialize(ro.getOccupation());att.OutputArrtibute();//判断对创建的角色是否满意System.out.println("是否满意该角色?(Y/N)若不满意,则重新创建");String str = sc.next();if ("Y".equals(str) || "y".equals(str)) {break;}} while (flag);SaveInformation(role,ro,att);System.out.println("角色已成功保存!");}//将角色信息保存到文件中public static void SaveInformation(Role role,define_raceANDoccupation ro,Attribute att){try{//创建输出流对象FileWriter file=new FileWriter("C://Users//asus//Desktop//roles_information.txt",true);//字符缓冲输出流BufferedWriter bw=new BufferedWriter(file);bw.write("姓名\t\t\t\t"+role.getName());//输出换行bw.newLine();if(role.getGender()==0){bw.write("性别\t\t\t\t"+"男");}else{bw.write("性别\t\t\t\t"+"女");}bw.newLine();switch(ro.getRace()){case 0:bw.write("种族\t\t\t\t"+"人类");break;case 1:bw.write("种族\t\t\t\t"+"精灵");break;case 2:bw.write("种族\t\t\t\t"+"兽人");break;case 3:bw.write("种族\t\t\t\t"+"矮人");break;case 4:bw.write("种族\t\t\t\t"+"元素");break;default:break;}bw.newLine();switch(ro.getOccupation()) {case 0:bw.write("职业\t\t\t\t" + "狂战士");break;case 1:bw.write("职业\t\t\t\t" + "圣骑士");break;case 2:bw.write("职业\t\t\t\t" + "刺客");break;case 3:bw.write("职业\t\t\t\t" + "猎手");break;case 4:bw.write("职业\t\t\t\t" + "祭司");break;case 5:bw.write("职业\t\t\t\t" + "巫师");default:break;}bw.newLine();bw.write("力量\t\t\t\t"+att.getStrength());bw.newLine();bw.write("敏捷\t\t\t\t"+att.getAgility());bw.newLine();bw.write("体力\t\t\t\t"+att.getPower());bw.newLine();bw.write("智力\t\t\t\t"+att.getIntelligenge());bw.newLine();bw.write("智慧\t\t\t\t"+att.getWisdom());bw.newLine();bw.write("生命值\t\t\t\t"+att.getLP());bw.newLine();bw.write("魔力值\t\t\t\t"+att.getMP());//关闭文件bw.close();}catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}}
}

四.调试
1.在刚写出程序的时候,运行出来的结果是下图这样的。

种族跟职业的值没有被赋上值,而且下面那些属性值随机分配的也不对,于是我又重新检查了程序,发现,我随机函数那块没有写对。
2… 角色的属性值在运行界面出不来:


五.测试
1.程序运行处出来的结果:


2.文件中保存的结果

六.总结
.在这次程序中,我学会了java中随机函数的应用还有IO(输入输出)流的使用。
下面就这两方面总结:
4. 随机函数:参考https://blog.csdn.net/u012099869/article/details/50394644
①来源:random.nextInt() 为 java.util.Random类中的方法;
Math.random() 为 java.lang.Math 类中的静态方法。
②用法://两种生成对象方式:带种子和不带种子(两种方式的区别见注解)产生[0,n)的随机数
Random random = new Random();
int res = random.nextInt(n);
int res = (int)(Math.random() * n+1);
③总结:a.Math.random() 方法生成[0, 1)范围内的double类型随机数;Random类中的nextXxxx系列方法生成0-n的随机数;
b.Math.random() 线程安全,多线程环境能被调用;
c.如无特殊需求,则使用(int)(Math.random()*n)的方式生成随机数即可。
2. IO(输入输出)流
IO流根据不同的作用可分为不同的流,最常见的就是输入输出流,还有缓冲流。
我们经常在写程序的时候会使用缓冲流,这是因为缓冲流可以增加缓冲功能,避免频繁读取磁盘。
用法:以字符缓冲输出流为例:BufferWriter是在import.java.io.BufferWriter类中的方法;
与它一起使用时要使用异常处理:try{
//定义文件,字符缓冲输出流……
File file=new File(“你所存文件的路径”);B
ufferWriter bw=new BufferWriter(file);
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStaceTrace();
}
以上便是我对这次程序中重要的部分的总结!

小角色游戏-RPG游戏相关推荐

  1. cocos creator 角色扮演RPG游戏 动态创建动画,附8方向设置

    脚本是我根据官方的动态创建动画来的.因为我的素材是每个dong动作一个套图片,所以我是这样设置: 1,素材整理 一套素材包含:站立,跑步,攻击,技能,死亡,采集,每个动作都有8个方向的素材, 比较多少 ...

  2. 游戏理论研究四:RPG游戏

    游戏理论研究四(转)RPG游戏- - 作者:hitman     4.RPG游戏 RPG游戏 (角色扮演类游戏)无疑是最受欢迎的游戏类型.但很难对其进行确切定义 .本文采取用其性质或者说其构成要素来定 ...

  3. 游戏理论研究四(转)RPG游戏

    4.RPG游戏 RPG游戏 (角色扮演类游戏)无疑是最受欢迎的游戏类型.但很难对其进行确切定义 .本文采取用其性质或者说其构成要素来定义其本身的方法,在阐述了下述问题之后, 对RPG游戏的定义问题也就 ...

  4. 使用Wwise在3D RPG游戏中的声音设计思路

    使用Wwise在3D RPG游戏中的声音设计思路 https://blog.audiokinetic.com/zh/how-to-use-wwise-in-3d-rpg-game/ 大家好,随着Wwi ...

  5. Java创建RPG游戏角色

    ◆题目名称 创建RPG游戏角色 ◆题目分析 该程序需要用到有关类与对象的知识点,所以不能使用C语言来编写代码,这里我选择Java语言.本题目要求的游戏角色应有以下属性:名字.性别.种族.职业.力量.敏 ...

  6. RPG游戏自定义角色

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

  7. 角色扮演游戏(RPG)-------之谈

    角色扮演游戏(RPG)是深受广大游戏迷们喜爱的一种游戏, 它以独特的互动性和故事性吸引了无数的玩家.它向人们提供了超出现实生活的广阔的虚拟世界,使人们能够尝试扮演不同的角色,去经历和体验各种不同的人生 ...

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

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

  9. 纯java语言做rpg游戏_【纯JAVA语言做个RPG游戏】2.游戏界面及角色移动的基本实现...

    继上次做的地图编辑器,我大致的做了一个4000X4000的游戏地图数组,不过只画了一部分,以后要加什么新东西继续编辑这个地图就行了,保存在了一个文件中. 现在便可以继续下一步,做出游戏的大致界面了. ...

最新文章

  1. And it's over,And it's a new start
  2. Cetos 7 系统安装备注事项
  3. python sklearn 归一化_第3章 Sklearn概述
  4. 设计模式之Adapter
  5. Android 中的LayoutInflater的理解
  6. ICCV2021 2D和3D通用!新医疗影像自监督SOTA(代码已开源)
  7. 【总结】C# 线程同步技术(一)之 Join 方法
  8. 通过mysql实现leader election
  9. mysql 触发器和存储过程组合使用,实现定时触发操作
  10. InnerJoin分页导致的数据重复问题排查
  11. MessageBox.Show常用的2个方法
  12. java实现模拟考试系统_基于JAVA SWING考试模拟系统.doc
  13. Oracle dbv 坏块信息,【dbv】使用dbv工具检验数据文件是否有坏块
  14. RouterPassView——路由器密码查看工具
  15. 新年喜报!10人通过RHCA、60人通过RHCE!
  16. 计算机网络atm功能,自考计算机网络实用技术考核知识点之ATM原理
  17. JS 基础篇(音量调节器)
  18. 学习黑客必须要掌握的DOS命令全集
  19. Github 之提交代码
  20. PS Suite Studio 初探

热门文章

  1. web 打印 样式设置注意问题
  2. 微信登录老是间歇式失败
  3. 使用VMware Workstation 12 创建虚拟机的方法
  4. Qt QThread
  5. Ubuntu系统中安装maven详细教程
  6. MFC入门基础(十一)控件编程示例
  7. HTML习题(写两个日期输入框,一个可以自由选择年月日,一个只能在限定时间内选择)
  8. HDU4081:Qin Shi Huang's National Road System (任意两点间的最小瓶颈路)
  9. BJFU实验一链表部分题解整合
  10. 基于STM32的自平衡小车DIY