rpg角色生成器java版本

作業說明:
題目:
1.功能描述
幾乎所有的RPG遊戲(一種源自《龍與地下城》的遊戲類型)在進入遊戲時都會讓用戶自己來創建自己喜歡的角色。本次上機要求編寫一個簡化的創建遊戲角色的程序。

2.遊戲角色應有的屬性
本題目要求的遊戲角色應有以下屬性:名字、性別、種族、職業、力量、敏捷、體力、智力、智慧、生命值和魔法值。
名字:不超過50個字符。
性別:可以選擇男性和女性。
種族:一共可選五個種族,人類、精靈、獸人、矮人和元素。
職業:可選六種職業,狂戰士、聖騎士、刺客、獵手、祭司和巫師。
其餘屬性均爲整數。
本題目要求首先用戶輸入角色姓名,然後由用戶選擇角色性別,然後由用戶選擇種族,然後選擇職業,然後自動分配力量、敏捷、體力、智力和智慧屬性,並計算生命值和魔法值。
生命值=體力*20。
魔法值=(智力+智慧)*10。
3.職業限制
很多職業會限制某些種族選擇,例如獸人不能就職聖騎士等等,種族和職業的限制表如下:
種族/職業 狂戰士 聖騎士 刺客 獵手 祭司 巫師
人類 允許 允許 允許 允許 允許 允許
精靈 不允許 不允許 允許 允許 允許 允許
獸人 允許 不允許 不允許 允許 允許 不允許
矮人 允許 允許 不允許 不允許 允許 不允許
元素 不允許 不允許 不允許 不允許 允許 允許
所以在要求用戶選擇職業時,輸出信息裏面只能有用戶所選擇種族可以就職的職業。
4.初始屬性
本題目要求力量、敏捷、體力、智力和智慧要求是隨機值(利用隨機數函數來取得隨機數),但是五項屬性的總和應該是100,並且應該和職業相關。例如狂戰士的體力和力量就要比較高,而巫師需要較高的智力,而祭司則需要較高的智慧。各職業初始屬性的大致比例應遵從下表:
職業/屬性 力量 敏捷 體力 智力 智慧
狂戰士 40 20 30 5 5
聖騎士 25 15 30 20 10
刺客 20 35 20 15 10
獵手 15 40 15 10 20
祭司 15 20 15 35 15
巫師 10 20 10 20 40
例如,前面示意圖中的祭司的初始屬性,大致滿足該比例,但是應該是隨機的。
然後利用屬性值計算生命值和魔法值。
5.顯示信息
最後向用戶顯示該角色的所有信息,然後詢問用戶是否滿意,如用戶不滿意則重新創建,若用戶滿意則程序結束,並將用戶創建角色的相關信息寫入文件保存。

思路:
用面向對象思路,創建好輸入姓名,性別,種族,職業函數,用鍵盤輸入數字,選擇信息。根據所選職業隨機分配屬性,然後詢問是否願意,如果不滿意則重新建立,滿意則保存在txt文件中。
職業限制的方法:用race_chocie保存種族信息,然後用swtich語句根據race_choice來選擇不同的職業。
隨機分配屬性的辦法:用基本屬性+Math.random函數分配

運行結果:

在這裏插入圖片描述

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class rgpCreate  {
	public static String dsex[]={"男","女"};             
	public static String drace[]={"人類","精靈","獸人","矮人","元素"};
	public static String doccuption[]={"狂戰士","聖騎士","刺客","獵手","祭司","巫師"};
	public int race_choice;                    //種族選擇
	public int occuption_choice;               //職業選擇
	public String name;
	public int sex_choice;                    //性別選擇
	public int strength;	//力量
	public int agility;	//敏捷
	public int physical;	//體力
    public int intelligence;	//智力
	public int wisdom;	//智慧
	public int HP;	//生命值
	public int MP;	//法力值
	

	public static void main(String[] args) {
		rgpCreate rgp=new rgpCreate();                 //創建一個rgp對象
		int i = 1;
		while(i != 0) {
			rgp.getBaseinformation();
			rgp.getRace();
			rgp.getOccuption();
			rgp.random();
			System.out.println("0願意,1不願意");
			Scanner sc=new Scanner(System.in);
			i = sc.nextInt();
		}
		System.out.println("創建成功");
		rgp.outPut();
		rgp.save();

	}
	/*
	 * 姓名性別輸入函數 
	 * */
	public int getBaseinformation(){
    	Scanner sc=new Scanner(System.in);
    	
		System.out.println("請輸入您的暱稱:");
		name=sc.nextLine();	
		while(name.length()>50){
			
			System.out.println("暱稱超過50位字符!,請重新輸入");
		}
		while(true){ 
			System.out.println("請選擇您的性別:0爲男性,1爲女性。");         
		    sex_choice=sc.nextInt();
			if(sex_choice==0||sex_choice==1){
				break;                                //驗證輸入正確性,正確則跳出,否則輸出提示。
			}
			else
				System.out.println("請輸入0或1選擇性別");
		}
		return sex_choice;
	}
/*
 * 種族選擇函數
 * */
	public int getRace(){
		Scanner sc =new Scanner(System.in);
		System.out.println("請選擇種族:0爲人類,1爲精靈,2爲獸人,3爲矮人,4爲元素");
		race_choice=sc.nextInt();
		while(true){
			if(race_choice>=0&&race_choice<=4){        //驗證輸入正確性,正確則跳出,否則輸出提示。
				break;
			}
			else
				
				System.out.println("請輸入0-4的數字選擇種族");
		}
		return race_choice;
	  }
	/*
	 * 職業選擇函數
	 * */
	  public int getOccuption() {
		Scanner sc=new Scanner(System.in);
		switch(race_choice){
		case 0:
			while(true){
				System.out.println("請選擇您的職業:0狂戰士,1聖騎士,2刺客,3獵手,4祭司,5巫師");  //人類所選職業
				occuption_choice=sc.nextInt();
				if(occuption_choice>=0&&occuption_choice<=5){      //驗證輸入正確性,正確則跳出,否則輸出提示。
					break;
				}
				else
					System.out.println("請輸入0-5之間的數字選擇職業!!");
			}
			break;
		case 1:	
			while(true){
				System.out.println("請選擇您的職業:2刺客,3獵手,4祭司,5巫師");  //精靈所選職業
				occuption_choice=sc.nextInt();
				if(occuption_choice>=2&&occuption_choice<=5){     //驗證輸入正確性,正確則跳出,否則輸出提示。
					break;
				}
				else
					System.out.println("請輸入2-5之間的數字選擇職業!!");
			}
			break;
		case 2:
			while(true){
				System.out.println("請選擇您的職業:0狂戰士,3獵手,4祭司");  //獸人所選職業
				occuption_choice=sc.nextInt();
				if(occuption_choice==0||occuption_choice==3||occuption_choice==4){
					break;                                   //驗證輸入正確性,正確則跳出,否則輸出提示。
				}
				else
					System.out.println("請輸入0或3或4來選擇職業!!");
			}
			break;
		case 3:
			while(true){
				System.out.println("請選擇您的職業:0狂戰士,1聖騎士,4祭司");  //矮人所選職業
				occuption_choice=sc.nextInt();
				if(occuption_choice==0||occuption_choice==1||occuption_choice==4){
					break;                                //驗證輸入正確性,正確則跳出,否則輸出提示。
				}
				else
					System.out.println("請輸入0或1或4來選擇職業!!");
			}
			break;
		case 4:
			while(true){
				System.out.println("請選擇您的職業:4祭司,5巫師");  //元素所選職業
				occuption_choice=sc.nextInt();
				if(occuption_choice==4||occuption_choice==5){   //驗證輸入正確性,正確則跳出,否則輸出提示。
					break;
				}
				else
					System.out.println("請輸入4或5來選擇職業!!");
			}
			break;
		}
		return occuption_choice;
	 }
/*
 * 屬性隨機分配函數
 * */	  
	public void random(){
			if(occuption_choice==0){                       //人類的屬性值分配
				strength=(int)(40+Math.random()*10-5);
				agility=(int)(20+Math.random()*10-5);
				physical=(int)(30+Math.random()*10-5);
				intelligence=(int)(5+Math.random()*10-5);
				wisdom=100-strength-agility-physical-intelligence;
				HP = physical * 20;//生命值爲體力的20倍
				MP = (wisdom + intelligence) * 10;//魔法值爲智力與智慧的10倍

			}
			else if(occuption_choice==1){                        //聖騎士的屬性值分配
				strength=(int)(25+Math.random()*10-5);
				agility=(int)(15+Math.random()*10-5);
				physical=(int)(30+Math.random()*10-5);
				intelligence=(int)(20+Math.random()*10-5);
				wisdom=100-strength-agility-physical-intelligence;
				HP = physical * 20;//生命值爲體力的20倍
				MP = (wisdom + intelligence) * 10;//魔法值爲智力與智慧的10倍

			}
			else if(occuption_choice==2){                       //刺客的屬性值分配
				strength=(int)(20+Math.random()*10-5);
				agility=(int)(35+Math.random()*10-5);
				physical=(int)(20+Math.random()*10-5);
				intelligence=(int)(15+Math.random()*10-5);
				wisdom=100-strength-agility-physical-intelligence;
				HP = physical * 20;//生命值爲體力的20倍
				MP = (wisdom + intelligence) * 10;//魔法值爲智力與智慧的10倍

			}
			else if(occuption_choice==3){                       //獵手的屬性值分配
				strength=(int)(15+Math.random()*10-5);
				agility=(int)(40+Math.random()*10-5);
				physical=(int)(15+Math.random()*10-5);
				intelligence=(int)(10+Math.random()*10-5);
				wisdom=100-strength-agility-physical-intelligence;
				HP = physical * 20;//生命值爲體力的20倍
				MP = (wisdom + intelligence) * 10;//魔法值爲智力與智慧的10倍

			}
			else if(occuption_choice==4){                       //祭司的屬性值分配
				strength=(int)(15+Math.random()*10-5);
				agility=(int)(20+Math.random()*10-5);
				physical=(int)(15+Math.random()*10-5);
				intelligence=(int)(35+Math.random()*10-5);
				wisdom=100-strength-agility-physical-intelligence;
				HP = physical * 20;//生命值爲體力的20倍
				MP = (wisdom + intelligence) * 10;//魔法值爲智力與智慧的10倍

			}
			else if(occuption_choice==5){                       //巫師的屬性值分配
				strength=(int)(10+Math.random()*10-5);
				agility=(int)(20+Math.random()*10-5);
				physical=(int)(10+Math.random()*10-5);
				intelligence=(int)(20+Math.random()*10-5);
				wisdom=100-strength-agility-physical-intelligence;
				HP = physical * 20;//生命值爲體力的20倍
				MP = (wisdom + intelligence) * 10;//魔法值爲智力與智慧的10倍

			}
		}
	/*
	 * 打印出玩家信息函數
	 * */
		public String outPut(){
			System.out.println("===============================");
			System.out.println("姓名: "+name);
			System.out.println("===============================");
			System.out.println("性別 : "+dsex[sex_choice]);
			System.out.println("===============================");
			System.out.println("種族 : "+drace[race_choice]);
			System.out.println("===============================");
			System.out.println("職業 : "+doccuption[occuption_choice]);
			System.out.println("===============================");
			System.out.println("力量 : "+strength);
			System.out.println("===============================");
			System.out.println("敏捷 : "+agility);
			System.out.println("===============================");
			System.out.println("體力 : "+physical);
			System.out.println("===============================");
			System.out.println("智力 : "+intelligence);
			System.out.println("===============================");
			System.out.println("智慧 : "+wisdom);
			System.out.println("===============================");
			System.out.println("HP: "+HP);
			System.out.println("===============================");
			System.out.println("MP: "+MP);
			System.out.println("===============================");
			return (name+dsex[sex_choice]+drace[race_choice]+doccuption[occuption_choice]+strength+agility+physical+intelligence+wisdom+HP+MP);
		}

/*
 * 將玩家信息儲存進文件函數
 * */
public void save(){
	    File file = new File("D://d.txt");			
		try (PrintWriter output = new PrintWriter(file);){
			output.println("姓名: "+name);
			output.println("性別 : "+dsex[sex_choice]);
			output.println("種族 : "+drace[race_choice]);
			output.println("職業 : "+doccuption[occuption_choice]);
			output.println("力量 : "+strength);
			output.println("敏捷 : "+agility);
			output.println("體力 : "+physical);
			output.println("智力 : "+intelligence);
			output.println("智慧 : "+wisdom);
			output.println("HP: "+HP);
			output.println("MP: "+MP);
			output.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();	
		}
		
	}
 
		
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章