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()```