[ad_1]
when i used to be making a pygame in python for the primary time
i kinda have an issue the place generally the participant and the article would contact and the sport wouldn’t shut as supposed i dint appear to search out the answer to this drawback principally it might work however generally the collision would happen however the participant would clip proper by way of
i’ve tried quite a few collision methods which i’ve heard however none appear to work as properly
the issue would nonetheless exit
right here is my code
import math
import pygame
import random
RED=(255,0,0)
BLUE=(0,0,255)
bg_COLOR=(0,0,0)
WHITE=(255,255,255)
pygame.init()
font = pygame.font.SysFont('monospace', 15)
wid=720
hight=600
player_size = [40,40]
flag=0
player_pos = [int(wid/2),hight-2*player_size[1]]
enemy_size = 50
enemy_pos = [random.randint(0,wid-enemy_size),0]
en_list=[enemy_pos]
velocity=10
en_num=4
block_evade=0
display screen = pygame.show.set_mode((wid,hight))
pygame.show.set_caption('x wing shooter alpha v1')
game_over = False
clock = pygame.time.Clock()
def score_count(block_evade,block_attack=0):
textual content = font.render('rating:', 1,WHITE)
text2 = font.render(str(block_evade + block_attack),1,WHITE)
display screen.blit(textual content,(0,0))
display screen.blit(text2,(50,0))
def game_quit():
pygame.show.give up()
pygame.give up()
def spawn_en(en_list):
delay = random.random()
if len(en_list)<en_num and delay < 0.2:#
x_pos=random.randint(0,wid-enemy_size)
y_pos=0
en_list.append([x_pos ,y_pos])
def create_en(en_list):
for enemy_pos in en_list:
pygame.draw.rect(display screen,BLUE,(enemy_pos[0],enemy_pos[1],enemy_size,enemy_size))
def detect_col(player_pos, enemy_pos):
p_x=player_pos[0]
p_y=player_pos[1]
e_x=enemy_pos[0]
e_y=enemy_pos[1]
x1=int(e_x+enemy_size/2)
x2=int(p_x+player_size[0]/2)
y1=int(e_y+enemy_size/2)
y2=int(p_y+player_size[1]/2)
distance =int(math.sqrt((math.pow(x2-x1,2))+(math.pow(y2-y1,2))))
if(e_x + enemy_size >= p_x > e_x):
if(e_y + enemy_size >= p_y > e_y):
return True
elif(p_x + player_size[0] >= e_x > p_x):
if(p_y + player_size[1] >= e_y > p_y):
return True
elif(distance <= int(enemy_size/2)):
return True
def fall_en(en_list):
block_evade=0
for idx, enemy_pos in enumerate(en_list):
if enemy_pos[1] >= 0 and enemy_pos[1]<=hight:
enemy_pos[1]+=velocity
else:
en_list.pop(idx)
block_evade+=1
return block_evade
def col_check(en_list, player_pos):
for enemy_pos in en_list:
if detect_col(player_pos,enemy_pos):
return True
else:
return False
whereas not game_over:
for occasion in pygame.occasion.get():
if occasion.sort == pygame.QUIT:
game_quit()
flag=1
break
if occasion.sort == pygame.KEYDOWN:
x = player_pos[0]
y = player_pos[1]
if occasion.key == pygame.K_LEFT and player_pos[0] >= 0:
x-=10
elif occasion.key == pygame.K_RIGHT and player_pos[0] <= wid-player_size[0]:
x+=10
elif occasion.key == pygame.K_DOWN and player_pos[1] <= hight-player_size[1]:
y+=10
elif occasion.key == pygame.K_UP and player_pos[1] >= 0:
y-=10
player_pos = [x,y]
if flag != 1:
display screen.fill(bg_COLOR)
spawn_en(en_list)
block_evade+=fall_en(en_list)
if col_check(en_list, player_pos):
game_over=True
create_en(en_list)
score_count(block_evade,0)
pygame.draw.rect(display screen,RED,(player_pos[0],player_pos[1],player_size[0],player_size[1]))
clock.tick(20)
pygame.show.replace()
else:
game_quit()
[ad_2]