猫史档案馆


【Python作品分享】PyPet【作品秀】

用户:氯化氢不是氯代烃氯化氢不是氯代烃查看:0 回复:0 评论:0 创建时间:2021-02-19T13:00:41


【作品展示】

center_image

 

【作品介绍】

一个电子宠物。需要一个ui文件的辅助。有喂食、散步、抚摸等功能,模拟一只宠物。

 

【作品源代码】

import sys
import time
import json
import random
import pygame
from PySide2.QtWidgets import *
from PySide2.QtGui import *
from ui_pypet import Ui_MainWindow

pygame.init()

class MainWindowPet(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.show()
        self.Imgs = [QPixmap(r"F:\mouse\PyPet1.0\Imgs\MyPet_Nothing.png"),
    QPixmap(r"F:\mouse\PyPet1.0\Imgs\MyPet_Eating.png"),
    QPixmap(r"F:\mouse\PyPet1.0\Imgs\MyPet_Stroking.png"),
    QPixmap(r"F:\mouse\PyPet1.0\Imgs\MyPet_Walking.png"),
    QPixmap(r"F:\mouse\PyPet1.0\Imgs\MyPet_Doctor.png")]
        self.Image = 0
        self.MainLb_Pet.setPixmap(self.Imgs[self.Image])
        self.MainLb_Pet.setFont(None)
        self.Level = 0
        self.Fullness = 1.0 
        self.Happiness = 1.0 
        self.Health = 1.0
        self.Money = 10000
        self.Temprature = 25.0
        self.IsClean = True
        self.IsWalking = False
        Start = 0
        End = 0
        self.pbtn_Cool.clicked.connect(self.Cool)
        self.pbtn_Warm.clicked.connect(self.Warm)
        self.pbtn_Walk.clicked.connect(self.Walk)
        self.pbtn_Feed.clicked.connect(self.Feed)
        self.pbtn_Doctor.clicked.connect(self.Doctor)
        self.pbtn_Stroke.clicked.connect(self.Stroke)
        self.pbtn_Clean.clicked.connect(self.Clean)
        self.pbtn_LevelUp.clicked.connect(self.LevelUp)
        try:
            self.Fullness, self.Happiness, self.Health, self.Money, self.Temprature, self.Level = self.GetLastData()
        except:
            pass
        self.Adventure()
        self.ShowStatus()

    def ShowStatus(self):
        self.StatusSafe()
        self.lb_Money.setText("money:{}".format(int(self.Money)))
        self.lb_Full.setText("fullness:{}".format(round(self.Fullness, 5)))
        self.lb_Health.setText("Health:{}".format(round(self.Health, 5)))
        self.lb_Happiness.setText(
            "Happoness:{}".format(round(self.Happiness, 5)))
        self.lb_Temprature.setText(
            "Temprature:{}".format(round(self.Temprature, 3)))
        self.lb_Level.setText("petlevl:{}".format(int(self.Level)))

    def ShowForm(self, ImgIndex):
        self.Image = self.Imgs[ImgIndex] 
        self.MainLb_Pet.setPixmap(self.Image)

    def StatusSafe(self):
        if self.Fullness > 1.0:
            self.Fullness = 1.0
        if self.Fullness < 0.0:
            self.Fullness = 0.0
        if self.Happiness > 1.0:
            self.Happiness = 1.0
        if self.Happiness < 0.0:
            self.Happiness = 0.0
        if self.Health > 1.0:
            self.Health = 1.0
        if self.Health < 0.0:
            self.Health = 0.0
        if self.Money < 0:
            self.Money = 0

    def GetLastData(self):
        try:
            with open(r"F:\mouse\PyPet1.0\PetData.json") as f: 
                Data = json.load(f)
                return Data    
        except:
            pass

    def SaveData(self, Data):
        with open(r"F:\mouse\PyPet1.0\PetData.json", "w") as f:
            json.dump(Data, f)

    def Cool(self):
        if self.Money >= 80:
            self.Temprature -= 5
            self.Money -= 80
            self.Happiness += 0.1
            self.ShowStatus()
            self.ShowForm(0)
            self.FileData = self.Fullness, self.Happiness, self.Health, self.Money, self.Temprature, self.Level
            self.SaveData(self.FileData)
            self.MakeMoney(16)
        else:
            self.lb_Status.setText("Not enough money.")
            QMessageBox.warning(self, "PyPet warning", "Not enough money.")


    def Warm(self):
        if self.Money >= 80:
            self.Temprature += 5
            self.Money -= 80
            self.Happiness += 0.1
            self.ShowStatus()
            self.ShowForm(0)
            self.FileData = self.Fullness, self.Happiness, self.Health, self.Money, self.Temprature, self.Level
            self.SaveData(self.FileData)
            self.MakeMoney(16)
        else:
            self.lb_Status.setText("Not enough money.")
            QMessageBox.warning(self, "PyPet warning", "Not enough money.")

    def Walk(self):
        if not self.IsWalking:
            self.Happiness += 0.3 
            self.Health += 0.08
            self.Fullness -= 0.06
            self.ShowStatus()
            self.ShowForm(3)
            self.lb_Status.setText("I gone out for a walk.")
            self.FileData = self.Fullness, self.Happiness, self.Health, self.Money, self.Temprature, self.Level
            self.MakeMoney(23)
            self.IsWalking = True
            self.pbtn_Walk.setText("Back")
            self.SaveData(self.FileData)
        else:
            self.IsWalking = False
            self.pbtn_Walk.setText("Walk")

    def Feed(self):
        Need = random.randint(60, 90)
        if self.Money >= Need:
            self.Money -= Need
            self.Fullness += 0.35
            self.Happiness += 0.28
            self.ShowStatus()
            self.ShowForm(1)
            self.lb_Status.setText("Yum.")
            self.FileData = self.Fullness, self.Happiness, self.Health, self.Money, self.Temprature, self.Level
            self.MakeMoney(int(Need / 10))
            self.SaveData(self.FileData)
            self.IsClean = False
        else:
            self.lb_Status.setText("Not enough money.")
            QMessageBox.warning(self, "PyPet warning", "Not enough money.")

    def Doctor(self):
        Need = random.randint(800, 2500)
        if self.Money >= Need:
            self.Money -= Need
            self.Health += 0.56
            self.Happiness -= 0.01
            self.ShowStatus()
            self.ShowForm(4)
            self.lb_Status.setText("I am healthier!")
            self.FileData = self.Fullness, self.Happiness, self.Health, self.Money, self.Temprature, self.Level
            self.MakeMoney(int(Need / 10))
            self.SaveData(self.FileData)
        else:
            self.lb_Status.setText("Not enough money.")
            QMessageBox.warning(self, "PyPet warning", "Not enough money.")

    def Stroke(self):
        self.Happiness += 0.18
        self.ShowStatus()
        self.ShowForm(2)
        self.lb_Status.setText("I like being stroked!")
        self.FileData = self.Fullness, self.Happiness, self.Health, self.Money, self.Temprature, self.Level
        self.MakeMoney(15)
        self.SaveData(self.FileData)

    def Clean(self):
        self.Happiness += 0.07
        self.Health += 0.1
        self.ShowStatus()
        self.ShowForm(0)
        self.FileData = self.Fullness, self.Happiness, self.Health, self.Money, self.Temprature, self.Level
        self.MakeMoney(60)
        self.IsClean = True
        self.SaveData(self.FileData)

    def LevelUp(self):
        Need = 10 * (self.Level + 1)
        if self.Money >= Need:
            self.Money -= Need 
            self.Level += 1
            self.ShowStatus()
            self.ShowForm(0)
            self.lb_Status.setText("Level up!")
            self.FileData = self.Fullness, self.Happiness, self.Health, self.Money, self.Temprature, self.Level
            self.SaveData(self.FileData)
        else:
            self.lb_Status.setText("Not enough money.")
            QMessageBox.warning(self, "PyPet warning", "Not enough money.")

    def Adventure(self):
        Achievement = int(self.Level * self.Health * self.Fullness * random.randint(20, 50))
        self.Money += Achievement
        self.lb_Status.setText("I just came back from my last adventure. I found {} coins.".format(Achievement))
        self.Health -= 0.1
        self.FileData = self.Fullness, self.Happiness, self.Health, self.Money, self.Temprature, self.Level
        self.SaveData(self.FileData)
        self.ShowStatus()

    def Live(self):
        self.Temprature += random.randint(-10, 10) / 100 
        self.Happiness -= 0.0003
        self.Fullness -= 0.0005
        if self.Fullness <= 0.15:
            self.Happiness -= 0.008
            self.Health -= 0.02
        if self.Happiness <= 0.13:
            self.Health -= 0.001
        if not self.IsClean:
            self.Health -= 0.002
        if self.Temprature > 32.5 or self.Temprature < 14.5:
            self.Happiness -= 0.002 
            self.Health -= 0.001

    def MakeMoney(self, Amount):
        self.lb_Status.setText("I got {} coins.".format(Amount))
        self.Money += Amount 
        self.ShowStatus()

if __name__ == "__main__":
    MyApp = QApplication(sys.argv)
    MyPet = MainWindowPet()
    Clock = pygame.time.Clock()

    while MyPet.Health > 0.0:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                break
            if event.type == pygame.KEYDOWN:
                pygame.quit()
                break
        MyPet.Live()
        MyPet.ShowStatus()
        Clock.tick(5)

    sys.exit(MyApp.exec_())

try:
    sys.exit(MyApp.exec_())
except:
    pass

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页