Snake

Hi.

Das ist schon die einfache Lösung.
Du könntest allerdings ALLE Shapes die benötigt werden (Happen und Schlangen Teile)
schon vorher in der IDE positionieren.
Diese musst du dann mit Schleifen alle Versteken und dann mit Visible=True anzeigen lassen wenn Sie benötigt werden.

Nur der Aufwand steht nicht dafür...

Mit der verwendung von Load und Unload hast du weniger zum Coden und du musst weniger Objekte in der Form platzieren.
Weiters hast du noch den schönen Vorteil das du das Spiel verfeinern kanst in dem Du den Benutzern mit einem Formolar Einstellungen vornehmen lassen kannst.
zB. für...
  • Spielfeld breite (in Feldern)
  • Spielfeld höhe (in Feldern)
  • Anzahl Fresschen
  • Startgeschwindigkeit
  • Stufe fur erhöhung der geschwindigkeit
  • usw...
Wenn du jetzt aber von Vornherein alles FIX integrierst kannst du dem Benutzer dann nicht die Möglichkeit geben zb die Anzahl der Fresschen zu erhöhen...

Probier es aus und erhöhe den Wert for FresschenAnz auf 100...
oder reduzier ihn auf 10...

Das du diesen Wert auch unterm Spielen ändern kannst musst du das "Const" durch "Public" ersetzen.
Also aus "Const FreschenAnz As Long = 50" -> "Public FreschenAnz As Long" machen und im "Form_Load" Ereignis dieser Variable dann einen Wert zuweisen.

Was auch noch zu tun ist, ist bei der Happen erstellung zu prüfen ob an dieser Stelle schon ein Happen ist und dann ggf den Happen verschieben.
Jetzt ist es so das mehrere Happen übereinander sein können...

Aber das lass ich dir über...

lg aus Kufstein
 
Sorry... Ich bins nochmal..

Hätte es jetzt noch mal auf eigene Faust probiert, ein neues projekt zu programieren...Aber vergeblich..

Und zwar, das nur ein Fresschen auf dem Spielfeld liegt, und das beim Fressen das Fressen verschwindet...

Funktioniert aber nicht...

Ich häng es mal bei..

Bitte um Fehlersuche...

Mfg
 

Anhänge

  • Snake_V4.zip
    1,9 KB · Aufrufe: 28
Hi!

Ich verstehe jetzt zwar nicht was du vor hast aber du wirst deine Gründe haben...

Warum der eine Happen nicht verschwindet?
Weil du nicht abfragst ob ein Happen da ist...
Visual Basic:
Sub Kollisionsprüfung()
    If shp_snake.Left < shp_spielfeld.Left Or _
       shp_snake.Top < shp_spielfeld.Top Or _
       shp_snake.Left >= shp_spielfeld.Left + shp_spielfeld.Width Or _
       shp_snake.Top >= shp_spielfeld.Top + shp_spielfeld.Height Then
    
        Timer1.Enabled = False
        MsgBox ("Game Over")
    End If
    '#### Fressenprüfen must auch aufrufen
    Fressenprüfung
End Sub

Wenn du das reinschreibst bei dir wirst eine Fehlermeldung bekommen:
Laufzeitfehler '361': Objekt kann weder ge- noch entladen werden

Der Grund ist der das du das eine Shape mit Unload... entladen willst.
Du kannst nur Objekte entladen die du vorher mit Load... geladen hast.
Das geht aber auch nur wenn du ein Steuerelementenfeld hast -> sprich Objekt (Index)!

Was mir auch aufgefallen ist das du Randomize im Form_Load und cmd_neustart_Click Event aufrufts!
Warum machst du das? Hat ja keinen sinn.
Das wird nur in zusammenhang von Rnd benötigt...

Weiters deklarierst du i as Integer im globalen Bereich? Wofür?
das kannst du lokal in der Sub deklarieren wo du eine For Schleife einsetzt.
Sonnst brauchst du diese Variable nicht...

Visual Basic:
Sub Fressenprüfung()
    For i = 0 To 10
        If shp_snake.Left = shp_fressen.Left And shp_snake.Top = shp_fressen.Top Then
            shp_fressen.Visible = False
            Unload shp_fressen
        End If
    Next i
End Sub
Warum hast du hier eine For Schleife verwendet?
shp_fressen gibt es nur 1x
Du prüffst so nur 11x ob Snake auf Happen ist sonst nichts. (0 to 10 entspricht 11x)

Gibt noch weiteres zu sagen aber fürs erste is genug...

lg Tody

Hier kannst dir meinen post zum Thema MineSweeper ansehen... http://www.tutorials.de/forum/visual-basic/299231-minesweeper-mit-vb-3.html#post1554080
 

Vielen Dank...

Grund für den Neuanfang....
1.) Wollte sehen ob ich es ganz allein schaffe.
2.) Ich wollte Schritt für Schritt alles machen...damit ich mich auch auskenne.

So ein blöder Fehler mit dem Unterprogramm Fressen..
Ist ja logisch, dass ich das i-wo aufrufen muss..

Danke Tody83

Verdank dir viel
 
Hallo

Kann mir mal einer bitte sagen wie man dafür sorgt das immer nur ein Fresspunkt sichtbar ist und wenn diser gefressen wird ein neuer erscheint


Kann sein das schon was hiersteht. Habs aber dann nicht verstanden

Bitte helft mir

Lg Stefan
 
Hi...

Da musst nur die Routine die die Fresschen verteilt umschreiben...

Du verteilst dann nicht mehr, mehr auf einmal sondern nur eins...

Wenn das gefressen wird einfach das shape an ne andere Position schieben (Mit zufallswerten)....

Mann könnte auch noch Timer gesteuert Boni ein und ausblenden lassen...
Wie schneller/langsamer, +5 Länge usw... da ist der Kreativität keine Grenze gesetzt...

lg Tody
 

Neue Beiträge

Zurück