2010-12-30 8 views
2

Die NetLogo Schildkröten halten sich durch die Mauern des Labyrinths. Wie verhindere ich, dass sie durch die Wände gehen und sie stattdessen die Richtung wechseln lassen?NetLogo Wall Collision - 'Bounce' Funktion

Ich bin dankbar für jede Hilfe.

Mein Code so weit:

breed [ defaults default ] 
defaults-own [ new-heading ] 
breed [squares1 square] 
breed [squares2 square] 
breed [squares3 square] 
globals [ score ] 

to setup-row [row colour segments] 
    foreach segments 
    [ 
     if pycor = row * row-patches-width and 
     (pxcor >= col-patches-width * (item 0 ?)) and (pxcor <= col-patches-width * (item 1 ?)) 
      [set pcolor colour] 
    ] 
end 

to setup-col [col colour segments] 
    foreach segments 
    [ 
     if pxcor = col * col-patches-width and 
     (pycor >= row-patches-width * (item 0 ?)) and (pycor <= row-patches-width * (item 1 ?)) 
      [set pcolor colour] 
    ] 
end 

to setup-arwels-maze 
    clear-all 
    set score 0 
    setup-defaults 
    setup-squares1 
    setup-squares2 
    setup-squares3 
    ask patches 
    [  if (pxcor >= min-pxcor and pxcor <= max-pxcor and 
     pycor >= min-pycor and pycor <= max-pycor) 
      [set pcolor black] 

     setup-row 8 white [[-15 15]] 
     setup-row 6 white [[-15 -10][10 15]] 
     setup-row 3 white [[-15 -10][10 15]] 
     setup-row 6 white [[-4 4]] 
     setup-row 4 white [[-6 6]] 
     setup-row -1 white [[-2 2]] 
     setup-row -3 white [[-4 4]] 
     setup-row 1 white [[-3 3]] 
     setup-row 0 white [[-15 -10][10 15]] 
     setup-row -4 white [[-15 -10][10 15]] 
     setup-row -7 white [[-15 -10][10 15]] 
     setup-row -6 white [[-3 -2][2 3]] 
     setup-row -9 white [[-3 3]] 
     setup-row -11 white [[-11 11]] 
     setup-row -13 white [[-15 15]] 

     setup-col 15 white [[ 0 8][-13 -4]] 
     setup-col 10 white [[-7 -4][0 3]] 
     setup-col 12 white [[ 3 4]] 
     setup-col 7 white [[-7.5 2][6 8]] 
     setup-col 3 white [[-9 -6][1 4]] 
     setup-col 0 white [[-3 -1]] 
     setup-col -3 white [[-9 -6][1 4]] 
     setup-col -7 white [[-7.5 2][6 8]] 
     setup-col -10 white [[-7 -4][0 3]] 
     setup-col -12 white [[ 3 4]] 
     setup-col -15 white [[ 0 8][-13 -4]] 
    ] 
end 

to setup-defaults 
    create-defaults 1 
    [ set color yellow 
    set shape "default" 
    set size 4 
    setxy 2 -48 
    set heading 0    
     ] 
end 

to setup-squares1 
    create-squares1 1 
    [ 
    set shape "square" 
    set color random 14 * 10 + 5 
    set size 3 
    setxy 38 28 
    set heading 0 
     ] 
end 

to setup-squares2 
    create-squares2 1 
    [ 
    set shape "square" 
    set color random 14 * 10 + 5 
    set size 3 
    setxy -5 -8 
    set heading 0 

     ] 
end 

to setup-squares3 
    create-squares3 1 
    [ 
    set shape "square" 
    set color random 14 * 10 + 5 
    set size 3 
    setxy 40 -45 
    set heading 0 
     ] 
end 


to move-up 
    ask defaults[ fd 1.00 ] 
end 

to move-right 
    ask defaults [ rt 90 ] 
end 

to move-down 
    ask defaults [ bk 1.00 ] 
end 

to move-left 
    ask defaults [ lt 90 ] 
end 

Vielen Dank für Ihre Zeit und Hilfe.

Antwort

2

Sie müssen den Bounce selbst implementieren. Dein Code tut das nicht. Die Schildkröten bewegen sich nur um 1, unabhängig davon, was voraus ist.

Eine einfache Bounce (wie eine Kugel, Einfallswinkel Erhaltung) Funktion:

to bounce 
    if [pcolor] of patch-at dx 0 = white [ 
    set heading (- heading) 
    ] 
    if [pcolor] of patch-at 0 dy = white [ 
    set heading (180 - heading) 
    ] 
end 

Es springt gegen weißen Flecke. Beachte, dass deine Schildkröte in die Richtung "gehen" muss, in die sie sich bewegt.