小角色游戏-RPG游戏

news/2025/1/3 6:39:55/

一. 问题描述
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();
}
以上便是我对这次程序中重要的部分的总结!


http://www.ppmy.cn/news/296410.html

相关文章

游戏分类Game Categories

wy游学游戏分类 以下内容均为转载&#xff0c;资料全部来自网易游学 动作类&#xff08;ACT/ARPG&#xff09; 动作类游戏是强调操作对抗与博弈&#xff0c;并以动作操控达成特定目标的游戏&#xff0c;如ACT游戏及APRG游戏。 ACT游戏 动作游戏是一种广义上的游戏类型。以“动…

手机游戏游戏隐私政策

手机游戏隐私政策 更新时间&#xff1a;2021年10月26日 生效时间&#xff1a;2021年10月08日 实丰&#xff08;深圳&#xff09;网络科技有限公司是本游戏的开发商&#xff0c;已授权深圳市奇兔软件技术有限公司&#xff08;以下简称“我们”&#xff09;作为本游戏的运营商。…

手机游戏的简介和分类

其实说的简单一点&#xff0c;手机游戏就是能在手机上操作并进行的游戏。在早期的手机游戏中&#xff0c;“俄罗斯方块”与“贪吃蛇”的风光相信是不需要我在向大家介绍的了。 但是随着科技水平的进步&#xff0c;广大的手机用户早已不能满足与现状了&#xff0c;这个时候各种类…

游戏类型介绍

1.1 RPG&#xff1a;角色扮演游戏&#xff08;Role-playing game&#xff09;&#xff0c;简称为RPG。游戏类型的一种&#xff0c;宽泛的游戏类型。在游戏中&#xff0c;玩家负责扮演这个角色在一个写实或虚构世界中活动。玩家负责扮演一个或多个角色&#xff0c;并在一个结构化…

游戏...

《格斗之王2003》运行环境 Win9X/Win2000/WinXP/Win2003/ 软件星级 软件语言 简体中文  世界最大规模和最高水准的格斗大会。「KingOfFighters」卢卡尔死了&#xff0c;大蛇被封印了&#xff0c;nest也解体了。很多的谜团正在揭开。然而&#xff0c;很多时候很多幕后的东西&am…

常见的游戏类型介绍

介绍一下常见的游戏&#xff0c;游戏的类型有很多种 1&#xff1a;棋牌类&#xff1a; 代表&#xff1a;腾讯棋牌。这类游戏开发起来比较简单&#xff0c;因为业务逻辑很少&#xff0c;用的最多的就是定时器&#xff0c;玩家数据很少&#xff0c;正常来讲客户端只负责出牌和一…

Project0:小游戏

2.1 找到故障指令 FAIL Test output failed to match any acceptable form.Acceptable output:do-nothing: exit(162) Differences in diff -u format: - do-nothing: exit(162)Page fault at 0xc0000008: rights violation error reading page in user context.do-nothing: d…

游戏运营活动分类

一、活动目的 首先&#xff0c;设计一个活动肯定是有一定目的的。不是某个部门老大拍脑袋要啥就能做啥的。 游戏活动设计的好坏和游戏收入的好坏直接挂钩&#xff0c;不要为了出一个活动而出活动&#xff0c;那样没有任何意义&#xff0c;浪费时间也浪费精力。 这里要明确几…