Hallo, brauche Hilfe bei Spiele Programmierung (pygame ;) )

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
NeedForHelp
User
Beiträge: 1
Registriert: Freitag 26. Mai 2006, 16:43

Freitag 26. Mai 2006, 16:51

Und zwar habe ich folgende Fragen:

1. Wie kann ich ein neues Level erstellen, bzw wo genau, muss was eingefügt werden?

2. Welchen Code benötigt man, dass das 2. Level beginnt, wenn das 1. vorbei ist und wo muss der Code stehen?

Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte, vllt sogar das untenstehende überarbeitet:

Code: Alles auswählen

# -*- coding: cp1252 -*-
import pygame
from pygame.locals import *
from time import clock

def main():
    steine_x=25
    steine_y=19

    feld=[[1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],\
          [1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],\
          [1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1],\
          [1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1],\
          [1,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1],\
          [1,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1],\
          [1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1],\
          [1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1],\
          [1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1],\
          [1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1],\
          [1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1],\
          [1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1],\
          [1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1],\
          [1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1],\
          [1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,0,1],\
          [1,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1],\
          [1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1],\
          [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1],\
          [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]

    bildgroesse = [25,25]
    bsgroesse = steine_x * bildgroesse[0], steine_y * bildgroesse[1]+30

    playerpos = [24,1]
    ausgang = [1,0]
    
    bewegung = [0,0]
    lila = (155, 55, 255)
    gelb = (244, 253, 90)
    hintergrundfarbe = lila

    pygame.init()
    bildschirm = pygame.display.set_mode(bsgroesse)
    pygame.display.set_caption('Ein Game mit Spielfeld-Karte')

    player1 = pygame.image.load("player1.jpg")
    player1 = pygame.transform.scale(player1, bildgroesse)
    stein1 = pygame.image.load("mauer15.jpg")
    stein1 = pygame.transform.scale(stein1, bildgroesse)

    farbschluessel = player1.get_at((0,0))
    player1.set_colorkey(farbschluessel, RLEACCEL)

    playerrechteck = player1.get_rect()
    playerrechteck = playerrechteck.move( [playerpos[0]*bildgroesse[0],playerpos[1]*bildgroesse[0]] )

    weiter = True
    
    #Voreinstellungen für die Zeit anzeige
    Zeit = clock()
    text = pygame.font.Font(None, 20)
    text.set_italic(1)
    tcolor = gelb
    textposition = [30, bsgroesse[1] - 20]


    while weiter:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                weiter = False
            if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                weiter = False
            if event.type == pygame.KEYDOWN and event.key == pygame.K_UP:
                bewegung[1] = - 1
            if event.type == pygame.KEYDOWN and event.key == pygame.K_DOWN:
                bewegung[1] = 1
            if event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT:
                bewegung[0] = - 1
            if event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
                bewegung[0] = 1
            if event.type == pygame.KEYUP and (event.key in [pygame.K_UP,pygame.K_DOWN,pygame.K_LEFT,pygame.K_RIGHT]):
                bewegung = [0,0]

           # if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:

        # Das Feld ist nach [y,x] aufgebaut, die playerposition und bewegung nach [x,y]
        # daher muss hier verdreht gerechnet werden. - > Ändern ?!
        if feld[playerpos[1]+ bewegung[1]] [playerpos[0]] == 0:
            playerpos[1] = playerpos[1] + bewegung[1]
        if feld[playerpos[1]] [playerpos[0] + bewegung[0]] == 0:
            playerpos[0] = playerpos[0] + bewegung[0]

        if playerpos == ausgang:
            weiter = False
            print "Du hast ",clock()-Zeit," sek gebraucht!"

        playerrechteck.topleft = playerpos[0] * bildgroesse[0], playerpos[1] * bildgroesse[1]
        bildschirm.fill(hintergrundfarbe)

        for y1 in range(steine_y):
            for x1 in range(steine_x):
                if feld[y1] [x1]==1:
                    bildschirm.blit(stein1, (x1*bildgroesse[0],y1*bildgroesse[1]))
        bildschirm.blit(player1, playerrechteck)

        # die Textanzeige wird zusammengesetzt (3 Vorkomma- + 1 Nachkommastelle) und in ein Bild umgewandelt
        anzeige = "Zeit: %3.2f" % (clock()-Zeit)
        print anzeige
        tbild = text.render(anzeige, 0, tcolor)
        # zeige auch das Textbild an der Texposition an
        bildschirm.blit(tbild, textposition)

        pygame.display.flip()
    pygame.quit()

if __name__ == '__main__':
    main()
--------------------------------------------------------------------------------

:( :?:

Edit (Leonidas): Code in Python-Tags gesetzt.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Freitag 26. Mai 2006, 17:31

Pygame selber kennt keine "Level". Das, was im geposteten code am ehesten nach Level aussieht, dürfte "feld" sein.

Um daran vernünftig arbeiten zu können, solltest du das ganze in mehrere Funktionen aufteilen, die für so wenig zuständig sind wie möglich. Wie das Level gewechselt wird, hängt davon ab, wie du es teilst.
Martin89
User
Beiträge: 22
Registriert: Freitag 12. Mai 2006, 21:03
Wohnort: /home/

Freitag 26. Mai 2006, 18:26

Hallo ich weis das das zwar sicher nicht ganz das ist was du hoeren willst, aber ..

wenn du Spiele programmieren willst empfehle ich dir Panda3D
das ist eine sehr einfach zu verstehende gameengine.
Der einzige Nachteil ist: die deutsche comunity befindet sich erst im Aufbau dh es gibt sie eigentlich noch nicht wirklich das forum ist mehr oder weniger tot.

schau einfach einmal auf http://www.panda3d.org dort gibts die downloads, das forum, manual, etc.

lg Martin
Antworten