RPG角色生成器Python版

RPG角色生成器

1.功能描述

几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。
RPG角色生成器Python版

2.游戏角色应有的属性

本题目要求的游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。

名字:不超过50个字符。

性别:可以选择男性和女性。

种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。

职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。

其余属性均为整数。

本题目要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。

生命值=体力*20。

魔法值=(智力+智慧)*10。

3.职业限制

很多职业会限制某些种族选择,例如兽人不能就职圣骑士等等,种族和职业的限制表如下:
RPG角色生成器Python版

所以在要求用户选择职业时,输出信息里面只能有用户所选择种族可以就职的职业。

4.初始属性

本题目要求力量、敏捷、体力、智力和智慧要求是随机值(利用随机数函数来取得随机数),但是五项属性的总和应该是100,并且应该和职业相关。例如狂战士的体力和力量就要比较高,而巫师需要较高的智力,而祭司则需要较高的智慧。各职业初始属性的大致比例应遵从下表:

RPG角色生成器Python版

例如,前面示意图中的祭司的初始属性,大致满足该比例,但是应该是随机的。

然后利用属性值计算生命值和魔法值。

5.显示信息

最后向用户显示该角色的所有信息,然后询问用户是否满意,如用户不满意则重新创建,若用户满意则程序结束,并将用户创建角色的相关信息写入文件保存。

#!/usr/bin/env python
# encoding: utf-8
‘’’
@author: GaryLee
@software: PyCharm
@file: RPG角色生成器.py
@time: 2018/10/3 16:37
‘’’
import random

class Role:
    # 设定游戏角色名字
    def setName(self):
        while True:
            self.name = input("请输入您的游戏名并确保长度小于50:")
            if len(self.name) > 50:
                print("您的名字过长,请重新输入")
                continue
            break
        return self.name
    # 设定角色性别
    def setSex(self):
        while True:
            n = int(input("请选择您的角色性别:0:男,1:女"))
            if n == 0:
                self.sex = '男'
                break
            elif n == 1:
                self.sex = '女'
                break
            else:
                print("请在0或1之间选择!")
                continue
        return self.sex
    # 设定角色种族
    def setRace(self):
        while True:
            n = int(input("请选择您的角色种族:0:人类,1:精灵,2:兽人,3:矮人,4:元素"))
            if n not in range(0,5):
                print("请在0-5之间选择")
                continue
            Race = { 0: '人类',1: '精灵',2: '兽人',3: '矮人',4: '元素'}
            self.race = Race[n]
            break
        return self.race
    # 设定角色职业
    def setJob(self):
        if self.race == '人类':
            while True:
                n = int(input("请输入您游戏人物的职业(0:狂战士,1:圣骑士,2:刺客,3:猎手,4:祭司,5:巫师):"))
                if n not in range(0,6):
                    print("请在0-5之间选择输入!")
                    continue
                else:
                    break
        elif self.race == '精灵':
            while True:
                n = int(input("请输入您游戏人物的职业(2:刺客,3:猎手,4:祭司,5:巫师):"))
                if n not in range(2,6):
                    print("请在2-5之间选择输入!")
                    continue
                else:
                    break
        elif self.race == '兽人':
            while True:
                n = int(input("请输入您游戏人物的职业(0:狂战士,3:猎手,4:祭司):"))
                if n not in [0,3,4]:
                    print("请在0,3,4之间选择输入!")
                    continue
                else:
                    break
        elif self.race == '矮人':
            while True:
                n = int(input("请输入您游戏人物的职业(0:狂战士,1:圣骑士,4:祭司):"))
                if n not in [0,1,4]:
                    print("请在0,1,4之间选择输入!")
                    continue
                else:
                    break
        elif self.race == '元素':
            while True:
                n = int(input("请输入您游戏人物的职业(4:祭司,5:巫师):"))
                if n not in [4,5]:
                    print("请在4,5之间选择输入!")
                    continue
                else:
                    break

        Job = {0:'狂战士',1:'圣骑士',2:'刺客',3:'猎手',4:'祭司',5:'巫师'}
        self.job = Job[n]
        return self.job

    def setAttribute(self):
        self.power = 0            #力量
        self.agile = 0            #敏捷
        self.strength = 0         #体力
        self.intelligence = 0     #智力
        self.wisdom = 0           #智慧
        self.life = 0             #生命值
        self.magicpoint = 0       #魔法值
        if self.job == '狂战士':
            self.power = random.randint(35,40)
            self.agile = random.randint(15,20)
            self.strength = random.randint(25,30)
            self.intelligence = random.randint(0,100-self.race-self.agile-self.strength)
            self.wisdom = 100-self.power-self.agile-self.strength-self.intelligence
        elif self.job == '圣骑士':
            self.power = random.randint(20,25)
            self.strength = random.randint(25,30)
            self.intelligence = random.randint(15,20)
            self.agile = random.randint(0, 100 - self.power - self.strength - self.intelligence)
            self.wisdom = 100-self.power-self.agile-self.strength-self.intelligence
        elif self.job == '刺客':
            self.power = random.randint(15,20)
            self.agile = random.randint(30,35)
            self.strength = random.randint(15,20)
            self.intelligence = random.randint(0,100-self.race-self.agile-self.strength)
            self.wisdom = 100-self.power-self.agile-self.strength-self.intelligence
        elif self.job == '猎手':
            self.power = random.randint(10,15)
            self.agile = random.randint(35,40)
            self.strength = random.randint(10,15)
            self.wisdom = random.randint(15,20)
            self.intelligence = random.randint(0, 100 - self.power - self.agile - self.strength - self.wisdom)
        elif self.job == '祭司':
            self.power = random.randint(10,15)
            self.agile = random.randint(15,20)
            self.strength = random.randint(10,15)
            self.intelligence = random.randint(30,35)
            self.wisdom = 100-self.power-self.agile-self.strength-self.intelligence
        elif self.job == '巫师':
            self.agile = random.randint(15,20)
            self.intelligence = random.randint(15,20)
            self.wisdom = random.randint(35,40)
            self.power = random.randint(0,100-self.agile-self.intelligence-self.wisdom)
            self.strength = 100-self.agile-self.intelligence-self.wisdom-self.power
        self.life = self.strength * 20
        self.magicpoint = (self.intelligence + self.wisdom) * 10
        print('\n','力量:',self.power,'\n','敏捷:',self.agile,'\n','体力:',self.strength,'\n','智力:',self.intelligence,'\n','智慧:',self.wisdom,'\n','生命值:',self.life,'\n','魔法值:',self.magicpoint,'\n')

while True:
    r = Role()
    r.setName()
    r.setSex()
    r.setRace()
    r.setJob()
    r.setAttribute()
    n = int(input("您是否满意目前的角色:0:满意,1:不满意:"))
    if n == 0:
        break
    elif n == 1:
        print("请重新建立角色")
        continue
    else:
        print("请在0或1之中输入:")