一. 问题描述
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. thinkjs-定时任务
  2. 白话Elasticsearch57-数据建模之实现悲观锁并发控制的三种方式(未成功)
  3. 前端技巧:谷歌浏览器的font boosting[Text Autosizer]
  4. C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法。
  5. 如何在win下使用linux命令
  6. mysql正删改查返回值_MySQL增删改查
  7. 客户端主动断开连接_Go实现客户端和服务器抓包分析TCP三次握手和断开操作
  8. day15 匿名函数及常用内置函数
  9. 串口调试工具(Python2.7+pyserial+Tkinter)
  10. python做数组数据加密狗
  11. 分析华为鸿蒙操作系统的特点,申万宏源-通信行业系列深度研究和分析报告之华为鸿蒙操作系统全景解构.pdf...
  12. Excel 宏编程的常用代码
  13. 二次函数图像如何用计算机绘制,如何快速画二次函数图像
  14. mysql 的 3306、33060 端口区别
  15. html5div拖拽插件,jquery+html5多文件拖放上传插件jquery.filer
  16. Python 从 Excel 读取链接下载文件
  17. 揭秘换肤技术:实现系统滚动条换肤功能
  18. 2022-2028年全球与中国LED舞台照明行业市场前瞻与投资战略规划分析
  19. 强强联手 东钱湖变身高端度假区
  20. 深度学习基础 - 积分

热门文章

  1. 上海铭控:MD-S系列数字压力计获得计量器具型式批准证书
  2. 介绍一款小尺寸高通方案无线路由WiFi模块SKW103_支持无线中继,视频传输,智能网关
  3. (4)对象转为 Map
  4. MySQL视图_刘锋的博客
  5. dockerer-compose搭建单机clickhouse集群,工作中最新亲测能用,超详细
  6. 信号完整性(SI)电源完整性(PI)学习笔记(二十四)差分对与差分阻抗(四)
  7. 新公司2个月工作总结
  8. springboot LogBack日志压缩
  9. ros路由表条目注释
  10. Pandas读取txt去重合并文件