0

i am currently busy making a little tag like game in pygame for school. i am having a hard time detecting collisions between the two players and i cant find anything online. they are both sepperate classes. i need the collisions to switch timers (if pllayer 1 is tagger player 2's timer goes up and vice versa). thanks already! this is the code (dont judge me i know its bad):

import pygame
from pygame.locals import *

pygame.init()
mainClock = pygame.time.Clock()

global playerplaceX
playerplaceX = 550
global playerplaceY
playerplaceY = 250

global player2placeX
player2placeX = 450
global player2placeY
player2placeY = 250

window_width, window_height = (1100, 600)
window_fill_color = (0, 0, 0,)
screen = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('main ludum dare 49 window')

class Player(object):

    def __init__(self):
        self.rect = pygame.rect.Rect((550, 250, 25, 25))
    
    def show_player(self, surface):
        pygame.draw.rect(screen, (141, 27, 179), self.rect)
    
    def move(self):
        global playerplaceX, playerplaceY
        key = pygame.key.get_pressed()
        if key[pygame.K_LEFT]:
            self.rect.move_ip(-1, 0)
            playerplaceX -= 1
        if key[pygame.K_RIGHT]:
            self.rect.move_ip(1, 0)
            playerplaceX += 1
        if key[pygame.K_UP]:
            self.rect.move_ip(0, -1)
            playerplaceY -= 1
        if key[pygame.K_DOWN]:
            self.rect.move_ip(0, 1)
            playerplaceY += 1

    def collide_edge(self):
        global playerplaceX, playerplaceY
        global key
        if playerplaceX > 1075 :
            self.rect.move_ip(-1, 0)
            playerplaceX -= 1
        if playerplaceX < 0 :
            self.rect.move_ip(1, 0)
            playerplaceX +=1
        if playerplaceY > 575 :
            self.rect.move_ip(0, -1)
            playerplaceY -= 1
        if playerplaceY < 0 :
            self.rect.move_ip(0, 1)
            playerplaceY += 1

    def update(self):
        self.rect.center = 7

class Player2(object):
    def __init__(self):
        self.rect = pygame.rect.Rect((450, 250, 25, 25))
    
    def show_player(self, surface):
        pygame.draw.rect(screen, (255, 255, 255), self.rect)
    
    def move(self):
        global player2placeX, player2placeY
        key = pygame.key.get_pressed()
        if key[pygame.K_a]:
            self.rect.move_ip(-1, 0)
            player2placeX -= 1
        if key[pygame.K_d]:
            self.rect.move_ip(1, 0)
            player2placeX += 1
        if key[pygame.K_w]:
            self.rect.move_ip(0, -1)
            player2placeY -= 1
        if key[pygame.K_s]:
            self.rect.move_ip(0, 1)
            player2placeY += 1

    def collide_edge(self):
        global player2placeX, player2placeY
        global key
        if player2placeX > 1075 :
            self.rect.move_ip(-1, 0)
            player2placeX -= 1
        if player2placeX < 0 :
            self.rect.move_ip(1, 0)
            player2placeX +=1
        if player2placeY > 575 :
            self.rect.move_ip(0, -1)
            player2placeY -= 1
        if player2placeY < 0 :
            self.rect.move_ip(0, 1)
            player2placeY += 1

    def update(self):
        self.rect.center = 7
    


global clock
player = Player()
player2 = Player2()
clock=pygame.time.Clock()
running = True

collide_player = player.__init__.colliderect(player2)


score_counter_1 = 0
score_int_1 = 0
score_str_1 = str(score_int_1)
font = pygame.font.SysFont(None, 24)
img_1 = font.render(score_str_1, True, (255, 255, 255))
def timer_1():
    global score_counter_1
    global score_int_1
    global score_str_1
    global img_1
    if score_counter_1 < 200:
        score_counter_1 = score_counter_1 + 0.5
    if score_counter_1 == 200:
        score_int_1 = score_int_1 + 1
        score_str_1 = str(score_int_1)
        score_counter_1 = 0
    del img_1
    img_1 = font.render(score_str_1, True, (255, 255, 255))


score_counter_2 = 0
score_int_2 = 0
score_str_2 = str(score_int_2)
font = pygame.font.SysFont(None, 24)
img_2 = font.render(score_str_2, True, (255, 255, 255))
def timer_2():
    global score_counter_2
    global score_int_2
    global score_str_2
    global img_2
    if score_counter_2 < 20:
        score_counter_2 = score_counter_2 + 0.5
    if score_counter_2 == 20:
        score_int_2 = score_int_2 + 1
        score_str_2 = str(score_int_2)
        score_counter_2 = 0
    del img_2
    img_2 = font.render(score_str_2, True, (255, 255, 255))


while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    pygame.key.get_pressed()
    
    timer_1() if collide_player else timer_2()
    

    player.collide_edge()
    player2.collide_edge()
    player.move()
    player2.move()


    clock.tick(200)
    screen.fill(window_fill_color)
    screen.blit(img_1, (20, 20))
    screen.blit(img_2, (20, 50))
    player.show_player(screen)
    player2.show_player(screen)

    pygame.display.update()```

0 Answers0