Python Forum
[pygame] distance detector
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[pygame] distance detector
#7
Maybe something like this.

My state machine that I been playing around with.
Requires my state machine code above.
import pygame

from statemachine import StateMachine, State
from pygame.sprite import Sprite, Group

class TextSprite(Sprite):
    def __init__(self, image, position, wall, *groups):
        Sprite.__init__(self, *groups)
        self.image = image
        self.rect = image.get_rect()
        self.rect.topleft = position
        self.ticks = 3000
        self.wall = wall

    def update(self):
        self.ticks -= StateMachine.delta
        if self.ticks <= 0:
            self.wall.trigger = False
            self.kill()

class PlayerSprite(Sprite):
    def __init__(self, image, position, *groups):
        Sprite.__init__(self, *groups)
        self.image = image
        self.rect = image.get_rect()
        self.rect.topleft = position
        self.position = pygame.Vector2(position)
        self.speed = 3 / StateMachine.fps

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_w] or keys[pygame.K_UP]:
            self.position.y -= self.speed * StateMachine.delta
            self.rect.topleft = self.position

        if keys[pygame.K_s] or keys[pygame.K_DOWN]:
            self.position.y += self.speed * StateMachine.delta
            self.rect.topleft = self.position

        if keys[pygame.K_a] or keys[pygame.K_LEFT]:
            self.position.x -= self.speed * StateMachine.delta
            self.rect.topleft = self.position

        if keys[pygame.K_d] or keys[pygame.K_RIGHT]:
            self.position.x += self.speed * StateMachine.delta
            self.rect.topleft = self.position

class WallSprite(Sprite):
    def __init__(self, image, position, *groups):
        Sprite.__init__(self, *groups)
        self.image = image
        self.rect = image.get_rect()
        self.rect.topleft = position
        self.trigger = False

class Detection(State):
    def __init__(self):
        State.__init__(self)
        self.sprites = Group()
        self.walls = Group()
        self.texts = Group()
        self.create_images()
        self.create_grid()

    def create_grid(self):
        self.grid = [[0 for x in range(20)] for y in range(20)]
        self.grid[0] = [1 for x in range(20)]
        self.grid[19] = [1 for x in range(20)]
        for i in range(1, 19):
            self.grid[i][0] = 1
            self.grid[i][19] = 1

        for x, row in enumerate(self.grid):
            for y, value in enumerate(row):
                if value == 1:
                    WallSprite(self.images['wall'], (x * 30, y * 30), self.sprites, self.walls)

    def create_images(self):
        self.images = {}

        wall = pygame.Surface((29, 29))
        wall.fill(pygame.Color('forestgreen'))
        self.images['wall'] = wall

        player = pygame.Surface((29, 29))
        player.fill(pygame.Color('dodgerblue'))
        self.images['player'] = player
        center = StateMachine.rect.center
        self.player = PlayerSprite(self.images['player'], center, self.sprites)

        font = pygame.font.Font(None, 12)
        text = font.render('20', 1, pygame.Color('firebrick'))
        self.images['wall text'] = text

    def draw(self, surface):
        surface.fill(pygame.Color('black'))
        self.sprites.draw(surface)
        self.sprites.update()

    def update(self, delta, ticks):
        # detection 20 around ship
        rect = self.player.rect.inflate(40, 40)
        text_center = self.images['wall text'].get_rect().center
        for wall in self.walls:
            if not wall.trigger:
                if rect.colliderect(wall.rect):
                    wall.trigger = True
                    pos = pygame.Vector2(wall.rect.center)
                    pos -= text_center
                    TextSprite(self.images['wall text'], pos, wall, self.sprites, self.texts)

def main():
    pygame.init()
    StateMachine.screen_center()
    StateMachine.setup("Detection Example", 600, 600)
    StateMachine.flip(Detection())
    StateMachine.mainloop()
    pygame.quit()

if __name__ == "__main__":
    main()
99 percent of computer problems exists between chair and keyboard.
Reply


Messages In This Thread
[pygame] distance detector - by N0m1t - May-26-2019, 08:10 PM
RE: [pygame] distance detector - by metulburr - May-26-2019, 11:47 PM
RE: [pygame] distance detector - by Windspar - May-27-2019, 02:49 AM
RE: [pygame] distance detector - by N0m1t - May-28-2019, 12:46 PM
RE: [pygame] distance detector - by Windspar - May-28-2019, 04:53 PM
RE: [pygame] distance detector - by N0m1t - May-28-2019, 06:07 PM
RE: [pygame] distance detector - by Windspar - May-28-2019, 08:46 PM

Forum Jump:

User Panel Messages

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