2016-06-13 7 views
1

Ich versuche, diese Labyrinth Umrisslinie durch Zeichnen von Linien in Python mit Pygame zu erstellen, aber das Format ist durcheinander und ich bin mir nicht sicher, was passiert. Ich glaube, es ist wahrscheinlich ein Problem mit der Logik, die ich zum Zeichnen der Zeilen erstellt habe, basierend darauf, welches Zeichen in der for-Schleife aktiv ist.Python 3 Pygame Drawing Labyrinth

import pygame 
pygame.init() 
global black, white 
white = (255,255,255) 
black = (0,0,0) 
display_width = 1200 
display_height = 800 


gameDisplay = pygame.display.set_mode((display_width,display_height)) 
clock = pygame.time.Clock() 


def draw_line(surface,color,start_pos,end_pos,width): 
    pygame.draw.line(surface,color,start_pos,end_pos,width) 

def game_loop(): 
    maze = "+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+n\ 
      |  |  |  |   |  |  |n\ 
      + +--+ + + +--+ + + + +--+--+ + +--+ +n\ 
      | |  | |  | | |   | |  |n\ 
      + +--+ + + +--+--+ + +--+--+--+--+ + + +n\ 
      |  |  | |  | | |  |  | | |n\ 
      +--+ +--+--+--+ + +--+ + +--+--+--+--+ + +n\ 
      |  |   |  |     | |n\ 
      + + + +--+--+--+--+--+--+--+--+--+--+--+ +--+n\ 
      | | | |  |      |  |n\ 
      + +--+ + +--+ + +--+--+--+--+--+--+ + + +n\ 
      |  | |  |  |  | | | |n\ 
      + +--+--+ +--+--+--+ +--+ + + +--+ + + +n\ 
      |  |   | |  | |  | | |n\ 
      +--+--+ +--+--+--+ + + +--+ +--+--+--+--+ +n\ 
      |     | |      |n\ 
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+" 

    gameExit = False 

    WALL_LENGTH = 20 
    x=y=x2=y2=START=5 


    gameDisplay.fill(white) 

    for i in maze: 
     if i == "+" or i == "-": 
      x2+=WALL_LENGTH 
      draw_line(gameDisplay,black,(x,y),(x2,y2),5) 
      x+=WALL_LENGTH 
     elif i == "n": 
      y+=WALL_LENGTH*2 
      y2=y 
      x=START 
      x2=START 
     elif i == "|": 
      y2+=WALL_LENGTH*2 
      draw_line(gameDisplay,black,(x,y),(x2,y2),5) 
      x+=WALL_LENGTH 
      x2=x 
      y2=y 
     elif i == " ": 
      x+=WALL_LENGTH 
      x2=x 





    while not gameExit: 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: gameExit = True 


     pygame.display.update() 
     clock.tick(30) 


game_loop() 
pygame.quit() 
quit() 

Antwort

2

Der einfachste Weg, dies zu debuggen ist einfach ein paar print-Anweisungen in Ihrem Code zu setzen und einen Blick auf den x, y, x2, y2 Variablen haben.

bemerkte ich die folgenden Probleme:

  1. Der Backslash am Ende einer Zeile der Zeichenfolge weiter am Anfang der nächsten Zeile sagt Python. Dies bedeutet, dass alle Leerzeichen, die Sie dort haben, um das Labyrinth einzurücken, gezählt werden. Zu der Zeit sieht der Code das erste "|" oder "+", der x-Zähler ist bereits bei 245 und verschiebt die ganze Zeile nach rechts. Entferne das Leerzeichen am Anfang jeder Labyrinthlinie, um dies zu beheben.
  2. Sie zählen Ihren y-Wert jedes Mal, wenn Sie eine neue Linie haben. Vertikale Linien verbinden jedoch nur zwei horizontale Linien, sie sind nicht wirklich Labyrinthlinien. Sie müssen also zwei Dinge tun:

    a. Gehen Sie am Ende jeder geraden Reihe nach unten und zeichnen Sie Ihre Wände nach unten.

    b. Gehe am Ende jeder ungeraden Reihe nach unten und zeichne deine Wände nach oben (wie ich unten getan habe)

  3. Schließlich bin ich nicht ganz sicher, was dein "+" sein soll. Sie verwenden sie derzeit, um vertikale Linien, horizontale Linien, Ecken, Linienenden sowie Schnittpunkte zu bezeichnen. Sie müssen verschiedene ASCII-Symbole für diese Fälle herausfinden und Ihr "+" durch das entsprechende Symbol ersetzen und dann Ihren Code anpassen, um zu zeichnen, was erforderlich ist. Ansonsten zeichnest du horizontale Linien, wenn du vertikale zeichnen sollst oder umgekehrt.

Hier ist eine etwas feste Version Ihres Codes. Es behandelt immer noch nicht richtig mit dem "+", aber ich habe es die problematischen Linien in rot zeichnen lassen, so dass es leicht sein sollte, das richtige Verhalten herauszufinden.

import pygame 
pygame.init() 
global black, white 
white = (255,255,255) 
black = (0,0,0) 
red = (255,0,0) 
display_width = 1200 
display_height = 800 

gameDisplay = pygame.display.set_mode((display_width,display_height)) 
clock = pygame.time.Clock() 

def draw_line(surface,color,start_pos,end_pos,width): 
    pygame.draw.line(surface,color,start_pos,end_pos,width) 

def game_loop(): 
    maze = "\ 
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+n\ 
|  |  |  |   |  |  |n\ 
+ +--+ + + +--+ + + + +--+--+ + +--+ +n\ 
| |  | |  | | |   | |  |n\ 
+ +--+ + + +--+--+ + +--+--+--+--+ + + +n\ 
|  |  | |  | | |  |  | | |n\ 
+--+ +--+--+--+ + +--+ + +--+--+--+--+ + +n\ 
|  |   |  |     | |n\ 
+ + + +--+--+--+--+--+--+--+--+--+--+--+ +--+n\ 
| | | |  |      |  |n\ 
+ +--+ + +--+ + +--+--+--+--+--+--+ + + +n\ 
|  | |  |  |  | | | |n\ 
+ +--+--+ +--+--+--+ +--+ + + +--+ + + +n\ 
|  |   | |  | |  | | |n\ 
+--+--+ +--+--+--+ + + +--+ +--+--+--+--+ +n\ 
|     | |      |n\ 
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+" 

    gameExit = False 

    WALL_LENGTH = 20 
    x=y=x2=y2=START=5 

    gameDisplay.fill(white) 
    linecount = 0 
    for i in maze: 
     if i == "-": 
      x2+=WALL_LENGTH 
      draw_line(gameDisplay,black,(x,y),(x2,y2),5) 
      x+=WALL_LENGTH 
     elif i == "+": 
      x2+=WALL_LENGTH 
      draw_line(gameDisplay,red,(x,y),(x2,y2),5) 
      x+=WALL_LENGTH 
     elif i == "n": 
      linecount+=1 
      if(linecount % 2 == 0): 
       y+=WALL_LENGTH*2 
       y2=y 
      x=START 
      x2=START 
     elif i == "|": 
      y2-=WALL_LENGTH*2 
      draw_line(gameDisplay,black,(x,y),(x2,y2),5) 
      x+=WALL_LENGTH 
      x2=x 
      y2=y 
     elif i == " ": 
      x+=WALL_LENGTH 
      x2=x 

    while not gameExit: 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: gameExit = True 

     pygame.display.update() 
     clock.tick(30) 

game_loop() 
pygame.quit() 
quit() 

Screenshots der aktuellen Labyrinth Ausgabe: Screenshot of the current maze output

+0

Vielen Dank für Ihr Feedback, das sind einige Flüchtigkeitsfehler ich hatte, als diese zu schaffen, ich bin neu, so dass die Hilfe PyGame sehr geschätzt. –