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)