Ich möchte die Kollisionserkennung hinzufügen [Duplikat]Python

Python-Programme
Anonymous
 Ich möchte die Kollisionserkennung hinzufügen [Duplikat]

Post by Anonymous »

Es ist mein erstes Spiel, an dem ich arbeite. Und Kollisionserkennungen sind dort, wo meine erste Straßensperre ist. Ich bin neu im Codieren, also würde ich gerne sehen, wo ich falsch gelaufen bin und wie ich besser werden kann. Mein Code ist stark von dem Benutzer @Rabbid76 und vielen anderen Quellen im Internet inspiriert. Das Hauptproblem ist, dass ich nicht weiß, was ich tue, und ich muss ein bisschen Sinn machen, wie ich es anwenden kann. Deshalb bin ich hier. < /P>

Code: Select all

import pygame
import sys
import os
import math
import random

# Initialize PyGame and fonts
pygame.init()
pygame.font.init()

# Set up the game window
screen_width = 1440
screen_height = 900
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
pygame.display.set_caption("cubic_days")

# Set up the font object
scorefont = pygame.font.SysFont("comicsansms", 36)

# Set the frame rate
clock = pygame.time.Clock()

score = 0

# Player settings
player_width = 50
player_height = 50
player_x = screen_width // 2 - player_width // 2
player_y = screen_height // 2 - player_height // 2
player_speed = 5

# Enemy settings
enemy_width = 45
enemy_height = 60
enemy_speed = 4
enemies = []

# Spawn an enemy every 2 seconds minus one fourth of score
enemy_timer = 0
enemy_spawn_time = 2000 - score/4

class Bullet:
def __init__(self, x, y):
self.pos = (player_x+23, player_y+2)
mx, my = pygame.mouse.get_pos()
self.dir = (mx - player_x, my - player_y)
length = math.hypot(*self.dir)
if length == 0.0:
self.dir = (0, -1)
else:
self.dir = (self.dir[0]/length, self.dir[1]/length)
angle = math.degrees(math.atan2(-self.dir[1], self.dir[0]))
self.bullet = pygame.Surface((20, 12)).convert_alpha()
self.bullet.fill((255, 255, 255))
self.bullet = pygame.transform.rotate(self.bullet, angle)
self.speed = 11.5

def update(self):
self.pos = (self.pos[0]+self.dir[0]*self.speed,
self.pos[1]+self.dir[1]*self.speed)

def draw(self, surf):
bullet_rect=self.bullet.get_rect(center=self.pos)
surf.blit(self.bullet, bullet_rect)

pos = (player_x+23, player_y+2)
bullets = []
# loading image zone
bg = pygame.image.load("bg.png")
player_character = pygame.image.load("prototype.png")

# shooting sound
firing = pygame.mixer.Sound("fire.mp3")

# beginner music playing script, i bet you expected more
pygame.mixer.music.load("Forest_Funk.mp3")
pygame.mixer.music.play(-1)

# Main game loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
bullets.append(Bullet(*pos))
pygame.mixer.Sound.play(firing)

Bullet.pos = (player_x, player_y)

# Collision detection function
def check_collision(Bullets, enemies):
return Bullet.colliderect(enemies, False)

# Check for collisions
for bullet in bullets[:]:
for enemy in enemies[:]:
if check_collision((Bullet.pos[0], Bullet.pos[1]), (enemy[0], enemy[1], enemy_width, enemy_height)):
bullets.remove(bullet)
enemies.remove(enemy)
score += 1
break

# Handle player movement
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
player_x -= player_speed
if keys[pygame.K_d]:
player_x += player_speed
if keys[pygame.K_s]:
player_y += player_speed
if keys[pygame.K_w]:
player_y -= player_speed
# exit code, yay.  no more using alt tab
if keys[pygame.K_ESCAPE]:
pygame.quit()
sys.exit()

# Update enemy positions and spawn new ones
current_time = pygame.time.get_ticks()
if current_time - enemy_timer > enemy_spawn_time:
enemy_x = random.randint(0, screen_width - enemy_width)
enemy_y = -enemy_height
enemies.append(pygame.Rect(enemy_x, enemy_y, enemy_width, enemy_height))
enemy_timer = current_time

for enemy in enemies:
enemy.y += enemy_speed

# Remove enemies that are off the screen
enemies = [enemy for enemy in enemies if enemy.y < screen_height]

screen.blit(bg, (0, 0))

pygame.draw.rect(screen, (0, 128, 255), (player_x, player_y, player_width, player_height))

for bullet in bullets[:]:
bullet.update()
if not screen.get_rect().collidepoint(bullet.pos):
bullets.remove(bullet)

for bullet in bullets:
bullet.draw(screen)

# Draw the enemies
for enemy in enemies:
pygame.draw.rect(screen, (255, 0, 0), enemy)

pygame.display.update()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post