Python 当点数达到一定数值时激活弹球缓冲五次

Python 当点数达到一定数值时激活弹球缓冲五次,python,Python,因此,我创建了一个弹球脚本,它有两个设置,即简单设置(easy_pinball)和硬设置(hard_pinball)。硬设置继承了所有的“轻松设置”方法。唯一的区别是硬设置有两种方法,您可能会失去分数。我的问题是,当球员得分达到5分或以上时,我如何在硬弹球课上“激活”这两种方法?请注意,我不希望这两种方法一旦被激活就消失。例如,有人在弹球游戏中击出5分,然后激活硬弹球方法,但随后他的分数下降到4分,硬设置中的两种方法应一直工作到零,这将导致玩家输掉游戏。不知什么原因,我被难住了。有什么帮助吗 f

因此,我创建了一个弹球脚本,它有两个设置,即简单设置(easy_pinball)和硬设置(hard_pinball)。硬设置继承了所有的“轻松设置”方法。唯一的区别是硬设置有两种方法,您可能会失去分数。我的问题是,当球员得分达到5分或以上时,我如何在硬弹球课上“激活”这两种方法?请注意,我不希望这两种方法一旦被激活就消失。例如,有人在弹球游戏中击出5分,然后激活硬弹球方法,但随后他的分数下降到4分,硬设置中的两种方法应一直工作到零,这将导致玩家输掉游戏。不知什么原因,我被难住了。有什么帮助吗

from random import randint

class Easy_Pinball(object):

    def __init__(self, points = 0, balls = 3):
        self.points = points
        self.balls = balls

#  When you hit this bumper, you get random number from 1 3


    def first_bumper(self, winner = 20):
        if self.points < winner:
            self.points += randint(1,3)
            if self.points >= winner:
                print('you win')
        elif self.points >= winner:
            print ('you win')

#  when you hit this bumper, you get random number from 3 6

    def second_bumper(self, winner = 20):
        if self.points < winner:
            self.points += randint(4,6)
            if self.points >= winner:
                print('you win')
        elif self.points >= winner:
            print('you win')

#  If you ball falls in hole, you lose one ball

     def losing_balls(self, lost_one = 1):
        if self.balls > 0:
            self.balls -= lost_one
        elif self.balls == 0:
            print('you lose, braaahh')




class Hard_Pinball(Easy_Pinball): 

#  activate bumpers where you can lose points when
#  your points total reaches 5

    def third_bumper(self, bumper = 1):
        if self.points > 0:
            self.points -= bumper
        elif self.points <= 0:
            print('you lose, you bum')

    def fourth_bumper(self, bumper = 5):
        if self.points > 0:
            self.points -= bumper
            if self.points <= 0:
                print('you lose, you bum')
        elif self.points <= 0:
            print('you lose, you bum')
来自随机导入randint
类Easy_弹球(对象):
定义初始值(自身,点=0,球=3):
self.points=点
self.balls=球
#当你撞到这个保险杠时,你会得到13的随机数
def第一保险杠(自身,获胜者=20):
如果self.points<获胜者:
self.points+=randint(1,3)
如果self.points>=获胜者:
打印(“你赢了”)
elif self.points>=获胜者:
打印(“你赢了”)
#当你撞到这个保险杠时,你会得到3到6的随机数
def第二个_保险杠(自身,获胜者=20):
如果self.points<获胜者:
self.points+=randint(4,6)
如果self.points>=获胜者:
打印(“你赢了”)
elif self.points>=获胜者:
打印(“你赢了”)
#若你们的球落在洞里,你们会失去一个球
def丢球(自身,丢球=1):
如果self.balls>0:
self.balls-=丢失的球
elif self.balls==0:
打印('你输了,好极了')
班级硬弹球(简易弹球):
#激活保险杠,您可以在以下情况下丢分:
#你的总分达到5分
def第三保险杠(自身,保险杠=1):
如果self.points>0:
自身点-=保险杠
elif self.0分:
自身点-=保险杠

如果self.points我将只使用一个
弹球
类,并具有
难度
枚举属性,当
达到5时,该属性将更改为
难度.hard
。然后,对
third\u buffer
third\u buffer
的所有调用都可以在应用各自的分数惩罚之前首先检查
self.defficity==defficity.hard

我还利用
积分
属性上的
@property
简化了一些游戏逻辑,以自动触发赢球、输球和难度调整(这意味着逻辑不再分散在其他方法之间)


谢谢,您有什么理由在enum类下创建两个变量而不是在Pinball类下创建这两个类变量吗?如果您最终添加了其他困难,如
困难.epic
困难.tutorial
,如果您使用的是枚举常量,那么管理更改就容易多了。谢谢,最后一个问题。我真的不熟悉enum模块或enum类。您使用这个类有什么原因吗?因为代码在不使用Enum的情况下工作得非常好?只是可维护性。如果您愿意,没有理由不使用字符串。
from random import randint
from enum import Enum

class Difficulty(Enum):
    easy = 'easy'
    hard = 'hard'

class Pinball(object):

    def __init__(self, points = 0, balls = 3, winning_score = 20, hard_threshold = 5):
        self.winning_score = winning_score
        self.hard_threshold = hard_threshold
        self.difficulty = Difficulty.easy

        self.points = points
        self.balls = balls

    @property
    def points(self):
        return self._points

    @points.setter
    def points(self, v):
        self._points = v
        if v >= self.hard_threshold:
            self.difficulty = Difficulty.hard
        if v >= self.winning_score:
            self.win()

    @property
    def balls(self):
        return self._balls

    @balls.setter
    def balls(self, v):
        self._balls = v
        if v == 0:
            self.lose()

    def win(self):
        print('You win!')

    def lose(self):
        print('You lose!')

    #  When you hit this bumper, you get random number from 1 3

    def first_bumper(self):
        self.points += randint(1, 3)

    #  when you hit this bumper, you get random number from 3 6

    def second_bumper(self):
        self.points += randint(4, 6)

    #  If you ball falls in hole, you lose one ball

    def losing_balls(self, count = 1):
         self.balls -= count

    #  activate bumpers where you can lose points when
    #  your points total reaches 5

    def third_bumper(self, penalty = 1):
        if self.difficulty == Difficulty.hard:
            self.points -= penalty

    def fourth_bumper(self, penalty = 5):
        if self.difficulty == Difficulty.hard:
            self.points -= penalty