mario spiel

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
hopo
User
Beiträge: 6
Registriert: Samstag 23. April 2011, 17:29

Ich habe ein Mario Bros. Programm angefangen.
Mario's Sprung funktioniert irgendwie nicht. :K
Kann mir jemand helfen? :?: :?: :?: :?: :?: :?: :?:

Code: Alles auswählen

import pygame, sys
pygame.init()
screen = pygame.display.set_mode([720,480])
screen.fill([255, 255, 255])
testo = pygame.image.load('spiele.png')
mario = pygame.image.load('mario.png')
nu = 250
uhr = pygame.time.Clock()
ni = 320
delay = 100
interval = 50
pygame.key.set_repeat(delay, interval)


    
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                nu = nu - 10
            elif event.key == pygame.K_RIGHT:
                nu = nu + 10

                
#hier fängt der Sprung an
            elif event.key == pygame.K_UP:
                for i in range (1, 10):
                    uhr.tick(30)
                    ni = ni - 10
#hier hört er auf

                
    uhr.tick(30)
    screen.fill([255, 255, 255])
    screen.blit(testo, [nu, 200])
    screen.blit(mario, [320,ni])
    pygame.display.flip()

Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Was heißt denn "funktioniert nicht"? Musst du schon genauer beschreiben. Ich würde jetzt mal raten, dass du vergisst, den Mario zu zeichnen während zu schrittweise die Höhe änderst.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@Dauerbaustelle
"genauer beschreiben" ist aber auch sehr genau beschrieben was du für Informationen brauchst :) , er macht offensichtlich einen Fehler den er sich nicht erklären kann, welcher durch eine falsche Handhabung hervor geht. Da ist es schon ziemlich schwer den Fehler zu erklären wenn man ihn selbst nicht versteht.

@hopo
Dauerbaustelle hat dir schon das richtige gesagt, du erhöhst die Variable "ni" 10 mal +10 aber zeichnest nicht, da kannst du auch gleich +100 schreiben. Das Problem ist aber das du mit reinen Bildern arbeiten willst. Hierfür gibt es in pygame ein Sprite(pygame.Sprite), von diesem sollte abgeleitet werden und zB eine "Character"-Klasse erstellt werden. Diese sollte zwei Attribute besitzen, ein Bild "image"(pygame.Surface) und ein Rechteck "rect"(pygame.Rect). Das Rechteck stellt hierbei die Logik dar und hat einige zusätzliche Methoden, wie "move()" oder "move_ip()" mit denen du das Rechteck bewegen kannst.
Zum Zeichnen brauchst nimmt man hier am besten eine Gruppe(pygame.Group) und fügt die einzelnen Sprites den entsprechenden Gruppen zu. Der Sinn dabei ist alle Sprites der Gruppe gleichzeitig mit der "draw()"-Methode zu zeichnen.

Beispiel (Edit: Nun getestet):

Code: Alles auswählen

from pygame.locals import *
import pygame

class Character(pygame.sprite.Sprite):

    def __init__(self, imagefile, *group):
        pygame.sprite.Sprite.__init__(self, *group)
        self.image = pygame.image.load(imagefile)
        self.rect = self.image.get_rect()
 
    def move(self, x, y):
        self.rect.move_ip(x, y)


if __name__ == "__main__":
    pygame.init()
    screen = pygame.display.set_mode([720, 480])
    screen.fill(Color("black"))

    background = pygame.image.load("background.png")
    players = pygame.sprite.Group()
    tario = Character("tario.png", players)
    step = 10
    jump_timer = 0

    clock = pygame.time.Clock()
    while True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                break
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    tario.move(-step, 0)
                elif event.key == pygame.K_RIGHT:
                    tario.move(step, 0)
                elif event.key == pygame.K_UP:
                    jump_timer = 10

        if jump_timer > 0:
            tario.move(0, -step)
            jump_timer -= 1
     
        screen.blit(background, (0, 0))
        players.draw(screen)
        pygame.display.flip()
        clock.tick(30)

    pygame.quit()
Zuletzt geändert von Xynon1 am Sonntag 24. April 2011, 14:33, insgesamt 1-mal geändert.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

@Xynon1: Na ein janz kleines "was erwarte ich" vs. "was passiert" reicht ja schon. "Funktioniert" und "funktioniert nicht" sind jetzt halt keine genauen Erwartungsbeschreibungen :-)
hopo
User
Beiträge: 6
Registriert: Samstag 23. April 2011, 17:29

Ich hab's getestet. Bei mir funktioniert er leider nicht. :cry:
Muss ich noch die Bilddateien abgeben?
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@Dauerbaustelle
Da stimme ich dir auch vollkommen zu, aber "Mario Bros. Programm" hätte ich jetzt für bekannt genug gehalten, so dass die Erwartung relativ deutlich hervorgeht und das was passiert ist im Quelltext auch nicht zu übersehen. Würde ich also durchgehen lassen :D

@hopo
Das kommt jetzt aber doch schon ein wenig desinteressiert rüber. Du bekommst zweimal den Hinweis deinen Fehler detailierter auszuführen und jetzt schreibst du wieder, "funktioniert nicht". - Das ist weder detailiert noch hilfreich.
Mein Beispiel habe ich auch nicht getestet, es sollte lediglich ein Denkanstoß in die richtige Richtung sein, damit du verstehst was ich im Text oben gemeint habe. Fragen dazu beantworte ich gerne, aber
hopo hat geschrieben:Muss ich noch die Bilddateien abgeben?
, ist jetzt auch keine besonders exakte Frage. Wem musst/willst du die abgeben ?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
hopo
User
Beiträge: 6
Registriert: Samstag 23. April 2011, 17:29

Ich habe mir jetzt ein Buch nur über PyGame gekauft.
Vielen Dank :mrgreen:
Antworten