-1

So, I am a beginner, I am trying to create game where u evade objects and all but I have been having a very big problem with drawing obstacles repeatedly in my loop, I am currently using draw function for it, and it doesn't seem to be working.

Can anyone please enlighten me?

This is my full code:

import pygame
from sys import exit
from random import randint, choice
from pygame.math import Vector2

pygame.init()
SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
clock = pygame.time.Clock()
pygame.display.set_caption("Game")
test_font = pygame.font.Font("Snake/Font/PoetsenOne-Regular.ttf",50)
running = False

class OBJECT(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.x = 600
        self.y = 300
        self.pos = Vector2(self.x,self.y)
        self.gravity = -20

        self.rect = pygame.rect.Rect(self.pos.x, self.pos.y, 40, 40)
    def object_movement(self):
        key = pygame.key.get_pressed()
        if key[pygame.K_d]:
            self.rect.move_ip(8, 0)
        if key[pygame.K_a]:
            self.rect.move_ip(-8, 0)
    def draw(self, surface):
        pygame.draw.rect(surface, "red", self.rect)
    def apply_gravity(self):
        self.gravity += 0.8
        self.rect.y += self.gravity
        if self.rect.x >= 1152:
            self.rect.x = 1152
        if self.rect.x <= 8:
            self.rect.x = 8
        if self.rect.y <= 0:
            self.rect.y = 0
    def game_over(self):
        if self.rect.y >= 1000:
            self.rect.y = 300
            self.gravity = - 20
            return False
        else:
            return True
    def update(self):
        self.apply_gravity()
        self.object_movement()
        self.draw(screen)
class OBSTACLE(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.x = randint(50,1150)
        self.y = -300
        self.pos = Vector2(self.x,self.y)

        self.obstacle_rect = pygame.rect.Rect(self.pos.x,self.pos.y,5,20)
    def draw(self):
        pygame.draw.rect(screen,"white",self.obstacle_rect)
    def obstacle_movement(self):
        self.obstacle_rect.y += 7
        if self.obstacle_rect.y >= 700:
        self.kill()
    def update(self):
        self.obstacle_movement()

object = OBJECT()
obstacle = OBSTACLE()
def Background():
    screen.fill((102,205,170))
def Game_message():
    enter = test_font.render("Press ENTER To Start", False, "white")
    enter_rect = enter.get_rect(center = (600,280))
    jump = test_font.render("SPACE For Jump", False, "white")
    jump_rect = jump.get_rect(center = (600,350))
    screen.blit(enter,enter_rect)
    screen.blit(jump,jump_rect)



obstacle_timer = pygame.USEREVENT + 1
pygame.time.set_timer(obstacle_timer,200)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        if running:
            if event.type == obstacle_timer:
                obstacle.draw()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    object.gravity = -10
        else:
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    running = True
                    obstacle.kill()


    if running:

        Background()
        object.update()
        obstacle.update()
        running = object.game_over()


    else:
        screen.fill((102,205,170))
        Game_message()

    pygame.display.update()
    clock.tick(60)

I tried using obstacle = pygame.sprite.Group() yes, that made drawing class repeatedly much easier using obstacle.add(OBSTACLE()) function in a loop however other much big problems kept popping off in my code (collisions) so I sort of gave up on that.

toyota Supra
  • 3,181
  • 4
  • 15
  • 19

0 Answers0