Python Forum
[pygame] Equiping inventory slots with invisible buttons
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[pygame] Equiping inventory slots with invisible buttons
#6
Why would you avoid local variables ? They help keep memory usage down. In classes it helps keep object memory smaller.

My Color Handler
import pygame

class Color:
    def __getitem__(self, key):
        return self.__getattr__(key)

    def __getattr__(self, key):
        if key == "keys":
            return pygame.color.THECOLORS.keys()

        return pygame.Color(key)

    def group(self, color_name):
        group = []
        for name in pygame.color.THECOLORS.keys():
            if color_name in name:
                group.append(name)

        return group

def main():
    color = Color()

    # Quickly call
    print("orange", color.orange)
    print("darkred", color.darkred)
    print()

    # Find all colors that include name
    for c in color.group('blue'):
        print(c, color[c])

main()
Example. My color handler in action
import pygame

class Color:
    def __getitem__(self, key):
        return self.__getattr__(key)

    def __getattr__(self, key):
        if key == "keys":
            return pygame.color.THECOLORS.keys()

        return pygame.Color(key)

    def group(self, color_name):
        group = []
        for name in pygame.color.THECOLORS.keys():
            if color_name in name:
                group.append(name)

        group.sort()
        return group

# Simple Scene Interface
class Scene:
    def draw(self, surface, game): pass
    def event(self, event, game): pass
    def update(self, game): pass

class Game:
    color = Color()

    def __init__(self, caption, width, height):
        # Basic pygame setup
        pygame.display.set_caption(caption)
        self.rect = pygame.Rect(0, 0, width, height)
        self.surface = pygame.display.set_mode(self.rect.size)
        self.clock = pygame.time.Clock()
        self.running = False
        self.fps = 30
        self.delta = 0

        # Scene Interface
        self.scene = Scene()
        Game.info = self

    def mainloop(self):
        self.running = True
        while self.running:
            for event in pygame.event.get():
                self.scene.event(event, self)

            self.keys = pygame.key.get_pressed()

            self.scene.update(self)
            self.scene.draw(self.surface, self)
            pygame.display.flip()
            self.delta = self.clock.tick(self.fps)

class ColorShow(Scene):
    def __init__(self):
        self.colors = 'red', 'blue', 'green'
        self.color_position = 0
        self.color_group = Game.color.group('red')
        self.cg_position = 0
        # timer
        self.interval = 900
        self.next_tick =  pygame.time.get_ticks()

        self.font = pygame.font.Font(None, 32)
        self.render_text(Game.info)

    def draw(self, surface, game):
        surface.fill(pygame.Color(self.color_group[self.cg_position]))
        surface.blit(self.text, self.text_rect)

    def event(self, event, game):
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                self.color_position = (self.color_position + 1) % len(self.colors)
                self.color_group = Game.color.group(self.colors[self.color_position])
                self.cg_position = 0
                self.render_text(game)
            elif event.key == pygame.K_ESCAPE:
                game.running = False
        elif event.type == pygame.QUIT:
            game.running = False

    def render_text(self, game):
        self.text = self.font.render(self.color_group[self.cg_position], 1, pygame.Color('black'))
        self.text_rect = self.text.get_rect()
        self.text_rect.y = 10
        self.text_rect.centerx = game.rect.centerx

    def update(self, game):
        ticks = pygame.time.get_ticks()
        if ticks > self.next_tick:
            self.next_tick += self.interval
            self.cg_position = (self.cg_position + 1) % len(self.color_group)
            self.render_text(game)


def main():
    pygame.init()
    game = Game("Color Show", 400, 300)
    game.scene = ColorShow()
    game.mainloop()
    pygame.quit()

main()
99 percent of computer problems exists between chair and keyboard.
Reply


Messages In This Thread
RE: [pygame] Equiping inventory slots with invisible buttons - by Windspar - Apr-26-2019, 07:45 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  [PyGame] pygame-manu : using controller buttons to move around menu mlw19mlw91 2 1,829 Mar-12-2023, 01:55 PM
Last Post: deanhystad
  Pygame - Images As Buttons vman44 3 13,382 Mar-20-2020, 08:13 PM
Last Post: vman44
  Adding an inventory and a combat system to a text based adventure game detkitten 2 7,159 Dec-17-2019, 03:40 AM
Last Post: detkitten
  [pygame] Inventory items not working SheeppOSU 14 7,208 May-27-2019, 09:44 PM
Last Post: metulburr
  [pygame] Inventory problems. Weapons equipped to wrong slot SheeppOSU 6 4,259 May-07-2019, 02:46 AM
Last Post: SheeppOSU
  [pygame] Blitting armor and weapons with inventory SheeppOSU 3 3,023 Apr-29-2019, 02:31 AM
Last Post: SheeppOSU
  Problems with loading buttons (pygame) SheeppOSU 2 3,278 Apr-12-2019, 08:04 PM
Last Post: SheeppOSU
  Buttons in PyGame mzmingle 4 13,273 Oct-09-2018, 05:19 PM
Last Post: Mekire
  Menus, buttons and other widgets for Pygame Olleus 4 11,694 Apr-17-2017, 11:08 PM
Last Post: metulburr

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020