2016-06-13 13 views
1

私はpygameでpythonの線を描いてこの迷路のアウトラインを作成しようとしていますが、フォーマットが乱れていて、何が起きているのか分かりません。私はおそらく、どの文字がforループでアクティブであるかに基づいて線を描画するために作成したロジックに問題があると考えています。Python 3 Pygame Drawing maze

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() 

答えて

2

これをデバッグするための最も簡単な方法は、単にあなたのコード内のprint文のカップルを入れて、X、Y、X2、Y2変数を見ていることです。

  1. 行末のバックスラッシュは文字列は次の行の先頭でを継続PYTHON伝え:

    は、私は以下のような問題点に気づきました。これは、迷路をインデントするためにそこにあるすべての空白がカウントされることを意味します。コードが最初の "|"または "+"の場合、xカウンタはすでに245にあり、行全体が右に移動しています。これを修正するために、各迷路行頭の空白を削除します。
  2. 新しい行があるたびにy値をカウントアップします。しかし、垂直線は2本の水平線のみを接続しますが、実際には迷路ではありません。だから、あなたは2つのことのどちらかをする必要があります:

    a。すべての行の終わりに下がり、あなたの壁を下に引く。

    b。すべての奇妙な行の終わりに下がり、あなたの壁を上に引きます(私が下で行ったように)

  3. 最後に、私はあなたの "+"がどんなものになるか分かりません。現在、それらを使用して、垂直線、水平線、コーナー、ライン端、および交差点を示します。これらのケースでは、異なるASCII記号を見つけ出し、 "+"を適切な記号で置き換えて、必要なものを描画するようにコードを調整する必要があります。それ以外の場合は、垂直線を描画するはずのときに水平線を描くことになります。

コードは多少固定されています。それでも "+"は適切に処理されませんが、問題のある行を赤で描画するようにしたので、正しい振る舞いを簡単に把握する必要があります。現在の迷路出力の

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() 

スクリーンショット: Screenshot of the current maze output

+0

はあなたのフィードバックをありがとうございました、それらは私が助けをはるかに高く評価されるようにpygameのために新たなんだ、これを作成するときに、私が持っていたいくつか見落としています。 –