Dogger mit Pygame

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Lordoromis
User
Beiträge: 9
Registriert: Montag 26. November 2012, 21:38

Ich verusche gerade, ein "avoid the Rects" spielchen zu programmieren, momentan hätte ich gerne, dass die Enemies 6-0 spawnen sobald die Enemies 1-5 die mitte erreicht haben, das ganze mache ich mit einer If-Schleife, trozdem sind die enemies 6-0 schon von anfang an da:

hier noch der Code, um auch sehen zu können, was genau ich meine:

Code: Alles auswählen

import sys, pygame, time, random
from pygame.locals import*

pygame.init()

Width       = 600
Heigth      = 450
FPS         = 30
MaxSize     = 40
MinSize     = 20
EnemieSpeed = 5
CharSpeed   = 5


Char        = {"CordX" : Width/2,
               "CordY" : Heigth-60,
               "Size"  : 20}

Enemies1      = {"CordX" : random.randint(MaxSize, Width-MaxSize),
               "CordY" : 40,
               "Size"  : random.randint(MinSize, MaxSize)}

Enemies2     = {"CordX" : random.randint(MaxSize, Width-MaxSize),
               "CordY" : 40,
               "Size"  : random.randint(MinSize, MaxSize)}

Enemies3     = {"CordX" : random.randint(MaxSize, Width-MaxSize),
               "CordY" : 40,
               "Size"  : random.randint(MinSize, MaxSize)}

Enemies4     = {"CordX" : random.randint(MaxSize, Width-MaxSize),
               "CordY" : 40,
               "Size"  : random.randint(MinSize, MaxSize)}

Enemies5      = {"CordX" : random.randint(MaxSize, Width-MaxSize),
               "CordY" : 40,
               "Size"  : random.randint(MinSize, MaxSize)}

Enemies6      = {"CordX" : random.randint(MaxSize, Width-MaxSize),
               "CordY" : 40,
               "Size"  : random.randint(MinSize, MaxSize)}

Enemies7      = {"CordX" : random.randint(MaxSize, Width-MaxSize),
               "CordY" : 40,
               "Size"  : random.randint(MinSize, MaxSize)}

Enemies8      = {"CordX" : random.randint(MaxSize, Width-MaxSize),
               "CordY" : 40,
               "Size"  : random.randint(MinSize, MaxSize)}

Enemies9      = {"CordX" : random.randint(MaxSize, Width-MaxSize),
               "CordY" : 40,
               "Size"  : random.randint(MinSize, MaxSize)}

Enemies0      = {"CordX" : random.randint(MaxSize, Width-MaxSize),
               "CordY" : 40,
               "Size"  : random.randint(MinSize, MaxSize)}

def main():

    global Screen, MainClock, BasicFont, Char 

    
    Screen = pygame.display.set_mode((Width, Heigth))
    pygame.display.set_caption("WhyNot? Dogger!")
    
    MainClock = pygame.time.Clock()
    BasicFont = pygame.font.Font("freesansbold.ttf", 20)

    MoveLeft    = False
    MoveRight   = False
    Rain        = True
    
    while True:
        Screen.fill((0,0,0))
        for event in pygame.event.get():

            if event.type == KEYUP:
                if event.key == K_ESCAPE:
                    pygame.quit()
                    sys.exit()
                if event.key == K_a:
                    MoveLeft = False
                if event.key == K_d:
                    MoveRight = False
            
            if event.type == KEYDOWN:
                if event.key == K_a:
                    MoveLeft = True
                if event.key == K_d:
                    MoveRight = True

        if Rain:
            Enemies1["CordY"] +=EnemieSpeed
            Enemies2["CordY"] +=EnemieSpeed
            Enemies3["CordY"] +=EnemieSpeed
            Enemies4["CordY"] +=EnemieSpeed
            Enemies5["CordY"] +=EnemieSpeed
            Enemies6["CordY"] +=EnemieSpeed
            Enemies7["CordY"] +=EnemieSpeed
            Enemies8["CordY"] +=EnemieSpeed
            Enemies9["CordY"] +=EnemieSpeed
            Enemies0["CordY"] +=EnemieSpeed

        if MoveRight:
            Char["CordX"] += CharSpeed
        elif MoveLeft:
            Char["CordX"] -= CharSpeed
                

        pygame.draw.rect(Screen, (0, 0, 255), (Enemies1["CordX"], Enemies1["CordY"], Enemies1["Size"], Enemies1["Size"]))        
        pygame.draw.rect(Screen, (0, 0, 255), (Enemies2["CordX"], Enemies2["CordY"], Enemies2["Size"], Enemies2["Size"]))
        pygame.draw.rect(Screen, (0, 0, 255), (Enemies3["CordX"], Enemies3["CordY"], Enemies3["Size"], Enemies3["Size"]))
        pygame.draw.rect(Screen, (0, 0, 255), (Enemies4["CordX"], Enemies4["CordY"], Enemies4["Size"], Enemies4["Size"]))
        pygame.draw.rect(Screen, (0, 0, 255), (Enemies5["CordX"], Enemies5["CordY"], Enemies5["Size"], Enemies5["Size"]))        

        pygame.draw.line(Screen, (0, 200, 0), (0, Heigth-35), (Width, Heigth-35), 5)

        pygame.draw.rect(Screen, (0, 255, 0), (Char["CordX"], Char["CordY"], Char["Size"], Char["Size"]))

        if Enemies1["CordY"] or Enemies2["CordY"] or Enemies3["CordY"] or Enemies4["CordY"] or Enemies5["CordY"] >= Heigth/2:
            
            pygame.draw.rect(Screen, (0, 0, 255), (Enemies6["CordX"], Enemies6["CordY"], Enemies6["Size"], Enemies6["Size"]))        
            pygame.draw.rect(Screen, (0, 0, 255), (Enemies7["CordX"], Enemies7["CordY"], Enemies7["Size"], Enemies7["Size"]))
            pygame.draw.rect(Screen, (0, 0, 255), (Enemies8["CordX"], Enemies8["CordY"], Enemies8["Size"], Enemies8["Size"]))
            pygame.draw.rect(Screen, (0, 0, 255), (Enemies9["CordX"], Enemies9["CordY"], Enemies9["Size"], Enemies9["Size"]))
            pygame.draw.rect(Screen, (0, 0, 255), (Enemies0["CordX"], Enemies0["CordY"], Enemies0["Size"], Enemies0["Size"]))   


        

        
        pygame.display.update()
        MainClock.tick(FPS)



if __name__ == "__main__":
    main()

habe ich da einen Denkfehler gemacht oder schlichtweg ungenau gecodet?
Zuletzt geändert von Anonymous am Sonntag 17. März 2013, 23:04, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@Lordoromis: ``or`` funktioniert nicht so wie Du Dir das vorstellst. ``a or b > 42`` ist das selbe wie ``a or (b > 42)``. Das ist eine Programmiersprache, die versteht nicht was man umgangsprachlich vielleicht so sagen kann. ``or`` ist ein binärer Operator wie ``+`` oder ``-`` oder auch ``>`` oder ``!=``.

Wenn man anfängt Namen zu nummerieren möchte man 99,9% der Fälle eine passendere Datenstruktur anstelle der nummerierten Namen verwenden. Meistens eine Liste. Diese ganzen `Enemies*` verletzen auch das DRY-Prinzip: Don't Repeat Yourself. Wenn man anfängt Quelltext zu kopieren, ist das ein Warnsignal, dass man eigentlich eine Funktion oder eine Schleife schreiben sollte.

`MoveLeft` und `MoveRight` sind koexistent. Die beschreiben eigentlich den gleichen Zustand, nur mit anderen Werten. Besser wäre *ein* Name, der an Werte gebunden wird, die alle Zustände beschreiben können. Zum Beispiel -1, 0, und 1 an einen Namen `x_direction` oder `horizontal_speed` oder so.

Die Namen halten sich nicht an den Style Guide for Python Code.
Antworten