一、实验内容

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)相关推荐

  1. java单机小游戏:flypybird

    目录 前言 一.大体思路 二.具体步骤 1.创建窗体类 2.创建一个获取图片的工具类 3.创建画布 4.把地面画上去 5.创建一个新线程让画面动起来 6.创建柱子类 7.实现柱子在画布上的移动 8.创 ...

  2. java实现抽奖游戏,java实现抽奖功能解析

    本文实例为大家分享了java实现抽奖功能的具体代码,供大家参考,具体内容如下 抽一个: 输入抽奖人数,生成随机数字进行抽奖. 比如:楼主抽幸运儿送游戏,选择前100楼抽取一个幸运儿. import j ...

  3. java写枪战游戏,Java版星球大战游戏(横向射击)

    Java版星球大战游戏(横向射击) 准备逐步整理一下手中的第三方Java游戏代码,将能用的部分融入到LGame里去,没有能用部分的就直接删掉. 但无论程式难易如何,也是原作者一番心血,不应将它们弃如敝 ...

  4. 用java写猜拳游戏,Java写人机猜拳游戏(可扩展其他游戏或其他参与者)

    初学Java,写一个控制台输入输出的小游戏,模拟人机猜拳.为了扩展性稍微强一些,这个小游戏代码有些复杂,但确实可以扩展其他游戏或者其他参与者的. 代码还有一些小问题,后面贴出来... /******* ...

  5. java单机麻将,经典单机麻将,安卓麻将,离线单机麻将:安卓什么单机麻将!单机安卓游戏麻将-南开游戏网...

    安卓什么单机麻将!单机安卓游戏麻将 2020-10-07 17:33:52 广告 安卓什么单机麻将 麻将探险之旅,完全免费,无广告,操作简单界面也不错,还能学算番 求推荐 安卓 单机麻将,无联网跟电脑 ...

  6. java设计连连看心得_基于Java的连连看游戏的设计与实现

    ComputerKnowledgeand Technology 电脑知识与技术 软件设计开发本栏目责任编辑:谢媛媛 第7卷第35期 (2011年12月) 9 基于Java的连连看游戏的设计与实现 陈珊 ...

  7. 【毕业设计】基于Java的五子棋游戏的设计(源代码+论文)

    文章目录 目录 一.系统设计 二.系统实现 源文件 目录 一.系统设计 1.1 程序结构说明 既然是JavaApplication,要实现网络对战,故采用C/S模式编写,程序包含7个独立的类文件-Ch ...

  8. 五子棋java设计引言_基于JAVA的五子棋游戏系统设计与实现报告.doc

    PAGE \* MERGEFORMAT PAGE \* MERGEFORMAT I 基于JAVA的五子棋游戏系统设计与实现 专 业 电子信息工程 学 生 董永杰 指导教师 曾玉 摘要 PAGE \* ...

  9. java版五子棋分析_基于JAVA的五子棋游戏系统设计实现分析.doc

    WORD格式整理版 WORD格式整理版 学习好帮手 学习好帮手 基于JAVA的五子棋游戏系统设计与实现 专 业 电子信息工程 学 生 董永杰 指导教师 曾玉 WORD格式整理版 学习好帮手 摘 要 目 ...

最新文章

  1. Win7 64 bit 激活工具
  2. 完美解决distinct中使用多个字段的方法
  3. Codeforces 988F. Rain and Umbrellas
  4. python顺时针旋转_Python之二维数组N*N顺时针旋转90度
  5. python hadoop streaming_Hadoop Streaming 使用及参数设置
  6. 从拉格朗日乘子法到SVM
  7. selenium-cookie相关的操作-0223
  8. Ubuntu系统安装Ruby的三种方法
  9. OpenShift 4 - Fedora CoreOS (4) - 用 Ignition 定制 CoreOS 的网络/存储等配置
  10. SHELL字符串使用总结
  11. ssh远程登录报错Warning: Permanently added ‘111.124.131.312‘ (ECDSA) to the list of known hosts.
  12. 基于天然概率的无需人为平衡的skiplist的美之展现
  13. 编程基本功:工作环境、运行环境,跟代码一样重要,都要备份
  14. C++高校水电费管理系统
  15. python爬取新浪博客_Python爬取韩寒所有新浪博客
  16. 2021哈工程计算机考研科目,2021考研大纲:哈尔滨工程大学计算机专业基础综合2021年硕士研究生自命题考试大纲...
  17. 电脑控制安卓手机的工具神器Scrcpy GUI
  18. 淘宝客搜索链接组成详解
  19. 每一篇博文都是与自己的一次对话
  20. Android SDK的级别

热门文章

  1. tar.gz 压缩和解压命令
  2. 如何理解Python 面向对象编程思想
  3. C#里如何远程直接连接SQL Server数据库服务器
  4. Directory和DirectoryInfo区别
  5. 记忆术的核心原理和重要操作程序
  6. sessionId的创建规则
  7. nacos基础(13):nacos服务发现之微服务协作调用demo
  8. OpenCV 生成水墨质感的图片 黑暗之魂三 只狼:影逝二度
  9. AMPAK正基AP6XXX系列WiFi移植(1)
  10. linux配置无线网卡驱动,Linux无线网络配置——无线网卡驱动安装与WLAN802.11配置...