java单机RPG_RPG游戏(JAVA)
一、实验内容
1.功能描述
几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。
2.游戏角色应有的属性
本题目要求的游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。
名字:不超过50个字符。
性别:可以选择男性和女性。
种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。
职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。
其余属性均为整数。
本题目要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。
生命值=体力*20。
魔法值=(智力+智慧)*10。
3.职业限制
很多职业会限制某些种族选择,例如兽人不能就职圣骑士等等,种族和职业的限制表如下:
种族/职业狂战士圣骑士刺客猎手祭司巫师
人类允许允许允许允许允许允许
精灵不允许不允许允许允许允许允许
兽人允许不允许不允许允许允许不允许
矮人允许允许不允许不允许允许不允许
元素不允许不允许不允许不允许允许允许
所以在要求用户选择职业时,输出信息里面只能有用户所选择种族可以就职的职业。
4.初始属性
本题目要求力量、敏捷、体力、智力和智慧要求是随机值(利用随机数函数来取得随机数),但是五项属性的总和应该是100,并且应该和职业相关。例如狂战士的体力和力量就要比较高,而巫师需要较高的智力,而祭司则需要较高的智慧。各职业初始属性的大致比例应遵从下表:
职业/属性力量敏捷体力智力智慧
狂战士40203055
圣骑士2515302010
刺客2035201510
猎手1540151020
祭司1520153515
巫师1020102040
例如,前面示意图中的祭司的初始属性,大致满足该比例,但是应该是随机的。
然后利用属性值计算生命值和魔法值。
5.显示信息
最后向用户显示该角色的所有信息,然后询问用户是否满意,如用户不满意则重新创建,若用户满意则程序结束,并将用户创建角色的相关信息写入文件保存。
二、源代码
import java.util.Random;
import java.util.Scanner;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
class Base{
int i;
String name;
String sex;
String racial;//种族 0为人类 1为精灵 2为兽人 3为矮人 4为元素
void setRacial() {
@SuppressWarnings("resource")
Scanner s=new Scanner(System.in);
System.out.print("0为人类 1为精灵 2为兽人 3为矮人 4为元素 请输入你的种族:"+"\n");
i=s.nextInt();
switch(i)
{case 0:racial="人类";break;
case 1:racial="精灵";break;
case 2:racial="兽人";break;
case 3:racial="矮人";break;
case 4:racial="元素";break;
}
}
String setName() {
Scanner s=new Scanner(System.in);
System.out.print("请输入你的姓名:"+"\n");
name=s.next();return name;
}
String Setsex() {
@SuppressWarnings("resource")
Scanner s=new Scanner(System.in);
System.out.print("请输入你的性别:"+"\n");
sex=s.next();return sex;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
public String getRacial() {
return racial;
}
}
class Racial extends Base{
int j;
String job;//职业 0为狂战士 1 为圣战士 2为刺客 3为猎手 4为祭司 5为巫师
void SetJob(Base b) {
switch(b.i)
{
case(0):Scanner s=new Scanner(System.in);System.out.print("0为狂战士 1为圣战士 2为刺客 3为猎手 4为祭司 5为巫师 请输入你的职业:"+"\n");
j=s.nextInt();break;
case(1): s=new Scanner(System.in);System.out.print("2为刺客 3为猎手 4为祭司 5为巫师 请输入你的职业:"+"\n");
j=s.nextInt(); s.close();break;
case(2):s=new Scanner(System.in);System.out.print("0为狂战士 3为猎手 4为祭司 请输入你的职业:"+"\n");
j=s.nextInt();s.close();break;
case(3):s=new Scanner(System.in);System.out.print("0为狂战士 1 为圣战士 4为祭司 请输入你的职业:"+"\n");
j=s.nextInt(); s.close();break;
case(4): s=new Scanner(System.in);System.out.print("4为祭司 5为巫师 请输入你的职业:"+"\n");
j=s.nextInt(); s.close();break;
}
switch(j)
{case 0:job="狂战士";break;
case 1:job="圣战士";break;
case 2:job="刺客";break;
case 3:job="猎手";break;
case 4:job="祭司";break;
case 5:job="巫师";break;
}
}
public String getJob() {
return job;
}
}
class Attribute extends Racial{
int strength;//力量
int quick;//敏捷
int phys;//体力
int intell;//智力
int wisdom;//智慧
int life;//生命值
int magic=phys*20;//魔法值
void setAttribute(Racial r){
int sum=0;Random random=new Random();
switch(r.j)
{
case(0): //狂战士
do{
strength=random.nextInt(45)+35;
quick=random.nextInt(25)+(15);//敏捷
phys=random.nextInt(35)+(25);//体力
intell=random.nextInt(8)+(3);//智力
wisdom=random.nextInt(8)+(3);//智慧
sum=strength+quick+phys+intell+wisdom;
} while(sum!=100);break;
case(1)://圣骑士
do{
strength=random.nextInt(30)+20;
quick=random.nextInt(20)+(10);//敏捷
phys=random.nextInt(35)+(25);//体力
intell=random.nextInt(25)+(15);//智力
wisdom=random.nextInt(8)+(15);//智慧
sum=strength+quick+phys+intell+wisdom;
} while(sum!=100);
break;
case(2)://刺客
do{
strength=random.nextInt(25)+15;
quick=random.nextInt(40)+(30);//敏捷
phys=random.nextInt(25)+(15);//体力
intell=random.nextInt(20)+(10);//智力
wisdom=random.nextInt(15)+(5);//智慧
sum=strength+quick+phys+intell+wisdom;
} while(sum!=100);
break;
case(3)://猎手
do{
strength=random.nextInt(20)+10;
quick=random.nextInt(45)+(35);//敏捷
phys=random.nextInt(20)+(10);//体力
intell=random.nextInt(15)+(8);//智力
wisdom=random.nextInt(25)+(15);//智慧
sum=strength+quick+phys+intell+wisdom;
} while(sum!=100);
break;
case(4)://祭司
do{
strength=random.nextInt(20)+10;
quick=random.nextInt(25)+(20);//敏捷
phys=random.nextInt(15)+(8);//体力
intell=random.nextInt(40)+(30);//智力
wisdom=random.nextInt(20)+(12);//智慧
sum=strength+quick+phys+intell+wisdom;
} while(sum!=100);
break;
case(5)://巫师
do{
strength=random.nextInt(15)+8;
quick=random.nextInt(25)+(15);//敏捷
phys=random.nextInt(15)+(8);//体力
intell=random.nextInt(25)+(15);//智力
wisdom=random.nextInt(45)+(35);//智慧
sum=strength+quick+phys+intell+wisdom;
} while(sum!=100);
break;
}
}
public int getStrength() {
return strength;
}
public int getQuick() {
return quick;
}
public int getPhys() {
return phys;
}
public int getIntell() {
return intell;
}
public int getWisdom() {
return wisdom;
}
public int getLife() {
return (phys*20);
}
public int getMagic() {
return ((wisdom+intell)*10);
}
void save(Base base,Racial racial ) {
try {
FileWriter desFile=new FileWriter("game.txt",true);
BufferedWriter out=new BufferedWriter(desFile);
out.write("姓名:"+base.getName()+" 性别:"+base.getSex()+" 种族:"+base.getRacial()+" 职业:"+racial.getJob()+
" 属性:"+"力量:"+this.getStrength()+" 敏捷:"+this.getQuick()+" 体力:"+this.getPhys()+" 智力:"
+this.getIntell()+" 智慧:"+this.getWisdom()+" 生命值:"+this.getLife()+
" 魔法值:"+this.getMagic());out.close();
} catch(FileNotFoundException e) {e.printStackTrace();}
catch(IOException e) {e.printStackTrace();}
System.out.println("保存成功!!!");
}
}
public class Test {
public static void main(String[] args) {
Base base=new Base();
base.setName();
base.Setsex();
base.setRacial();
Racial racial=new Racial();
racial.SetJob(base);
Attribute attribute=new Attribute();
attribute.setAttribute(racial);
System.out.println("你的角色的具体属性为:\n"+"姓名:"+base.getName()+" 性别:"+base.getSex()+" 种族:"+base.getRacial()+" 职业:"+racial.getJob()+
" 属性:"+"力量:"+attribute.getStrength()+" 敏捷:"+attribute.getQuick()+" 体力:"+attribute.getPhys()+" 智力:" +attribute.getIntell()+" 智慧:"+attribute.getWisdom()+" 生命值:"+attribute.getLife()+" 魔法值:"+attribute.getMagic());
attribute.save(base, racial);
}
}
三、学习心得
使用FileWriter时,如果指定的文件夹不存在,会自动创建一个文件,如果指定的文件已经存在那么会覆盖写入,原来文件中的内容会被覆盖掉。如果不想被覆盖掉,而是在原来内容的基础上写入,就需要用另外一种重载形式的构造方法,FileWriter(String FileName,Boolean append),第二个参数如果是true就追加写入。
标签:case,JAVA,游戏,random,20,break,nextInt,RPG,15
来源: https://blog.csdn.net/qq_44267206/article/details/89522592
java单机RPG_RPG游戏(JAVA)相关推荐
- java单机小游戏:flypybird
目录 前言 一.大体思路 二.具体步骤 1.创建窗体类 2.创建一个获取图片的工具类 3.创建画布 4.把地面画上去 5.创建一个新线程让画面动起来 6.创建柱子类 7.实现柱子在画布上的移动 8.创 ...
- java实现抽奖游戏,java实现抽奖功能解析
本文实例为大家分享了java实现抽奖功能的具体代码,供大家参考,具体内容如下 抽一个: 输入抽奖人数,生成随机数字进行抽奖. 比如:楼主抽幸运儿送游戏,选择前100楼抽取一个幸运儿. import j ...
- java写枪战游戏,Java版星球大战游戏(横向射击)
Java版星球大战游戏(横向射击) 准备逐步整理一下手中的第三方Java游戏代码,将能用的部分融入到LGame里去,没有能用部分的就直接删掉. 但无论程式难易如何,也是原作者一番心血,不应将它们弃如敝 ...
- 用java写猜拳游戏,Java写人机猜拳游戏(可扩展其他游戏或其他参与者)
初学Java,写一个控制台输入输出的小游戏,模拟人机猜拳.为了扩展性稍微强一些,这个小游戏代码有些复杂,但确实可以扩展其他游戏或者其他参与者的. 代码还有一些小问题,后面贴出来... /******* ...
- java单机麻将,经典单机麻将,安卓麻将,离线单机麻将:安卓什么单机麻将!单机安卓游戏麻将-南开游戏网...
安卓什么单机麻将!单机安卓游戏麻将 2020-10-07 17:33:52 广告 安卓什么单机麻将 麻将探险之旅,完全免费,无广告,操作简单界面也不错,还能学算番 求推荐 安卓 单机麻将,无联网跟电脑 ...
- java设计连连看心得_基于Java的连连看游戏的设计与实现
ComputerKnowledgeand Technology 电脑知识与技术 软件设计开发本栏目责任编辑:谢媛媛 第7卷第35期 (2011年12月) 9 基于Java的连连看游戏的设计与实现 陈珊 ...
- 【毕业设计】基于Java的五子棋游戏的设计(源代码+论文)
文章目录 目录 一.系统设计 二.系统实现 源文件 目录 一.系统设计 1.1 程序结构说明 既然是JavaApplication,要实现网络对战,故采用C/S模式编写,程序包含7个独立的类文件-Ch ...
- 五子棋java设计引言_基于JAVA的五子棋游戏系统设计与实现报告.doc
PAGE \* MERGEFORMAT PAGE \* MERGEFORMAT I 基于JAVA的五子棋游戏系统设计与实现 专 业 电子信息工程 学 生 董永杰 指导教师 曾玉 摘要 PAGE \* ...
- java版五子棋分析_基于JAVA的五子棋游戏系统设计实现分析.doc
WORD格式整理版 WORD格式整理版 学习好帮手 学习好帮手 基于JAVA的五子棋游戏系统设计与实现 专 业 电子信息工程 学 生 董永杰 指导教师 曾玉 WORD格式整理版 学习好帮手 摘 要 目 ...
最新文章
- Win7 64 bit 激活工具
- 完美解决distinct中使用多个字段的方法
- Codeforces 988F. Rain and Umbrellas
- python顺时针旋转_Python之二维数组N*N顺时针旋转90度
- python hadoop streaming_Hadoop Streaming 使用及参数设置
- 从拉格朗日乘子法到SVM
- selenium-cookie相关的操作-0223
- Ubuntu系统安装Ruby的三种方法
- OpenShift 4 - Fedora CoreOS (4) - 用 Ignition 定制 CoreOS 的网络/存储等配置
- SHELL字符串使用总结
- ssh远程登录报错Warning: Permanently added ‘111.124.131.312‘ (ECDSA) to the list of known hosts.
- 基于天然概率的无需人为平衡的skiplist的美之展现
- 编程基本功:工作环境、运行环境,跟代码一样重要,都要备份
- C++高校水电费管理系统
- python爬取新浪博客_Python爬取韩寒所有新浪博客
- 2021哈工程计算机考研科目,2021考研大纲:哈尔滨工程大学计算机专业基础综合2021年硕士研究生自命题考试大纲...
- 电脑控制安卓手机的工具神器Scrcpy GUI
- 淘宝客搜索链接组成详解
- 每一篇博文都是与自己的一次对话
- Android SDK的级别
热门文章
- tar.gz 压缩和解压命令
- 如何理解Python 面向对象编程思想
- C#里如何远程直接连接SQL Server数据库服务器
- Directory和DirectoryInfo区别
- 记忆术的核心原理和重要操作程序
- sessionId的创建规则
- nacos基础(13):nacos服务发现之微服务协作调用demo
- OpenCV 生成水墨质感的图片 黑暗之魂三 只狼:影逝二度
- AMPAK正基AP6XXX系列WiFi移植(1)
- linux配置无线网卡驱动,Linux无线网络配置——无线网卡驱动安装与WLAN802.11配置...