Sideways/Shooter Python Crash Course

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Fakhro
User
Beiträge: 21
Registriert: Mittwoch 13. März 2019, 13:44

Hi brauche dringend eure hilfe und zwar hänge ich an der aufgabe vom buch Python Crash Course fest

Code: Alles auswählen

import pygame
from settings import Settings
import sideways_function as gf
from Sideways_ship import Ship
from pygame.sprite import Group


def run_game():


    #Initaliz pygame and creat a screen object.
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_wight,
    ai_settings.screen_height))
    pygame.display.set_caption("Ship Game")

    ship = Ship(ai_settings, screen)
    bullets = Group()


    while True:
        gf.check_events(ai_settings, screen, ship, bullets)
        ship.update()
        gf.update_screen(ai_settings, screen, ship, bullets)
        
run_game()

Code: Alles auswählen

import pygame


from pygame.sprite import Sprite

class Bullet(Sprite):


    def __init__(self, ai_settings, screen, ship):
        super(Bullet, self).__init__()
        self.screen = screen

        self.rect = pygame.Rect(0, 0, ai_settings.bullet_widht,
        ai_settings.bullet_height)
        self.rect.left = ship.rect.left
        self.rect.top = ship.rect.top
        
        self.color = ai_settings.bullet_color
        self.speed_factor = ai_settings.bullet_speed_factor

        self.y = float(self.rect.y)

    def update(self):
        self.y -= self.speed_factor
        self.right = self.y

    def draw_bullet(self):
        pygame.draw.rect(self.screen, self.color, self.rect)
        
            

Code: Alles auswählen

import pygame

class Ship():

    def __init__(self, ai_settings, screen):
        self.screen = screen
        self.ai_settings = ai_settings


        # load image
        self.image = pygame.image.load('Image/rocket.bmp')
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()


        #Set the ship to the right position
        self.rect.left = self.screen_rect.left
        self.rect.bottom = self.screen_rect.bottom
        
        #Movement flags
        self.moving_down = False
        self.moving_up = False

        self.bottom = float(self.rect.bottom)

    def update(self):
        if self.moving_up and self.rect.top > 0:
            self.bottom -= self.ai_settings.ship_speed_factor
        if self.moving_down and self.rect.bottom < self.screen_rect.bottom:
            self.bottom += self.ai_settings.ship_speed_factor

        self.rect.bottom = self.bottom
        
    def blitme(self):
        self.screen.blit(self.image, self.rect)

Code: Alles auswählen

import sys

import pygame

from sideways_bullets import Bullet

def check_keydowns_events(event, ai_settings, screen, ship, bullets):
    if event.key == pygame.K_UP:
        ship.moving_up = True
    elif event.key == pygame.K_DOWN:
        ship.moving_down = True
    elif event.key == pygame.K_SPACE:
        new_bullet = Bullet(ai_settings, screen, ship)
        bullets.add(new_bullet)


def check_keyup_events(event, ship):
    if event.key == pygame.K_UP:
        ship.moving_up = False
    elif event.key == pygame.K_DOWN:
        ship.moving_down = False
                

def check_events(ai_settings, screen, ship, bullets):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            check_keydowns_events(event, ai_settings, screen, ship, bullets)
        elif event.type == pygame.KEYUP:
            check_keyup_events(event, ship)

def update_screen(ai_settings, screen, ship, bullets):
    screen.fill(ai_settings.bg_color)
    ship.blitme()
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    pygame.display.flip()
    
Undzwar gehen wen ich auf space drücke bewegen sich nicht die bälle nach rechts sondern bleiben einfach bei mir an der linken seiten stehen
ich hoffe ihr könnt mir helfen

mfg
fakhro
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

Ohne getestet zu haben: Wahrscheinlich willst du in der update-Methode von Bullet auch self.rect verändern, da das ja die Position beim Zeichnen bestimmt.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Das erste, was auffällt, ist, dass Du eine Klasse pro Datei hast. Die sind sehr kurz und damit solltest Du erstmal alles in eine Datei packen.
Module schreibt man klein, und statt ein ›sideways_‹-Präfix würde man statt dessen ein sideways-Paket erzeugen.

›Bullet.update‹ wird nie aufgerufen. Das Attribut ›y‹ ist unsinnig, da es, wenn es funktionieren würde, nur redundant zu rect wäre. In »Ship« machst Du so etwas ähnliches, und da ist ›self.bottom‹ auch unsinnig.
Antworten