Hilfe objektorientierte Programmierung python pygame

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
poiuy281
User
Beiträge: 1
Registriert: Donnerstag 9. April 2015, 21:38

Guten Tag alles, (Enschuldegung mein Deutch, ist nicht so gut)
Ich bin in meine letze classe (Ich habe den Französich Abitur dieses jahr), und ich möchte eine videospil machen um meine abitur zu haben.
Mein problem ist dass mein lehrer bittet mir dass ich möchte meine programm verwandeln in objektorientierte Programmierung (class, self...), aber ich kenne nicht wo ich anfange, deshalb bitte ich ihre Hilfe. Vielen Danke schöne.
Hier du kannst meine code sehBacen :

Code: Alles auswählen

import pygame
import random
from GIFImage import *
pygame.init()
fenetre = pygame.display.set_mode( (700,400), RESIZABLE )
pygame.display.set_caption("Twisted fates")
pygame.Surface((700,400))
imageLogo = pygame.image.load("logo.png")
imageLogo = pygame.transform.scale(imageLogo,(400,150))
imagejouer = pygame.image.load("Play.png")
imagejouer = pygame.transform.scale(imagejouer,(100,50))
imagecontrol = pygame.image.load("Controls.png")
imagecontrol = pygame.transform.scale(imagecontrol,(100,50))
background = pygame.image.load("fond.jpg")
imagebs = pygame.image.load("Best_scores.png")
imagebs = pygame.transform.scale(imagebs,(100,50))
imagecarre = pygame.image.load("Carre.png")
imagecarre = pygame.transform.scale(imagecarre,(100,3))
monde=pygame.image.load("Fond2.png")
imgMarcelineDroite = GIFImage("Marceline(normal).gif")
imgMarcelineStatique = pygame.image.load("MarcelineStatique.png")
imgMarcelineJump=pygame.image.load("Marceline(Jump).png")
imgMarcelineJumpGauche=pygame.image.load("Marceline(Jump)2.png")
imgMarcelineGauche=GIFImage("Marceline(2)(normal).gif")
imgMarcelineStatiqueGauche=pygame.image.load("Marceline(2)1.png")
imagebarre = GIFImage("ajax.gif")
imagecontrolecran = pygame.image.load("controlsecran.png")
imagecoeur = pygame.image.load("heart.png")
positionbackground=(0,0)
positionlogo = (150,0)
positionjouer = (325,125)
positionbs = (325,325)
positioncontrols = (325,225)
positioncarre= (325,175)
projectile=None
xMarceline = 10
yMarceline=322
mouvementMarceline = 0
xMonde=0
etapeSaut = -1
carre=0
modedejeu=1
loading = 0
a=0
direction = 0


def dessinermenu():
    global fenetre,imagejouer,imageLogo,background,positionbackground,imagebs,positionbs,imagecontrol,positioncontrols,imagecarre,positioncarre
    fenetre.blit(background,positionbackground)
    fenetre.blit(imageLogo,positionlogo)
    fenetre.blit(imagejouer,positionjouer)
    fenetre.blit(imagebs,positionbs)
    fenetre.blit(imagecontrol,positioncontrols)
    fenetre.blit(imagecarre,positioncarre)
    pygame.display.flip()

def dessinerchargement():
    global imagebarre,fenetre,background,positionbackground,loading,modedejeu
    fenetre.blit(background,positionbackground)
    imagebarre.render(fenetre,(325,175))
    loading=loading+1
    if loading==200:
        modedejeu=3
    pygame.display.flip()

def gererClavierEtSouris():
    global positioncarre,carre,continuer,i,positioncarre1,positioncarre2,modedejeu,loading
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            continuer = False
    touchesPressees = pygame.key.get_pressed()
    if touchesPressees[pygame.K_ESCAPE] == True:
        modedejeu = 1
        loading = 0
    if carre == 1:
        positioncarre = positioncarre1
    if carre == 2:
        positioncarre = positioncarre2
    if carre == 0:
        positioncarre = positioncarre
    sourisXY = pygame.mouse.get_pos()
    sourisBoutons = pygame.mouse.get_pressed()
    if 125<sourisXY[1]<175:
        if 325<sourisXY[0]<425:
            positioncarre = (325,175)
            if sourisBoutons[0]==1:
                modedejeu = 2
    if 225<sourisXY[1]<275:
        if 325<sourisXY[0]<425:
            positioncarre = (330,260)
            if sourisBoutons[0]==1:
                modedejeu = 4
    if 325<sourisXY[1]<375:
        if 325<sourisXY[0]<425:
            positioncarre = (330,355)

def controls():
    global fenetre,background,positionbackground,imagecontrolecran
    fenetre.blit(background,positionbackground)
    fenetre.blit(imagecontrolecran,(0,0))
    pygame.display.flip()

def modemenu():
    dessinermenu()

def calculerHauteurSaut(x):
    return int(((-1)*((x-8)*(x-8)))+64)

def dessinerjeu():
    ##On génère le monde.
    global monde,positionmonde, xMonde
    fenetre.blit(monde,(xMonde,0))
    ##On définit le scrolling et on le stoppe aux deux extrêmités de l'image.
    touchesPressees=pygame.key.get_pressed()
    if touchesPressees[pygame.K_RIGHT]== True and xMonde>-2800:
        xMonde=xMonde-4
        fenetre.blit(monde,(xMonde,0))
    if touchesPressees[pygame.K_LEFT]== True and xMonde<0: #On empêche le scrolling en arrière en début de monde.
        xMonde=xMonde+4
        fenetre.blit(monde,(xMonde,0))
    ##On place notre personnage dans le monde et on lui permet de sauter.
    global mouvementMarceline, xMarceline, imgMarcelineDroite, imgMarcelineStatique,yMarceline,modedejeu,loading,a,imgMarcelineJump, imgMarcelineStatiqueGauche, imgMarcelineGauche, Plateformes
    a=yMarceline-calculerHauteurSaut(etapeSaut)-18
    if mouvementMarceline == 0:
        if etapeSaut<0:
            fenetre.blit(imgMarcelineStatique, (xMarceline,a))
        elif etapeSaut>0:
            fenetre.blit(imgMarcelineJump,(xMarceline,a))
    elif mouvementMarceline == 1:
        if etapeSaut<0:
            imgMarcelineDroite.render(fenetre, (xMarceline,a))
        elif etapeSaut>0:
            fenetre.blit(imgMarcelineJump,(xMarceline,a))
    pygame.display.flip() #Rafraichissement complet de la fenêtre avec les dernières opérations de dessin.
    if 137<xMarceline<159 or 417<xMarceline<442 or 509<xMarceline<532:
        if yMarceline == 322:
            yMarceline=350
    else:
        yMarceline=322
    if a ==349:
        modedejeu = 1
        loading = 0
        xMarceline = 10

def ClavierEtSourisJeu():
    global continuer, xMarceline, mouvementMarceline, yMarceline, etapeSaut, imgMarcelineJump, direction, mouvementMarceline, xMarceline, imgMarcelineDroite, imgMarcelineStatique, imgMarcelineJump, imgMarcelineStatiqueGauche, imgMarcelineGauche
    ##On crée un bouton pour quitter la fenètre.
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            continuer = False
    ##On définit le déplacement.
    touchesPressees = pygame.key.get_pressed()
    if touchesPressees[pygame.K_RIGHT] == True:
        mouvementMarceline = 1
        xMarceline = xMarceline + 1
    elif touchesPressees[pygame.K_LEFT] == True:
        mouvementMarceline = 1
        xMarceline = xMarceline - 1
    else:
        mouvementMarceline = 0
    ##On permet d'afficher un personnage qui va soit vers la gauche soit vers la droite.
    if touchesPressees[pygame.K_LEFT]== True:
        imgMarcelineJump=imgMarcelineJumpGauche
        imgMarcelineStatique=imgMarcelineStatiqueGauche
        imgMarcelineDroite=imgMarcelineGauche
    elif touchesPressees[pygame.K_RIGHT]== True:
        imgMarcelineJump=pygame.image.load("Marceline(jump).png")
        imgMarcelineStatique=pygame.image.load("MarcelineStatique.png")
        imgMarcelineDroite=GIFImage("Marceline(normal).gif")
    ##On active le calcul des x pour permettre le saut.
    if touchesPressees[pygame.K_UP]==True and etapeSaut == -1:
        etapeSaut = 0

def modejeu():
    global etapeSaut
    ClavierEtSourisJeu()
    dessinerjeu()
    if etapeSaut >= 0: #Si etapeSsaut est >0, on saute. On va faire avancer etapeSaut pas à pas de 0 à 16.
        etapeSaut += 0.6
    if etapeSaut > 16:#Le saut étant fini, on réinitialise à etapeSaut=-1.
        etapeSaut = -1
clock = pygame.time.Clock()
continuer=True
while continuer:
    clock.tick(50)
    if modedejeu ==1:
        modemenu()
    if modedejeu == 2:
        dessinerchargement()
    if modedejeu == 3:
        modejeu()
    if modedejeu ==4:
        controls()
    gererClavierEtSouris()
    print (a)
    print (yMarceline)
pygame.quit()
BlackJack

@poiuy281: Als Zwischenschritt könntest Du es vielleicht erst einmal so umschreiben das Funktionen verwendet werden. Im Grunde gibt es nämlich nur eine einzige selbst definierte Funktion in dem Quelltext die den Namen auch tatsächlich verdient (`calculerHauteurSaut()`). Alles andere sind eher benannte Code-Abschnitte als Sprungziele.

Das Hauptprogramm gehört auch in eine Funktion, üblicherweise `main()` genannt und ``global`` sollte in einem sauber geschriebenen Programm nicht vorkommen. Wenn Funktionen auf Werte zugreifen (die keine Konstanten sind) dann sollten die als Argumente übergeben werden. Und wenn sie ein Ergebnis haben verlässt das die Funktion mittels ``return``.

Wenn das Programm mit ”echten” Funktionen umgesetzt ist, dann sieht man normalerweise deutlich(er) welche Daten und Funktionen mal sinnvoll zu Objekten zusammenfassen kann.

Was Namensschreibweisen und Leerzeilen und -zeichen angeht lohnt sich vielleicht ein Blick in den Style Guide for Python Code.

Etwas anderes als Englisch für Namen und Kommentare zu verwenden hat immer das Problem das es deutlich weniger Leute verstehen.
Antworten