cmdtvt
cmdtvt

Reputation: 71

How can i keep updating variables to class from outside of it?

I'm New to python/pygame classes and I'm making a game. So my problem is that i have a class that draws spaceships to screen but i would need somehow add spacemove_x,spacemove_y to their x and y.

These spacemove_x,spacemove_y are defined when user moves he's own spaceship

(I use spacemove_x,spacemove_y for updating places for other stuff too like stars because this game is from top down view so when i move my spacecraft other things should get closer/farther away depending what direction my character is going)

So spacemove_x,spacemove_y is always updating it self but how can I give this info to class?

CODE:

import pygame
import random

class BaseClass(pygame.sprite.Sprite):

 allsprites = pygame.sprite.Group()
 def __init__(self, x, y, width, height,spacemove_x,spacemove_y):
    pygame.sprite.Sprite.__init__(self)
    BaseClass.allsprites.add(self)

    self.shipDefaultUp = pygame.image.load("textures/ships/shipDefault/shipUP.png")
    self.shipDefaultRight = pygame.image.load("textures/ships/shipDefault/shipRIGHT.png")
    self.shipDefaultDown = pygame.image.load("textures/ships/shipDefault/shipDOWN.png")
    self.shipDefaultLeft = pygame.image.load("textures/ships/shipDefault/shipLEFT.png")

    self.shipCargo1Up = pygame.image.load("textures/ships/shipCargo1/shipCargo1UP.png")
    self.shipCargo1Right = pygame.image.load("textures/ships/shipCargo1/shipCargo1RIGHT.png")
    self.shipCargo1Down = pygame.image.load("textures/ships/shipCargo1/shipCargo1DOWN.png")
    self.shipCargo1Left = pygame.image.load("textures/ships/shipCargo1/shipCargo1LEFT.png")

    self.shipCargo2Up = pygame.image.load("textures/ships/shipCargo2/shipCargo2UP.png")
    self.shipCargo2Right = pygame.image.load("textures/ships/shipCargo2/shipCargo2RIGHT.png")
    self.shipCargo2Down = pygame.image.load("textures/ships/shipCargo2/shipCargo2DOWN.png")
    self.shipCargo2Left = pygame.image.load("textures/ships/shipCargo2/shipCargo2LEFT.png") 
    self.image = pygame.image.load("textures/ships/shipDefault/shipUP.png")
    self.rect = self.image.get_rect()
    self.rect.x = x
    self.rect.y = y
    self.width = width
    self.height = height

    self.spacemove_x = spacemove_x
    self.spacemove_y = spacemove_y

    #self.dirrection = random.randrange(1,5)
    self.dirrection = 1
    self.timer = random.randrange(10,50)
    self.speed = random.randrange(2,10)

    self.shiptype = 3#random.randrange(1,3)

    #shiptypes#
    #1 = shipDefault
    #2 = shipCargo1
    #3 = shipCargo2

    self.move1 = ((1),(2),(4))
    self.move2 = ((1),(2),(3))
    self.move3 = ((2),(3),(4))
    self.move4 = ((1),(3),(4))

class spacecraftBOT(BaseClass):
    ships = pygame.sprite.Group()

    def __init__(self, x, y, width, height,spacemove_x,spacemove_y):
        BaseClass.__init__(self, x, y, width, height,spacemove_x,spacemove_y)
        spacecraftBOT.ships.add(self)

    def motion(self):

        #1 = UP
        #2 = RIGHT
        #3 = DOWN
        #4 = LEFT

        self.timer -=1

        if self.dirrection == 1: ##############SHIP UP
            self.rect.y -=self.speed
            self.rect.y -=self.spacemove_x

            if self.shiptype == 1:
                self.image = self.shipDefaultUp

            if self.shiptype == 2:
                self.image = self.shipCargo1Up

        if self.dirrection == 2:################SHIP RIGHT
            self.rect.x +=self.speed
            self.rect.x +=self.spacemove_x
            if self.shiptype == 1:
                self.image = self.shipDefaultRight

            if self.shiptype == 2:
                self.image = self.shipCargo1Right

            if self.shiptype == 3:
                self.image = self.shipCargo2Right

        if self.dirrection == 3: ##############SHIP DOWN
            self.rect.y +=self.speed
            self.rect.y +=self.spacemove_y

            if self.shiptype == 1:
                self.image = self.shipDefaultDown

            if self.shiptype == 2:
                self.image = self.shipCargo1Down

            if self.shiptype == 3:
                self.image = self.shipCargo2Down

        if self.dirrection == 4: ################SHIP LEFT
            self.rect.x -=self.speed
            self.rect.x -=self.spacemove_x

            if self.shiptype == 1:
                self.image = self.shipDefaultLeft

            if self.shiptype == 2:
                self.image = self.shipCargo1Left

            if self.shiptype == 3:
                self.image = self.shipCargo2Left


        if self.dirrection == 5:
            print("loitter")

        if self.timer < 0:
            self.dirrection = random.randrange(1,6)
            self.timer = random.randrange(10,50)

This is how I create spacecraft to my game:

spacecraft1 = spacecraftBOT(500,500,100,34,spacemove_x,spacemove_y)

So how can I give this class updated spacemove_x,spacemove_y?

Upvotes: 0

Views: 66

Answers (2)

Code-Apprentice
Code-Apprentice

Reputation: 83527

You access instance members with the dot operator. In fact, you already do this with self many times. The name self is not special; it is just a variable which refers to a class instance. Similarly, spacecraft1 is a variable which refers to a class instance. This means you can use the exact same notation:

spacecraft1.spacemove_x = 100

or

spacecraft1.spacemove_x += 50

Or basically anything you want.

Alternatively, you can define a move() method:

class spacecraftBOT(BaseClass):
    # ... all of the code you already have ...

    def move(self, x, y):
        self.spacemove_x = x
        self.spacemove_y = y

Now you can call the method with something like

spaceship1.move(100, 50)

Notice that this jumps directly to the given location. If you want to increment the x and y coordinates instead, you just need to implement the correct logic. (Hint: Use += instead of =.)

Upvotes: 0

Mike M&#252;ller
Mike M&#252;ller

Reputation: 85442

So how can i give this class updated spacemove_x,spacemove_y?

Just assigning them should work:

spacecraft1.spacemove_x = 100
spacecraft1.spacemove_y = 200

BTW, spacecraft1 is an instance of class spacecraftBOT, not a class.

Upvotes: 2

Related Questions