首頁 > 軟體

Python實現人生重開模擬器小遊戲講解

2023-01-22 14:01:22

思維導圖

前言

前面我們已經學了python中的順序,選擇,迴圈語句以及break和continue的使用,下面根據這幾個語句,來講解一個程式碼案例

一、設定初始屬性

相信大家都玩過人生重開模擬器這樣型別的小遊戲。

在遊戲中,一般會有四個屬性

  • 顏值(face)
  • 體質(strong)
  • 智力(iq)
  • 家境(home)

在這裡可以約定一下屬性的範圍,以及4個屬性的總和不能超過多少。

我們約定屬性的範圍為1-10,總和不得超過20.

1.遊戲標題

在這裡可以先把遊戲的標題列印在開頭

print("******************************************")
print("                                          ")
print("            人生重開模擬器                   ")
print("                                          ")
print("         花有重開日 人無在少年                ")
print("                                          ")
print("******************************************")

2.屬性的初始化

這四個屬性可以由玩家自己輸入,這就用到了之前講到的input函數,通過這個函數,來完成屬性的初始化。

 print("請設定初始屬性(可用屬性值:20)")
 face = int(input("設定顏值(1-10)"))
 iq = int(input("設定智力(1-10)")) 
 strong = int(input("設定體質(1-10)"))   
 home = int(input("設定家境(1-10)"))

這樣就完成了屬性的輸入,這樣並不完善,前面我們已經約定過了,屬性不得超過多少,總和不得超過多少,所以下面要用我們學到過的if-elif-else語句,對這四個屬性和總和進行判斷。

    if face < 1 or face > 10:
        print("顏值設定錯誤")
        continue
    elif iq < 1 or iq > 10:
        print("智力設定錯誤")
        continue
    elif strong < 1 or strong > 10:
        print("體質設定錯誤")
        continue
    elif home < 1 or home > 10:
        print("家境設定錯誤")
        continue
    elif face + iq + strong + home > 20:
        print("總屬性超過20")
        continue
    print("初始屬性設定完畢")
    print(f"顏值:{face},體質:{strong},智力:{iq},家境:{home}")

每當某一個屬性不符合的時候,就把原因列印的螢幕上並重新輸入屬性值,如果符合約定,則把四個屬性值列印在螢幕上。

當某個判斷出現錯誤的時候,程式碼會直接結束程式,而不會讓玩家迴圈輸出,這是因為缺少了一個迴圈,那麼我們就要設定一個能夠使得屬性初始化但不符合約定,就要讓玩家重新輸入屬性值的功能。這個時候就用到了while迴圈

while True:
    print("請設定初始屬性(可用屬性值:20)")
    face = int(input("設定顏值(1-10)"))
    iq = int(input("設定智力(1-10)"))
    strong = int(input("設定體質(1-10)"))
    home = int(input("設定家境(1-10)"))

    if face < 1 or face > 10:
        print("顏值設定錯誤")
        continue
    elif iq < 1 or iq > 10:
        print("智力設定錯誤")
        continue
    elif strong < 1 or strong > 10:
        print("體質設定錯誤")
        continue
    elif home < 1 or home > 10:
        print("家境設定錯誤")
        continue
    elif face + iq + strong + home > 20:
        print("總屬性超過20")
        continue
    print("初始屬性設定完畢")
    print(f"顏值:{face},體質:{strong},智力:{iq},家境:{home}")

當所有判斷都滿足約定的時候,就不能在繼續迴圈了,要結束程式,這個時候就break就派上了用場,滿足判定,直接跳出while迴圈。

在上面這個程式碼尾部加上break即可注意break的位置要縮排。

二、設定性別

設定性別是一個有意思的話題,性別一定要做到隨機,設定亂數就用到了一個函數random.randint,這個函數是python中自帶的模組,使用前要先呼叫一下這個模組import random

通過 random.randint(1,6)可以生成一個1-6的隨機整數。

  • 如果是單數:男孩
  • 如果是雙數:女孩

男孩女孩會遇到不同的事件。

point = random.randint(1,6)
# print(f'亂數為:{point}')
if point % 2 == 1:
    gender = "boy"
    print("你是個男孩.")
else:
    gender = "girl"
    print("你是個女孩.")

三、設定出生點

首先按照家境可以把出生點分為4部分

  • 10是第一部分,家境最好,加成也最高
  • 7-9第二部分,也有一些加成
  • 4-6第三部分,加成較少
  • 1-4第四部分,會扣掉屬性

當然,大家在自己寫的時候,可以多寫幾個部分,讓遊戲充滿更多的可能。

然後,在生成1-3之間的亂數,每一個數位代表一種情況。

point = random.randint(1,3)
if home == 10:
    #第一部分
    print("你出生在帝都,父母是世界首富.")
    home += 1
    face += 1
    iq += 1
elif home >= 7 and home <=9:
    #第二部分
    if point == 1:
        print("你出生在一線城市,父母是醫生.")
        face += 2
    elif point == 2:
        print("你出生在一線城市,父母是資深程式設計師.")
        iq += 2
    else:
        print("你出生在一線城市,父母是健身教練.")
        strong += 3
        face += 1
        iq -= 1
elif home >= 4 and home <= 6:
    #第三部分
    if point == 1:
        print("你出生在三線城市,父母是企業管理.")
        iq += 1
    elif point == 2:
        print("你出生在三線城市,父母是小學老師.")
        iq += 1
    else:
        print("你出生在三線城市,父母是自己開店做生意.")
        home += 1
else:
    #第四部分
   if point == 1:
       print("你出生在農村,父母是農民.")
       strong += 2
       face -= 1
   elif point == 2:
       print("你出生在山裡,父母是獵人.")
       strong += 2
       home -= 1
       face -= 1
   else:
       print("你出生在小鎮上,父母是鎮長.")
       face += 1
       home += 1
print(f"顏值:{face},體量:{strong},智力:{iq},家境:{home}")

四、針對每一歲自動生成人生經歷

按照年齡可以把人生分為四個截斷

  • 幼年
  • 青年
  • 壯年
  • 老年

每個截斷會有不同的事情發生,也可能會有一些機遇。

例如:幼年截斷,智力,顏值,體質等會發生變化,在這裡可以展開事件的發生。

此處只寫幼年經歷:

因為是每一年,可以用for迴圈展開,把每一年的經歷,用字串進行拼接,迴圈到最後,輸出字串即可,針對事件的發生,可以用亂數,根據數位來發生事件,也可以根據性別,顏值,體質等來觸發事件,不同的事件有不同的影響,如果得病去世,可以直接用sys.exit(0)退出程式,使用time.sleep(1)可以使程式暫停一秒,便於觀察。

for age in range(1,11):
    #把一整年的列印都整理到一個字串中,在這一年的結尾統一列印
    info = f'你今年{age}歲'
    #生成一個一到三的隨機整數
    point = random.randint(1,3)
    #接下來編寫各種事件的程式碼
    #性別觸發的事件
    if gender == 'girl' and home <= 3 and point == 1:
        info += '你的家裡人重男輕女思想非常嚴重,把你丟棄了.'
        print("遊戲結束.")
        sys.exit(0)
    #體質觸發事件
    elif strong < 6 and point < 3:
        info += '你生了一場病.'
        if home >= 5:
            info += '在父母的照顧下,你康復了.'
            strong += 1
            home -= 1
        else:
            info += '父母沒時間管你,你的情況更糟糕了.'
            strong -= 1
    # 顏值觸發事件
    elif face <= 4 and age >= 7:
        info += '你長的太醜了,別的小朋友不和你一起玩.'
        if iq > 5:
            info += '你決定用學習填充自己.'
            iq += 1
        else:
            if gender == 'boy':
                info += '你和別的小朋友打架.'
                strong += 1
                iq -= 1
            else:
                info += '你經常被別的小朋友欺負.'
                strong -= 1
    #智商觸發的事件
    elif iq < 5:
        info += '你看起來傻乎乎的.'
        if home >= 8 and age >= 6:
            info += '你的父母把你送到更好的學校學習.'
            iq += 1
        elif 4 <= home <= 7:
            if gender == 'boy':
                info += '你的父母鼓勵你多運動,爭取成為運動健將.'
                strong += 1
            else:
                info += '你的古父母鼓勵你多打扮自己.'
                face += 1
        else:
            info += '你的父母經常為此吵架.'
            if point == 1:
                strong -= 1
            elif point == 2:
                iq -= 1
            else:
                pass
    #健康成長
    else:
        info += '你健康成長.'
        if point == 1:
            info += '你看起來更結實了.'
            strong += 1
        elif point == 2:
            info += '你看起來更好看了.'
            face += 1
        else:
            pass
    #列印這一年發生的事情
    print(info)
    print(f"顏值:{face},體質:{strong},智力:{iq},家境:{home}")
    print("---------------------------------------------------------------")
    time.sleep(1)

總結(附程式碼)

在這裡,並不把四個截斷全部寫完,只寫一個幼年階段。把這一篇文章看完,相信大家有能力自行實現後續內容,讓遊戲變得更完整。

注:在使用sys.exit和time.sleep的時候別忘了呼叫一下

import sys

import time

"""
                人生重開模擬器
                花有重開日,人無在少年
"""
import random
import sys
import time
print("******************************************")
print("                                          ")
print("            人生重開模擬器                   ")
print("                                          ")
print("         花有重開日 人無在少年                ")
print("                                          ")
print("******************************************")
while True:
    print("請設定初始屬性(可用屬性值:20)")
    face = int(input("設定顏值(1-10)"))
    iq = int(input("設定智力(1-10)"))
    strong = int(input("設定體質(1-10)"))
    home = int(input("設定家境(1-10)"))
    if face < 1 or face > 10:
        print("顏值設定錯誤")
        continue
    elif iq < 1 or iq > 10:
        print("智力設定錯誤")
        continue
    elif strong < 1 or strong > 10:
        print("體質設定錯誤")
        continue
    elif home < 1 or home > 10:
        print("家境設定錯誤")
        continue
    elif face + iq + strong + home > 20:
        print("總屬性超過20")
        continue
    print("初始屬性設定完畢")
    print(f"顏值:{face},體質:{strong},智力:{iq},家境:{home}")
    break
point = random.randint(1,6)
if point % 2 == 1:
    gender = "boy"
    print("你是個男孩.")
else:
    gender = "girl"
    print("你是個女孩.")
point = random.randint(1,3)
if home == 10:
    print("你出生在帝都,父母是世界首富.")
    home += 1
    face += 1
    iq += 1
elif home >= 7 and home <=9:
    if point == 1:
        print("你出生在一線城市,父母是醫生.")
        face += 2
    elif point == 2:
        print("你出生在一線城市,父母是資深程式設計師.")
        iq += 2
    else:
        print("你出生在一線城市,父母是健身教練.")
        strong += 3
        face += 1
        iq -= 1
elif home >= 4 and home <= 6:
    if point == 1:
        print("你出生在三線城市,父母是企業管理.")
        iq += 1
    elif point == 2:
        print("你出生在三線城市,父母是小學老師.")
        iq += 1
    else:
        print("你出生在三線城市,父母是自己開店做生意.")
        home += 1
else:
   if point == 1:
       print("你出生在農村,父母是農民.")
       strong += 2
       face -= 1
   elif point == 2:
       print("你出生在山裡,父母是獵人.")
       strong += 2
       home -= 1
       face -= 1
   else:
       print("你出生在小鎮上,父母是鎮長.")
       face += 1
       home += 1
print(f"顏值:{face},體量:{strong},智力:{iq},家境:{home}")
for age in range(1,11):
    info = f'你今年{age}歲'
    point = random.randint(1,3)
    if gender == 'girl' and home <= 3 and point == 1:
        info += '你的家裡人重男輕女思想非常嚴重,把你丟棄了.'
        print("遊戲結束.")
        sys.exit(0)
    elif strong < 6 and point < 3:
        info += '你生了一場病.'
        if home >= 5:
            info += '在父母的照顧下,你康復了.'
            strong += 1
            home -= 1
        else:
            info += '父母沒時間管你,你的情況更糟糕了.'
            strong -= 1
    elif face <= 4 and age >= 7:
        info += '你長的太醜了,別的小朋友不和你一起玩.'
        if iq > 5:
            info += '你決定用學習填充自己.'
            iq += 1
        else:
            if gender == 'boy':
                info += '你和別的小朋友打架.'
                strong += 1
                iq -= 1
            else:
                info += '你經常被別的小朋友欺負.'
                strong -= 1
    elif iq < 5:
        info += '你看起來傻乎乎的.'
        if home >= 8 and age >= 6:
            info += '你的父母把你送到更好的學校學習.'
            iq += 1
        elif 4 <= home <= 7:
            if gender == 'boy':
                info += '你的父母鼓勵你多運動,爭取成為運動健將.'
                strong += 1
            else:
                info += '你的古父母鼓勵你多打扮自己.'
                face += 1
        else:
            info += '你的父母經常為此吵架.'
            if point == 1:
                strong -= 1
            elif point == 2:
                iq -= 1
            else:
                pass
    else:
        info += '你健康成長.'
        if point == 1:
            info += '你看起來更結實了.'
            strong += 1
        elif point == 2:
            info += '你看起來更好看了.'
            face += 1
        else:
            pass
    print(info)
    print(f"顏值:{face},體質:{strong},智力:{iq},家境:{home}")
    print("---------------------------------------------------------------")
    time.sleep(1)

到此這篇關於Python實現人生重開模擬器小遊戲講解的文章就介紹到這了,更多相關Python人生重開模擬器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com