Seite 2 von 4

Verfasst: 19.03.2008 20:04
von obar
Hört sich sehr logisch an. Aber jetzt kommt genau wieder mein Problem. Mir fällt im Moment einfach keine Lösung ein, wie ich erkenne,
wann der Gegner an eine Weggabelung(oder Ecke) kommt und damit ich ihm einen Richtungwechsel geben kann muss ich im ja vorsagen, wo er
überhaupt weitergehen kann. Ich denke, man kann dies über die Kollision prüfen. Bin mir aber nicht sicher.

Verfasst: 19.03.2008 20:08
von Kaeru Gaman
du musst auch für dein männeken doch prüfen,
ob er sich auf nem weg befindet und ob vor ihm ne wand ist.
ebenso musst du prüfen, ob sich oben ne lücke befindet, wenn er nach oben gesteuert wird.

genauso geht das für deine gegner.

du musst für jede der figuren die nachbar-tiles prüfen, was dort ist.
eine prüfung ist immer nur fällig, wenn eine figur komplett auf einer tile ist.
damit erübrigt sich auch die frage mit irgendwelchem bruchrechnen.
und dann checkst du einfach, was für nachbartiles oben, unten, links und rechts sind.

Verfasst: 19.03.2008 21:35
von obar
Sorry, steh völlig auf dem Schlauch. Bei dir hört es sich immer so einfach an. Ich finde keinen Einstieg in diese Abfrage. :oops:

Verfasst: 19.03.2008 21:58
von Kaeru Gaman
jetz läuft aber stargate... >__<"

vielleicht guck ich mir später deinen code mal richtig an,
damit ich dir spezifischer was sagen kann....

letztendlich musst du doch ne tilemap haben, und sowieso abfragen, wo sich deine figur befindet.
deine steuerung des players brauchst du das doch auch...

so, stargate geht weiter...

Verfasst: 19.03.2008 22:22
von Kaeru Gaman
also, du solltest auf jeden fall gleich in mapkoordinaten rechnen.
deine isAcc() übernimmt pixelkoordinaten, und rechnet die aufwendig um,
um auf die map zuzugreifen.
gleichzeitig rechnest du aber die koordinaten, die du ihr übergibst, auch erst aus.
warum also mit speed und pixelkoordinaten arbeiten?
führ deine mapabfrage eben nur dann durch, wenn sich deine figur genau mittig auf einer tile befindet.
in den anderen wieviel-auch-immer fällen kann man sowieso keinesfalls eine richtungsänderung vornehmen.

Verfasst: 19.03.2008 23:04
von STARGÅTE
Kaeru Gaman hat geschrieben:jetz läuft aber stargate... >__<"
ach ja ? ich sitze aber ^^

PS: Freue mich schon auf Ark of Truth

Verfasst: 19.03.2008 23:13
von obar
Hmm, also im Moment bin ich verwirrter als vorher. Auch auf die Gefahr dass ich dich langsam nerve, musst(darfst) du jetzt deutlicher werden.

Die Parameter die ich der Proc übergebe, verwende ich ja für die Kollision und speed wird verwendet, damit es keine Überschneidungen
der Pixel gibt und die begehbarkeit der Tiles wird auch geprüft. Ausserdem hab ich gedacht das ich mit i und k die mapkoordinaten habe.
Oder ich verstehe deine Sicht von Mapkoordinaten nicht.

Verfasst: 19.03.2008 23:31
von Kaeru Gaman
> Die Parameter die ich der Proc übergebe, verwende ich ja für die Kollision und speed wird verwendet, damit es keine Überschneidungen
> der Pixel gibt und die begehbarkeit der Tiles wird auch geprüft. Ausserdem hab ich gedacht das ich mit i und k die mapkoordinaten habe.

ja klar, aber warum übergibst du in jedem frame die pixelkoordinaten, anstatt nur alle soundsoviel frames die mapkoordinaten zu übergeben und nur dann zu prüfen.
auf erfolgten punktefraß, auf kollision mit nem gegner, auf möglichkeit zum richtungswechsel...

alles das kann ja nur dann erfolgen, wenn sich der pac genau auf einer tile befindet.

zwischendrin werden zwar soundsoviel frames dargestellt,
aber es kann sich ja nichts ändern, für keine spielfigur.
alle gehen stur aufs nächste tile in bewegungsrichtung weiter.
keine kollision hat irgendeine bedeutung.
keiner kann seine bewegungsichtung ändern.

erst wenn die bewegungsabfolge vorbei ist, brauchst du prüfen,
ob ein punkt gefressen wurde, ob pac in ein gespenst gerannt ist,
ob der User ne taste gedrückt hat um die richtung zu wechseln,
und eben auch ob der gegner seinen weg ändern soll.

klar, du kannst den ganzen krempel auch soundso oft unnütz prüfen,
aber das brauchst du nicht.
deswegen rate ich halt dazu, den kompletten ablauf auf ganze tiles festzulegen,
und in den frames zwischendrin nur darzustellen.
klar, du kannst noch mitschreiben, wenn der User ne taste drückt,
falls du die eingabe komfortabler gestalten willst, sozusagen gebuffert...
aber im endeffekt genügt es doch, wenn er genau dann die taste drückt,
wenn pac die richtung ändern kann, und in keinem anderen frame.


@SG
> PS: Freue mich schon auf Ark of Truth
erzähl ma....

...shit... herkules in space geht schon weiter und ich schreib immer noch....

PS:
@obar
ein kompletter, ausführbarer code deines momentanen entwicklungsstandes würde auch helfen.
in deinem ersten posting war ja noch vieles drin, was du inzwischen verbessert hast,
hat also keinen zweck den auszuführen...

Verfasst: 20.03.2008 00:12
von obar
Nein, nein. Bei mir ist's halt so dass ich nicht jeden Tag Zeit habe etwas zu probieren(proggen). Ich hatte die letzten 2 Tage gar keine Zeit mehr etwas zu tun.
Das heisst, man zerbricht sich den ganzen Tag den Kopf darüber wie man es lösen könnte und kanns trotzdem nicht probieren, weil einfach oft die Zeit fehlt.
Es ist mir auch bewusst, das ich so nicht sehr weit kommen werde mit programmieren, aber ich werde mein Bestes geben und lerne gerne weiter dazu. Ich bin
aber froh, dass es so gute Foren gibt wie dieses, wo man immer wieder Fragen kann und einem wirklich super weitergeholfen wird. :D

Zum Code, da kannst du eigentlich mein erstes Posting nehmen und die Korrektur von @Stargate einfügen. Oder ich könnte den Code einfach nochmals posten. :)

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(1024,768,32,"")
UsePNGImageDecoder()

Global mapHeight.l  = 29
Global mapWidth.l   = 35
Global MapX.l       = 24 
Global MapY.l       = 24 
Global posX.l       = 60
Global posY.l       = 60
Global gposX.l      =804
Global gposY.l      = 60
Global i
Global k
Global gi
Global gk
Global speed        =  2
Global points       = -5

#TileSize     = 24
#playerWidth  = 24
#playerHeight = 24

CreateSprite(0,24,24)
StartDrawing(SpriteOutput(0))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,24,24,RGB(0,0,0))
StopDrawing()

CreateSprite(1,24,24)
StartDrawing(SpriteOutput(1))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,24,24,RGB(255,255,255))
StopDrawing()

CreateSprite(2,24,24)
StartDrawing(SpriteOutput(2))
DrawingMode(#PB_2DDrawing_Default)
Circle(12,12,12,RGB(255,100,255))
StopDrawing()

CreateSprite(3,24,24)
StartDrawing(SpriteOutput(3))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,24,24,RGB(0, 0, 0))
Circle(12,12,3,RGB(254, 255, 61))
StopDrawing()

CreateSprite(4,24,24)
StartDrawing(SpriteOutput(4))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,24,24,RGB(255,0,255))
Circle(12,12,12,RGB(0,0,255))
StopDrawing()

Structure _object
    TileID.l
EndStructure

Global Dim map._object(mapWidth, mapHeight)

Restore map
For t = 0 To mapHeight
    For n = 0 To mapWidth 
        Read map(n,t)\TileID
    Next 
Next 

Procedure isAcc(x.l, y.l) 
  Shared map()
  i = ((posx-mapX+x)/#TileSize)
  k = ((posy-mapY+y)/#TileSize)
    
  If map(i, k)\TileID  < 1 Or map(i, k)\TileID  > 2
    ProcedureReturn 1
  EndIf
  ProcedureReturn 0 
EndProcedure

Procedure gisAcc(x.l, y.l) 
  Shared map()
  gi = ((gposx-mapX+x)/#TileSize)
  gk = ((gposy-mapY+y)/#TileSize) 
  
  If map(gi, gk)\TileID  < 1  Or map(gi, gk)\TileID  > 2 
    ProcedureReturn 1 
  EndIf
  ProcedureReturn 0 
EndProcedure

Repeat
    ClearScreen(0)
    ExamineKeyboard()
    
    For t = 0 To mapHeight 
        For n = 0 To mapWidth
            If init = 0
                If map(n, t)\TileID = 0
                   punkte + 1 
                   map(n, t)\TileID = 3
                EndIf
            EndIf    
            DisplayTransparentSprite(map(n, t)\TileID, (mapX + #TileSize*n),(mapY + #TileSize*t) ) 
        Next 
    Next     
   
    init = 1
        
    If KeyboardPushed(#PB_Key_Right)  
        If isAcc( speed-12,-12) And isAcc( speed+11,-12) And isAcc(speed -12,11) And isAcc(speed+ 11,11)
            right = 1:left = 0:up = 0:down = 0
        EndIf
    EndIf
    If KeyboardPushed(#PB_Key_Left)
        If isAcc(-speed-12,-12) And isAcc(-speed+11,-12) And isAcc(-speed-12,11) And isAcc(-speed+11,11)  
            right = 0:left = 1:up = 0:down = 0
        EndIf 
    EndIf
    If KeyboardPushed(#PB_Key_Up)
        If isAcc(-12,-speed-12) And isAcc(11,-speed-12) And isAcc(-12,-speed+11) And isAcc(11,-speed+11)     
            right = 0:left = 0:up = 1:down = 0
        EndIf
    EndIf
    If KeyboardPushed(#PB_Key_Down)
        If isAcc(-12, speed-12) And isAcc(11, speed-12) And isAcc(-12, speed+11) And isAcc(11, speed+11)     
            right = 0:left = 0:up = 0:down = 1
        EndIf
    EndIf
      
    If right = 1 And isAcc( speed-12,-12) And isAcc( speed+11,-12) And isAcc(speed -12,11) And isAcc(speed+ 11,11)
        posx + speed
    EndIf
    If left = 1 And isAcc(-speed-12,-12) And isAcc(-speed+11,-12) And isAcc(-speed-12,11) And isAcc(-speed+11,11)
        posx - speed
    EndIf
    If up = 1 And isAcc(-12,-speed-12) And isAcc(11,-speed-12) And isAcc(-12,-speed+11) And isAcc(11,-speed+11)
        posy - speed
    EndIf
    If down = 1 And isAcc(-12, speed-12) And isAcc(11, speed-12) And isAcc(-12, speed+11) And isAcc(11, speed+11)
        posy + speed
    EndIf   
    ;
    ; 
    ; Primitive Zielverfolgung  ( Flucht noch nicht eingefügt) 
    ;
    ; 
    If posx>gposx And gisAcc( speed-12,-12) And gisAcc(speed+ 11,-12) And gisAcc(speed -12,11) And gisAcc(speed+ 11,11)
            gposx + speed 
    EndIf
    If posx<gposx And gisAcc(-speed -12,-12) And gisAcc(-speed+11,-12) And gisAcc(-speed -12,11) And gisAcc( -speed+11,11) 
            gposx - speed
    EndIf
    If posy>gposy And gisAcc( -12,speed-12) And gisAcc( 11,speed-12) And gisAcc(-12,speed+11) And gisAcc(11,speed+11)  
            gposy + speed
    EndIf 
    If posy<gposy And gisAcc( -12,-speed-12) And gisAcc( 11,-speed-12) And gisAcc( -12,-speed+11) And gisAcc(11,-speed+11) 
            gposy - speed
    EndIf
    
    
    
    
    If isAcc(0,0) And isAcc(0,0) And isAcc(0,0) And isAcc(0,0)
        If map(i, k)\TileID = 3
            map(i, k)\TileID = 0
            punkte - 1
            points + 5
        EndIf
    EndIf   
    
    DisplayTransparentSprite(2,posX-#playerWidth/2,posY-#playerHeight/2)
    
    DisplaySprite(4,gposX-#playerWidth/2,gposY-#playerHeight/2)

    

    StartDrawing(ScreenOutput())
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(925,50,"PUNKTE",RGB(255,255,255))
    DrawText(930, 80, RSet(Str(points), 6, "0"),RGB(255,255,255))
    StopDrawing()
    
    Delay(1)
    FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

End

DataSection
    map:
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1
    Data.l 1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1
    Data.l 1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
EndDataSection

Verfasst: 20.03.2008 03:10
von obar
:lol: , am Anfang hatte ich nur ein Problem(Gegner). Nun habe ich zwei. Immer noch den Gegner und neu die Änderung mit den Mapkoordinaten.

Folgendes: Bei den negativen Laufrichtungen in X und Y Achse bleibt Pacci zu früh Stehen. Hat vermutlich mit Überschneidung in neues Tile zu tun, da die Koll auf Tile-1 prüft.

Hab den Gegner und einige andere Sachen, die ich im Moment nicht brauche für diese Problemlösung, entfernt.

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(1024,768,32,"")
UsePNGImageDecoder()

Global mapHeight.l  = 29
Global mapWidth.l   = 35
Global MapX.l       = 24 
Global MapY.l       = 24 
Global posX.l       = 48
Global posY.l       = 48
Global i
Global k
Global speed        =  2
Global points       = -5

#TileSize     = 24
#playerWidth  = 24
#playerHeight = 24

CreateSprite(0,24,24)
StartDrawing(SpriteOutput(0))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,24,24,RGB(0,0,0))
StopDrawing()

CreateSprite(1,24,24)
StartDrawing(SpriteOutput(1))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,24,24,RGB(255,255,255))
StopDrawing()

CreateSprite(2,24,24)
StartDrawing(SpriteOutput(2))
DrawingMode(#PB_2DDrawing_Default)
Circle(12,12,12,RGB(255,100,255))
StopDrawing()

CreateSprite(3,24,24)
StartDrawing(SpriteOutput(3))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,24,24,RGB(0, 0, 0))
Circle(12,12,3,RGB(254, 255, 61))
StopDrawing()


Structure _object
    TileID.l
EndStructure

Global Dim map._object(mapWidth, mapHeight)

Restore map
For t = 0 To mapHeight
    For n = 0 To mapWidth 
        Read map(n,t)\TileID
    Next 
Next 


Repeat
    ClearScreen(0)
    ExamineKeyboard()
    
    For t = 0 To mapHeight 
        For n = 0 To mapWidth
            If init = 0
                If map(n, t)\TileID = 0
                   punkte + 1 
                   map(n, t)\TileID = 3
                EndIf
            EndIf    
            DisplayTransparentSprite(map(n, t)\TileID, (mapX + #TileSize*n),(mapY + #TileSize*t) ) 
        Next 
    Next     
   
    init = 1
    
    i = ((posx-mapX)/#TileSize)
    k = ((posy-mapY)/#TileSize)
        
    If KeyboardPushed(#PB_Key_Right)  
        If map(i+1, k)\TileID  < 1 Or map(i+1, k)\TileID  > 2
            right = 1:left = 0:up = 0:down = 0
        EndIf
    EndIf
    If KeyboardPushed(#PB_Key_Left)
        If map(i-1, k)\TileID  < 1 Or map(i-1, k)\TileID  > 2
            right = 0:left = 1:up = 0:down = 0
        EndIf 
    EndIf
    If KeyboardPushed(#PB_Key_Up)
        If map(i, k-1)\TileID  < 1 Or map(i, k-1)\TileID  > 2   
            right = 0:left = 0:up = 1:down = 0
        EndIf
    EndIf
    If KeyboardPushed(#PB_Key_Down)
        If map(i, k+1)\TileID  < 1 Or map(i, k+1)\TileID  > 2   
            right = 0:left = 0:up = 0:down = 1
        EndIf
    EndIf
      
    If right = 1
        If map(i+1, k)\TileID  < 1 Or map(i+1, k)\TileID  > 2
            posx + speed
        EndIf        
    EndIf
    If left = 1
        If map(i-1, k)\TileID  < 1 Or map(i-1, k)\TileID  > 2  
            posx - speed
        EndIf
    EndIf
    If up = 1
        If map(i, k-1)\TileID  < 1 Or map(i, k-1)\TileID  > 2  
            posy - speed
        EndIf
    EndIf
    If down = 1
        If map(i, k+1)\TileID  < 1 Or map(i, k+1)\TileID  > 2  
            posy + speed
        EndIf
    EndIf   
    
    
    
    If map(i, k)\TileID = 3
        map(i, k)\TileID = 0
        punkte - 1
        points + 5
    EndIf
   
    
    DisplayTransparentSprite(2,posX,posY)
    
       
    StartDrawing(ScreenOutput())
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(925,50,"PUNKTE",RGB(255,255,255))
    DrawText(930, 80, RSet(Str(points), 6, "0"),RGB(255,255,255))
    DrawText(10,10,"map(TileID): "+Str(map(i-1, k)\TileID),RGB(255,0,255))
    DrawText(10,30,"richtung: "+Str(right),RGB(255,0,255))
    DrawText(10,50,"posx: "+Str(posx),RGB(255,0,0))
    StopDrawing()
    
    Delay(1)
    FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

End

DataSection
    map:
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1
    Data.l 1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1
    Data.l 1,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1
    Data.l 1,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1
    Data.l 1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1
    Data.l 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
EndDataSection