1. 程式人生 > >RPG角色生成器Python版

RPG角色生成器Python版

1.功能介紹

 幾乎所有的 RPG 遊戲(一種源自“龍與地下城”的遊戲型別)在進入遊戲時都會讓使用者自己來建立自己喜歡的角色。要求編寫一個簡化的建立遊戲角色的程式。

(1)遊戲角色應有的屬性

本題目要求的遊戲角色應有以下屬性:名字,性別,種族,職業,力量,敏捷,體力,智力,智慧,生命值和魔法值。

名字:不超過 50 個字元。

性別:可以選擇男性和女性。

種族:一共可選五個種族,人類,精靈,獸人,矮人和元素。

職業:可選六種職業,狂戰士,聖騎士,刺客,獵手,祭司和巫師。

其餘屬性均為整數。

本題目要求首先使用者輸入角色姓名,然後由使用者選擇角色性別,然後由使用者選擇種族,然後選擇職業,然後自動分配力量,敏捷,體力,智力和智慧屬性,並計算生命值和魔法值。

生命值 = 體力* 20 。

獲取人物基本資訊(姓名和性別):

class Message:
    # 獲取玩家姓名
    def getName(self):
        while True:
            self.user_name = input('請輸入您遊戲中的姓名:')
            if len(self.user_name) > 50:
                print("您輸入的姓名太長!")
            break
        return self.user_name

    # 獲取玩家角色性別
    def getSex(self):
        n = int(input('請輸入您遊戲人物的性別(0男,1女):'))
        if n == 0:
            self.user_sex = '男'
        elif n == 1:
            self.user_sex = '女'
        else:
            print('請在0-1之間選擇!')
        return self.user_sex

獲取人物的種族:

# 獲取玩家角色種族
    def getRace(self):
            self.user_race = int(input('請輸入您遊戲人物的種族(0.人類、1.精靈、2.獸人、3.矮人、4.元素):'))
            if self.user_race not in range(0, 5):
                print('您的輸入格式有誤,請在0-4之間選擇一個型別!')
            # 建立種族字典
            Race = {
                0: '人類',
                1: '精靈',
                2: '獸人',
                3: '矮人',
                4: '元素'
            }
            self.user_race = Race[self.user_race]      # 將使用者輸入的序號在字典中查詢賦值
            return self.user_race

 ( 2)職業限制

很多職業會限制某些種族選擇,例如獸人不能就職聖騎士等等,種族和職業的限制表如下:

職業/屬性

力量

敏捷

體力

智力

智慧

狂戰士

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

職業限制我做的比較簡單,用if語句根據人物的種族來直接給使用者選項,而且偷懶沒有加異常處理,程式碼也比較簡單,僅供參考。

    def getJob(self):
            if self.user_race == '人類':
                self.user_job = int(input('請輸入您遊戲人物的職業(0狂戰士、1聖騎士、2刺客、3獵手、4祭司、5巫師):'))
            elif self.user_race == '精靈':
                self.user_job = int(input('請輸入您遊戲人物的職業(2刺客、3獵手、4祭司、5巫師):'))
            elif self.user_race == '獸人':
                self.user_job = int(input('請輸入您遊戲人物的職業(0狂戰士、3獵手、4祭司):'))
            elif self.user_race == '矮人':
                self.user_job = int(input('請輸入您遊戲人物的職業(0狂戰士、1聖騎士、4祭司):'))
            elif self.user_race == '元素':
                self.user_job = int(input('請輸入您遊戲人物的職業(4祭司、5巫師):'))

            self.user_job = self.Job[self.user_job]
            return self.user_job

  (3)初始屬性

所以在要求使用者選擇職業時,輸出資訊裡面只能有使用者所選擇種族可以就職的職業。

本題目要求力量,敏捷,體力,智力和智慧要求是隨機值,但是五項屬性的總和應該是 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

例如,前面示意圖中的祭司的初始屬性,大致滿足該比例,但是應該是隨機的。

然後利用屬性值計算生命值和魔法值。

初始屬性是最難也是最重要的一部分!

首先,生成一個小隨機數,100減去這個隨機數的餘數按照每個屬性所佔比例分配到各個屬性上。然後將這個小隨機數加在任意一個屬性上。我是通過自定義兩個列表來實現的,一個是職業列表,另一個是屬性列表,屬性列表就是每個職業的屬性陣列,例如‘狂戰士’的屬性陣列就是[4,2,3,0.5,0.5]。最後將每個屬性生成的數字四捨五入。

class Attribute:
    power = 0
    agile = 0
    spirit = 2
    intelligence = 0
    wisdom = 0
    life = 0
  
    def getAttribute(self, career):

        kuang_list = [8, 4, 6, 1, 1]
        sheng_list = [5, 3, 6, 4, 2]
        ci_list = [4, 7, 4, 3, 2]
        lie_list = [3, 8, 3, 2, 4]
        ji_list = [3, 4, 3, 7, 3]
        wu_list = [2, 4, 2, 4, 8]
        attribute_list = [kuang_list, sheng_list, ci_list, lie_list, ji_list, wu_list]

        job_list = ['狂戰士', '聖騎士', '刺客', '獵手', '祭司', '巫師'].index(career)
        range_number = random.randint(10, 20)
        average_number = (100 - range_number) / 20

        self.power = average_number * attribute_list[job_list][0]
        self.agile = average_number * attribute_list[job_list][1]
        self.spirit = average_number * attribute_list[job_list][2]
        self.intelligence = average_number * attribute_list[job_list][3]
        self.wisdom = average_number * attribute_list[job_list][4]

        if job_list == 0:
            self.power += range_number
        elif job_list == 1:
            self.spirit += range_number
        elif job_list == 2 or 3:
            self.agile += range_number
        elif job_list == 4:
            self.intelligence += range_number
        elif job_list == 5:
            self.wisdom += range_number

        self.power = round(self.power)      
        self.agile = round(self.agile)
        self.spirit = round(self.spirit)
        self.intelligence = round(self.intelligence)
        self.wisdom = round(self.wisdom)
        self.life = round(self.spirit) * 20
   

( 4 )顯示資訊

最後向用戶顯示該角色的所有資訊,然後詢問使用者是否滿意,如使用者不滿意則重新建立,若使用者滿意則程式結束,並將使用者建立角色的相關資訊寫入檔案儲存。

顯示部分就很簡單,各位有什麼不懂得記得留言!

# 顯示輸出
class Show:
    def show(self):
        print('==' * 20)
        print('姓名:'+' ' * 6 + ' ', p.user_name)
        print('==' * 20)
        print('性別:' + ' ' * 6 + ' ', p.user_sex)
        print('==' * 20)
        print('種族:' + ' ' * 6 + ' ', q.user_race)
        print('==' * 20)
        print('職業:' + ' ' * 6 + ' ', q.user_job)
        print('==' * 20)
        print('力量:' + ' ' * 6 + ' ', attribute.power)
        print('==' * 20)
        print('敏捷:' + ' ' * 6 + ' ', attribute.agile)
        print('==' * 20)
        print('體力:' + ' ' * 6 + ' ', attribute.spirit)
        print('==' * 20)
        print('智力:' + ' ' * 6 + ' ', attribute.intelligence)
        print('==' * 20)
        print('智慧:' + ' ' * 6 + ' ', attribute.wisdom)
        print('==' * 20)
        print('生命值:' + ' ' * 6 + ' ', attribute.life)