Snakes Game als Trainings/Ausbildungsprojekt

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
SMaag
Beiträge: 150
Registriert: 08.05.2022 12:58

Snakes Game als Trainings/Ausbildungsprojekt

Beitrag von SMaag »

Etwa 2010 hatte ich mir eine Lizens von PureBasic gekauft, da ich das als ziemlich geniales Werkzeug eingestuft habe, Dann lag es aber Jahre so gut wie ungenutzt rum. Ich hab zwar immer wieder mal probiert, bin aber immer wieder an Kleinigkeiten gescheitert, bzw. haben die ewig aufgehalten. Bis zu dem Tag als ich gezwungen war, auf die Schnelle ein kleines Logging-Tool für die Siemens Step7 Steuerungen zu programmieren.
Da ich eine Demo Einbindung für Snap7 in PureBasic gefunden hatte, hab ich mich dafür entschieden, das mal mit PureBasic zu machen statt mit Lazarus. Ich glaub ich hab das in 3 Tagen auf der Baustelle runter programmiert, so dass es funktioniert hat. Weit nicht Perfekt, aber einfach und funktional. Mein Kollege, der faktisch reiner SPS-Programmierer ist, hat dass dann in kürzester Zeit für eine andere Maschine angepasst - ohne viel Ahnung (das wäre mit Werkzeugen wie Visual-Studio oder Lazarus definitiv nicht so fix gegangen.
Da kam dann die Idee, der Wunsch auf, PureBasic auch für Industrie-Software einzusetzen. Man braucht aber definitiv mal ein Ausbildungsprojekt was auch Spaß macht. Im Winter 2021 hab ich mich dann mal hingesetzt und in erster Linie für mein Training ein kleines Spiel programmiert. Als Vorlage dafür hatte ich auf Github eine Version von Snakes in PureBasic gefunden. Dies hab ich komplett überarbeitet/erneuert, dokumentiert und für die Programmierausbildung vorbereitet. Leider ist es nicht 100% fertig. Für die Ausbildung bzw. zum Lernen taugt es trotzdem. Vielleicht kann es ja jemand gebrauchen/einsetzten.

Der Code ist höchstens 2000 Zeilen, wenn man die Kommentare abzieht.

https://github.com/Maagic7/Snakes
Benutzeravatar
Macros
Beiträge: 1314
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Re: Snakes Game als Trainings/Ausbildungsprojekt

Beitrag von Macros »

Ich hab gerade einen sehr kurzen Blick drauf geworfen.

Ein Fehler begegnete mir gleich unter Linux:

Code: Alles auswählen

CompilerIf #PB_OS_Windows 
;CompilerIf #PB_Compiler_OS=#PB_OS_Windows wäre richtig 
  #OS_SEP = "\"
CompilerElse
  #OS_SEP = "/"
CompilerEndIf
Es gibt hier übrigens schon eine vordefinierte Konstante deren Name ich vergessen habe. Der Tipp für Faule: einfach immer den Slash nutzen, der ist unter Windows auch erlaubt.

Und meine Snake hat einen dicken fetten Hamster gefressen
Bild

oder anders gesagt, die Kollision funktioniert unerwartet für ein Snake spiel.



Ich schätze den Aufwand so ausführlich dokumentierten Code zu schreiben.
Doch ich muss zugeben ich würde es aufgrund meiner Erfahrungen nicht zum Unterrichten verwenden (bisher nur 5 mal, davon 2 mal Klassen)

Der lange Code schreckt Einsteiger ab, trotz gut gewählter Namen finden sie sich ohne Erfahrung dort nicht zurecht. Besser sind kleine Beispiele mit konkretem Thema. Am Ende des Kurses kann man sie dann zu etwas größeren Zusammensetzen, aber dann erschweren lange Kommentarblöcke eher die Lesbarkeit. Ich würde lieber ein minimales Snake Game verwenden mit einem Apfel und einer sehr simple Snake aus Quadraten und dann die Schüler ergänzen lassen, z.B. "Wir fügen Pizza als Essen ein" "Und was muss man nun tun, damit Pizza essen die Schlage schneller macht?" "Wie füge ich eine zweite Snake hinzu" "Wie können wir die Snake hübscher machen" usw.
Aber natürlich kann das auch am Unterrichtsstil liegen und ein anderer Stil verträgt sich gut mit solchen gut dokumentierten langen Codes.

Für ein Lehrprojekt finden sich übrigens wirklich viele Rechschreibfehler. Vor Schülern denke ich muss man bei sowas glänzen ;)
"Direction_TrunLeft" "Prgogrammierung" "Varibalen" "Vie wichtiger"
Wenn man da selbst nicht so geübt ist einfach jemanden fragen der mal drüberlesen soll.
Bild
SMaag
Beiträge: 150
Registriert: 08.05.2022 12:58

Re: Snakes Game als Trainings/Ausbildungsprojekt

Beitrag von SMaag »

@Macros

da stimme ich in allem zu! Wie gesagt, dass Projekt hab ich in erster Linie zu Übungszwecken für mich gemacht. Wir wollten das für eine kleine Gruppe zur Programmierausbildung mal testen. Ist leider bis heute nichts geworden.

Den Code kann natürlich kein Anfänger verstehen. Aber ich erinnere mich noch an meine erste EDV Ausbildung in der Schule in Basic programmieren. Noch auf Commodore. Da habe wir ein einfaches Autorennspiel angefangen einfach zu modifizieren uns schauen was passiert. Das war mein Einstieg.

Das mit den Rechtschreibfehlern ist natürlich nicht so gut! Da ich ziemlich schnell tippe, ist immer mal wieder eine Hand etwas zu schnell und die Buchstaben des linken und rechten Handanschlags sind vertauscht.

Wenn sich jemand findet, der das mal korrigiert, bitte mir den Code wieder zukommen lassen, dann stell ich den wieder online.
Zuletzt geändert von SMaag am 28.11.2022 19:50, insgesamt 1-mal geändert.
SMaag
Beiträge: 150
Registriert: 08.05.2022 12:58

Re: Snakes Game als Trainings/Ausbildungsprojekt

Beitrag von SMaag »

Der korrekte Ordner-Trenner für Windows/Linux ist in PB als Konstante hinterlegt
#PS$, das wusste ich leider zu diesem Zeitpunkt noch nicht!

Snakes, die Hamster gefressen haben!
Die Kollisionsprüfung ist abgeschaltet! Da ist der Body auskommentiert, deswegen passiert da nix!
(passiert leider auch noch nichts, wenn man das aktiviert, da die GameOver Routine noch leer ist!)

Code: Alles auswählen

Procedure Snake_DetectCollision(SnakeID)
; ============================================================================
; NAME: Snake_DetectCollision
; DESC: Kollissionsüberprüfung des Snake\Head mit Element auf dem Spielfeld
; DESC: Wenn Snake auf Food trifft, dann Food verarbeiten
; DESC: Wenn Snake auf unerlaubtes Element wie Body, Head, Wall trifft,
; DESC: dann wird killed zurückgegeben
; VAR(SnakeID): ID der Snake 
; RET: Sanke killed #True if killed
; ============================================================================

  Protected killed = #False    ; Wenn Snake auf unerlaubtes Element trifft, dann killed=#TRUE
  Protected GridElement, ret
  
  If SnakeID >0 And SnakeID <= ArraySize(Snakes())
    With Snakes(SnakeID)\Head        ; Snakes\Head Structure öffenen
      GridElement=Grid(\x, \y)\ElementID ; ElementID des betroffenen Feldes aus dem Grid-Array lesen
      
      Select GridElement ; aufschlüsselen, mit was das Feld belegt ist
          
        ; leeres Feld
        Case #eElement_Nothing 
          
        ; Crash mit Body, Head, oder Wand  
        Case #eElement_TBody
          ; hier können wir entscheiden, ob wir über einen Snake\Body 
          ; hinwegkrichen können oder nicht. Wenn wir hier
          ; killed = #False belassen, dann können wir über Snake\Bodys wandern
          ; das könnte man evtl. noch als einstellbare Option einbauen
          
          ; killed = #True ; bei #True wäre es Ende 
          
        Case #eElement_THead
          ; prüfen, ob auf dem Feld bereits ein Head eines anderen Snakes ist
          ; dann sind die beiden Snakes mit dem Kopf zusammengestossen
          ret = Field_IsSnakeHead(\x,\y)   
          If ret >0 And ret <> SnakeID ; Feld ist Kopf anderern Snakes
            killed = #True
          EndIf
            
        Case #eElement_TWall
            killed = #True
          
        Case #eElement_TFood
          Snake_Food(SnakeID) ; gefundes Food verarbeiten
          
      EndSelect     
    EndWith
  EndIf
  ProcedureReturn killed
EndProcedure
Zuletzt geändert von SMaag am 28.11.2022 19:52, insgesamt 1-mal geändert.
SMaag
Beiträge: 150
Registriert: 08.05.2022 12:58

Re: Snakes Game als Trainings/Ausbildungsprojekt

Beitrag von SMaag »

Rechtschreibung eine Katastrophe, hab jetzt eine Menge Fehler behoben.

Das war dann schon als Cross-Learning für den Deutschunterricht vorbereitet!
Rechtschreibfehler korrigieren!

Lektion 2: Man kann auch mit miserabler Rechtschreibung noch Programmierer werden.
SMaag
Beiträge: 150
Registriert: 08.05.2022 12:58

Re: Snakes Game als Trainings/Ausbildungsprojekt

Beitrag von SMaag »

@Macros
Der lange Code schreckt Einsteiger ab, trotz gut gewählter Namen finden sie sich ohne Erfahrung dort nicht zurecht ...
Ich habe eher das Problem, dass ich bereits Leute hab, die eine gewisse Grundausbildung in Programmieren haben.

Damit ist man aber nicht in der Lage eine Software professionell anzugehen. Man bekommt zwar was funktionierendes
hin. Die Struktur ist aber meist nach wenigen Änderungen komplett zusammen gebrochen. Dann kommt unübersichtlicher
und schlecht verständlicher Code dabei raus. Vergleiche dazu das Paten-Projekt.
https://github.com/kennycason/snakes

Mir ging es darum, eine Vorlage zu haben, die einen professionellen Ansatz zeigt. Also wie man auch weit größere Projekte
hin bekommt, ohne bei Änderungen zu scheitern.

Mich würde aber schon auch interessieren, wie man mit kompletten Anfängern umgeht!
Die Definition der Lernziele hab ich mir einfach mal so zurecht gelegt, wie ich das mit meiner Einsteigergruppe vor hatte.

Es wäre natürlich super, wenn ein aktiver Lehrer, das mal mit anpasst bzw. Tipps dazu gibt.
Antworten