Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么score实例变量在python中应该减少时却没有减少_Python_Oop_Variables - Fatal编程技术网

为什么score实例变量在python中应该减少时却没有减少

为什么score实例变量在python中应该减少时却没有减少,python,oop,variables,Python,Oop,Variables,我已经开始学习oop,我很难让它做我需要的事情。我正在使用海龟模块构建一个简单的游戏,其中一个圆圈被丢弃,每次圆圈从屏幕上掉下来,分数都会下降。我将添加射击功能和速度配置等等。但现在我被困在这个循环中 问题是分数变化不正确。我有两个班:圆圈和游戏者。score是Player类的一个实例变量,但Circle类中的drop()函数会计算分数 我可以用程序化的编程方式使它工作,但是用oop我就卡住了。。这是密码。欢迎任何建设性的批评 import turtle as t import random

我已经开始学习oop,我很难让它做我需要的事情。我正在使用海龟模块构建一个简单的游戏,其中一个圆圈被丢弃,每次圆圈从屏幕上掉下来,分数都会下降。我将添加射击功能和速度配置等等。但现在我被困在这个循环中

问题是分数变化不正确。我有两个班:圆圈和游戏者。score是Player类的一个实例变量,但Circle类中的drop()函数会计算分数

我可以用程序化的编程方式使它工作,但是用oop我就卡住了。。这是密码。欢迎任何建设性的批评

import turtle as t
import random

class Circle:

    def __init__(self,size):
        self.size = size
        #self.speed = speed
        self.circle = t.Turtle()
        self.ypos = 300



    def size_color(self):
        self.circle.color('red')
        self.circle.shape('circle')
        self.circle.shapesize(self.size,self.size,1)

    #positions circle random x top y
    def posit(self):
        number = random.randint(-340,340)
        self.circle.ht()
        self.circle.penup()

        self.size_color()
        self.circle.goto(number,self.ypos)
        self.circle.st()


    #substracts from y position for falling effect
    #should substract from score as well
    def drop(self):
        self.posit()
        while True:

            self.ypos = self.ypos- 4
            self.circle.sety(self.ypos)
            if self.ypos <= -300:
                Player().score = Player().score - 10
                print(Player().score)
                self.ypos = 300
                self.posit()



class Player:
    def __init__(self,score=200):
        self.score = score

def display_screen():
    window = t.Screen()
    window.bgcolor('black')

display_screen()
c = Circle(2)
c.drop()

将海龟作为t导入
随机输入
班级圈子:
定义初始值(自身,大小):
self.size=大小
#自身速度=速度
self.circle=t.Turtle()
self.ypos=300
def大小_颜色(自身):
self.circle.color('red')
self.circle.shape('circle'))
self.circle.shapesize(self.size,self.size,1)
#位置圆随机x顶部y
def posit(自我):
number=random.randint(-340340340)
self.circle.ht()
self.circle.penup()
self.size_color()
self.circle.goto(数字,self.ypos)
self.circle.st()
#从y位置减去下降效果
#也应该从分数中减去
def下降(自):
self.posit()
尽管如此:
self.ypos=self.ypos-4
self.circle.sety(self.ypos)

如果self.ypos每次调用
Player()
都是在创建一个新的播放器。所以当你这么做的时候

Player().score = Player().score - 10
print(Player().score)
这大致相当于:

temp_player1 = Player()
temp_player2 = Player()
temp_player1.score = temp_player2.score - 10
temp_player3 = Player()
print(temp_player3.score)
从中可以看出,有3个不同的玩家,所以你永远不会减少任何玩家的分数,然后你会打印一个不同的玩家的分数

您需要在
圆圈
中添加一个
player
属性,然后它可以使用
self.player
,而不是每次创建一个新的玩家

import turtle as t
import random

class Circle:

    def __init__(self,size):
        self.size = size
        #self.speed = speed
        self.circle = t.Turtle()
        self.ypos = 300
        this.player = Player()

    def size_color(self):
        self.circle.color('red')
        self.circle.shape('circle')
        self.circle.shapesize(self.size,self.size,1)

    #positions circle random x top y
    def posit(self):
        number = random.randint(-340,340)
        self.circle.ht()
        self.circle.penup()

        self.size_color()
        self.circle.goto(number,self.ypos)
        self.circle.st()

    #substracts from y position for falling effect
    #should substract from score as well
    def drop(self):
        self.posit()
        while True:
            self.ypos = self.ypos- 4
            self.circle.sety(self.ypos)
            if self.ypos <= -300:
                self.player.score = self.player.score - 10
                print(self.player.score)
                self.ypos = 300
                self.posit()

class Player:
    def __init__(self,score=200):
        self.score = score

def display_screen():
    window = t.Screen()
    window.bgcolor('black')

display_screen()
c = Circle(2)
c.drop()
将海龟作为t导入
随机输入
班级圈子:
定义初始值(自身,大小):
self.size=大小
#自身速度=速度
self.circle=t.Turtle()
self.ypos=300
this.player=player()
def大小_颜色(自身):
self.circle.color('red')
self.circle.shape('circle'))
self.circle.shapesize(self.size,self.size,1)
#位置圆随机x顶部y
def posit(自我):
number=random.randint(-340340340)
self.circle.ht()
self.circle.penup()
self.size_color()
self.circle.goto(数字,self.ypos)
self.circle.st()
#从y位置减去下降效果
#也应该从分数中减去
def下降(自):
self.posit()
尽管如此:
self.ypos=self.ypos-4
self.circle.sety(self.ypos)

如果self.ypos每次调用
Player()
都是在创建一个新的播放器。所以当你这么做的时候

Player().score = Player().score - 10
print(Player().score)
这大致相当于:

temp_player1 = Player()
temp_player2 = Player()
temp_player1.score = temp_player2.score - 10
temp_player3 = Player()
print(temp_player3.score)
从中可以看出,有3个不同的玩家,所以你永远不会减少任何玩家的分数,然后你会打印一个不同的玩家的分数

您需要在
圆圈
中添加一个
player
属性,然后它可以使用
self.player
,而不是每次创建一个新的玩家

import turtle as t
import random

class Circle:

    def __init__(self,size):
        self.size = size
        #self.speed = speed
        self.circle = t.Turtle()
        self.ypos = 300
        this.player = Player()

    def size_color(self):
        self.circle.color('red')
        self.circle.shape('circle')
        self.circle.shapesize(self.size,self.size,1)

    #positions circle random x top y
    def posit(self):
        number = random.randint(-340,340)
        self.circle.ht()
        self.circle.penup()

        self.size_color()
        self.circle.goto(number,self.ypos)
        self.circle.st()

    #substracts from y position for falling effect
    #should substract from score as well
    def drop(self):
        self.posit()
        while True:
            self.ypos = self.ypos- 4
            self.circle.sety(self.ypos)
            if self.ypos <= -300:
                self.player.score = self.player.score - 10
                print(self.player.score)
                self.ypos = 300
                self.posit()

class Player:
    def __init__(self,score=200):
        self.score = score

def display_screen():
    window = t.Screen()
    window.bgcolor('black')

display_screen()
c = Circle(2)
c.drop()
将海龟作为t导入
随机输入
班级圈子:
定义初始值(自身,大小):
self.size=大小
#自身速度=速度
self.circle=t.Turtle()
self.ypos=300
this.player=player()
def大小_颜色(自身):
self.circle.color('red')
self.circle.shape('circle'))
self.circle.shapesize(self.size,self.size,1)
#位置圆随机x顶部y
def posit(自我):
number=random.randint(-340340340)
self.circle.ht()
self.circle.penup()
self.size_color()
self.circle.goto(数字,self.ypos)
self.circle.st()
#从y位置减去下降效果
#也应该从分数中减去
def下降(自):
self.posit()
尽管如此:
self.ypos=self.ypos-4
self.circle.sety(self.ypos)

如果self.yposBarmar偷走了我的答案。使用他所说的,但是不要忘记将
this.player
更改为
self.player
,因为他犯了一个小错误,可能是因为其他编程语言。

巴尔马偷走了我的答案。使用他所说的,但是不要忘记将
this.player
更改为
self.player
,因为他犯了一个小错误,可能是因为其他编程语言