Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 09:44

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Workshop] Mein eigenes Snake 2D

Discussion on [Workshop] Mein eigenes Snake 2D within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
[Workshop] Mein eigenes Snake 2D

Hi,
In diesem Workshop geht es wie ich angekündigt hab um das alte Handygame "Snake", Ziel ist es das Programm wietestgehend selbstständig nachzumachen

Vorwort

Für alle die nicht wissen was Snake überhaupt ist, hier eine kurze Erklärung:
Quote:
Bei dem Spiel Snake geht es um eine Schlange, wie der Name unschwer vermuten lässt .
Im laufe des Spiel muss diese Schlange, die Anfangs ehr ein kleiner Wurm ist, Futterkörner fressen umzu wachsen.
Dabei muss der Spieler darauf achten sich nicht selber zu beissen, ansonsten ist das Spiel vorbei und man hat verloren.
Warum ein Workshop und kein Tutorial?

Ihr werdet später sehn, dass es wenig gibt was einer größeren sachlichen Erklärung bedarf.
Bei dieser Arbeit geht es vorallem darum logische Vorgänge zu verstehn und die Problematik einiger Vorgänge zu durchschaun und zu lösen.
Alles durch ein Tutorial vorgekaut zu bekommen wäre sinnlos, da man nicht nachdenken muss und folglich nichts neues lernt.

Grundvorraussetzungen
  • grundlegende AutoIT Kenntnisse
  • AutoIT Compiler und einen geeigneten Editor (SciTe, etc.)
  • Die ResourceDaten aus dem Anhang (Grafiken)
  • logisches Denkvermögen und Interesse

An alle Copy&Paster:
Bitte spart euch die Arbeit ab hier weiterzulesen und ladet euch einfach den vollständigen SourceCode aus dem Anhang.

Also, falls ihr alle Voraussetzung erfüllt und genug Bereitschaft habt die Arbeit durchzuziehen kann's ja losgehn
Solltet ihr wirklich mal ernsthafte Probleme, trotz meinen Hinweisen, haben könnt ihr auf meine Codesequenzen im unteren Teil des Abschnittes zurückgreifen.

Das Grundgerüst

Damit man eure Ansätze mit meinen Codebeispielen vergleichen kann, solltet ihr ein ähnliches Grundgerüst haben

Dafür brauch ihr als erstes eine GUI, die ungefähr so aussehn sollte:


Die Maße sind:
  • Fenster: 300*300px
  • Kopf und Körpersegmente: 10*10px Die KörperTeile befinden sich in einem Array.
Achtung: Diese Angaben sind für spätere Funktionen äußerst wichtig, solltet ihr die Daten abändern achtet bitte immer darauf, dass der Quotient aus Fenstergröße und Körperteilgröße immer ganzzahlig ist!

Zusätzlich braucht ihr eine Schleife, die sich wiederholt solange kein Fehler gemacht wird.
Ich hab den einfachsten Weg gewählt und einfach eine Endlosschleife genommen.
Wenn man verliert beendet sich das Programm einfach durch "Exit".

Ihr könnt das auch gerne anders lösen, allerdings kann es dann gut sein, dass euer Script nichtmehr mit dem Meinem verglichen werden kann.

Gut, da wir nun das Einfache geklärt hätten kann es weitergehn
Bis jetzt sollte alles verständlich sein, solltet ihr trotzdem schon Probleme bekommen haben schaut euch bitte erstmal die Grundlagen an (was ich aber nicht glaube^^)

Bewegung und Steuerung

Bewgung

Natürlich muss sich die Schlange auch bewegen können, nur wie stell ich das am besten an und worauf muss ich achten?
Nunja, wie ihr das anstellt bleibt euch überlassen (sonst wäre es ja kein Workshop und auch nicht EUER eigenes Programm )
Hier allerdings einige Tipps, die euch helfen werden:
  • Differenziert die einzelnen Bewegungsrichtungen und probiert nicht sie in einer Funktion zusammenzufassen
  • Das Programm muss erkennen wann die Schlange den Rand des Fensters erreicht hat und darauf reagieren (Die Schlange kommt am anderen Ende des Fensters wieder herraus)
  • Additon und Subtraktion spielen eine wichtige Rolle
  • Die Schlange muss sich auch ohne eine Eingabe vom Spieler in die eingeschlagene Richtung fortbewegen
  • Der Kopf muss sich immmer in gleichgroßen Schritten bewegen (am besten seine eigene Größe)

Soblad ihr einen funktionierenden Ansatz für eine Richtung habt könnt ihr das Prinzip auf die anderen Richtungen übertragen.

Steuerung

Die Steuerung ist dagegen ehr Schreibkram, auch dafür ein paar Tipps:
  • Variablen helfen bei der Differenzierung/Bestimmung der Richtungen
  • Es muss irgendwie erkannt werden welche Taste gedrückt wurde und die jeweilige Taste mit der dazugehörigen Bewegungsfunktion verknüpft werden(Ich hab die Pfeiltasten genommen)
  • Du musst eine Pause einsetzen, da ansonsten der Kopf einfach so durchrast und gar nicht mehr erkannt werden kann o0 (aber bitte kein Sleep abgesehn von Tests, Timer und Do...Until... ftw. Überlegt was der Vorteil dieser Schreibweise ist und nutzt ihn intelligent aus)
  • Es geht nur um den Kopf!
  • Überlegt 2mal ob die Positionen an denen die Schlange am anderen Ende des Fenster wieder herauskommt auch richtig ist (ich hatte nen recht dummen Fehler, der darauf beruhte, dass ich nicht ordentlich über den richtigen Einsetzpunkt nachgedacht hab Folge war, dass die Schlange nach durchschreiten des Fensterrandes ein Bewegungschschritt zuspät wieder am anderen Ende erschien^^300-10=290)

Solltet ihr etwas nicht verstanden haben oder euch ein Tipp gefehlt hat zögert nicht mir eine PM zu schicken oder hier im Thread zu fragen.
Es ist nicht unbedingt leicht abzuschätzen welche Fragen jmnd. hat der das Programm noch nicht geschrieben hat

Futter erstellen und Fressen

Futterkörner an einer zufälligen Position erstellen

Dieser Teil beansprucht nicht viel Zeit aber hier spielen die Fenster und Körpermaße die größte Rolle

Worauf muss ich beim erstellen des Futterkorns achten?
  • Das Futterkorn muss genauso groß sein wie der Kopf
  • Das Futterkorn muss sich ein einem Raster befinden, so dass der Schlangenkopf sich genau auf die Position des Korn's bewegen kann (Die Größe des Bewegungschrittes des Kopfes, nen bisschen Multiplikation und "Random" sind hier von Bedeutung)

So sollte das Fenster danach aussehn:


Fressen

Das Fressen bedarf keiner weiter großen Tipps (es muss nur darauf geachtet werden, dass dem Körper-Array ein neues Teil hinzugefügt wird)
Auf den Rest sollte man leicht selber kommen

Die Grafik für das Korn findet ihr im Anhang bei den ResourceDaten.

Körpermangement

Das folgen des Körpers

Jetzt kommt der wohl anspruchsvollste Teil (zumindest hab ich ihn so empfunden, vllt. ist es aber mit den Tipps leichter )

Es geht wie die Überschrifft schon sagt um die Bewegung des restlichen Körpers, Ziel ist es, dass der Körper dem Kopf folgt.

Hier die Tipps:
  • Der Kopf bleibt unbeeinflusst von dieser Funktion, seine Position spielt aber eine Rolle
  • Die Funktion wird am besten direkt nach der Bewegung des Kopfes ausgeführt
  • Man brauch die alte Position des Kopfes bevor er weiterbewegt wurde.
  • Das Körpersegment x nimmt die Position des Segments x-1 an nachdem x-1 die alte Position von x-1-1 angenommen hat usw.; DIE SEGMENTE BEFINDEN SICH IN EINEM ARRAY *hust* (Brainfuck o0 )

Game Over

Irgendwann kommt der traurige Zeitpunkt wo das Spiel vorbei ist
Die Funktion dafür stellt nach den anderen Dingen die ihr bis jetzt gemacht habt keine Schwierigkeit mehr dar.
Alles was ihr jetzt noch braucht ist eine ForSchleife und den KörperArray.
Das Programm soll überprüfen ob sich der Kopf auf der Position eines der Körpersegmente befindet.
Falls Ja soll sich Snake schließen ansonsten soll es einfach normal weiterlaufen.

Die beiden Aufgaben können am besten in einer Funktion zusammengefasst werden

-Codebeispiele-

Nur dann benutzen, wenn ihr absolut verzweifelt seid und es selber nicht auf die Reihe bekommt!
Attached Files
File Type: rar Resources.rar (315 Bytes, 37 views)
File Type: rar vollständiger SourceCode.rar (1.5 KB, 84 views)
.nAno is offline  
Thanks
17 Users
Old 04/11/2010, 00:18   #2
 
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
Eigenständige Weiterentwicklung

Wie die Überschrifft schon sagt geht es hier um die Weiterentwicklung von Snake.

Was soll ich darunter verstehn?
Bis jetzt sind wir allein auf die Grundfunktionen eingegangen und haben ein so grade lauffähiges Spiel entwickelt, dass ist an sich schonmal einiges Wert, normalerweise wird aber mehr erwartet.
In diesem Abschnitt werde ich euch wieder Denkanstöße oder Ideen geben um letzte Unannehmlichkeiten auszuschalten

Entwicklungsansätze

Futter: Position Scanner und Mapping

Wer bereits ein bisschen rumgespielt hat, dem dürfte aufgefallen sein, dass sich zeitweise ein neues Futterkorn unter einem Körperteil der Schlange befindet. Das kann man als mehr oder weniger schlimm ansehn,mich hats genervt, also hab ichs geändert

Wie mache ich das?
Jedem sollte bis jetzt aufgefallen sein, dass ich nicht unbedingt gerne Codebeispiele rausgebe. Das wird sich hier nicht ändern, aber die Arbeit fällt leicht, da ihr etwas ähnliches schon machen musstet, trotzdem noch einige Tipps:
  • Stichwort: KörperArray
  • Stichwort: For-Schleife
  • Die Anwendung muss sich wiederholen bis alles so läuft wie es soll, eine Schleife reicht also nicht (...bei einer übersichtilichen Lösung).
  • Wer's jetzt noch nicht weiss hat ein verdammt mieses Kurzzeitgedächtniss

Wenn man nun spielt ist auf den ersten Blick alles Top, das Korn ist da wo es sein soll und die Funktion läuft unauffällig im Hintergrund ab - Anfangs.
Bei steigender Punktzahl (--> größere Länge der Schlange -->einem größeren Array) friert sich das Programm ein.
Grund dafür ist die soeben erschaffene Funktion: Bei immer größerer Länge steigt die Wahrscheinlichkeit, dass die zufällig bestimmte Position immer öfter unter der Schlange liegt und die Funktion sich unzählige male wiederholt.
Abhilfe schafft hier ein sog. "Mapping", Ziel ist es ein Abbild des Spielfeldes zu erstellen das wir in einem Array speichern. Worauf muss ich achten?
  • Der Array muss 2 dimensional sein
  • Die Funktion orientiert sich anhand des Rasters für Futter und Kopf
  • auch hier ist der KörperArray von Bedeutung
  • Die Funktion füllt die entsprechende Stelle im Array mit "True" (Feld nicht belegt) oder "False" (Feld belegt)

Beispiel:
Das Feld in Reihe 1, Spalte 10 (--> $array[1][10] ) soll überprüft werden
ob sich dort ein Objekt befindet oder eben nicht.
Im KörperArray befinden sich alle aktuellen Objekte, daher nehmen wir im Normalfall ihn
Später muss dann ein Fach im Array gewählt werden ab dem geschaut werden soll ob sich ein Objekt an der zugehörigen Stelle befindet, falls ja "Prüfe nächstes Feld", falls Nein "positioniere Korn".
So wird immer, falls es überhaupt eine freie Position gibt, eine Stelle gefunden

Flinkes Futter

Im original Spiel gibt es nicht nur das einfach Futter das sich einfach fressen lässt, sondern auch diese krabelnden Spinnen, etc.
Auch die lassen sich ganz leicht mit uns einer bekannte Funktion erstellen:
  • bekannte Funktionen mit gewünschter Funktionalität können gut übertragen werden
  • eigene Extrafunktion die das Verhalten des FutterTieres steuert könnte nen bisschen Arbeit spraren (Bewegung, Gefressen werden, etc.)

Ihr werdet dazu keine Grafiken in meinen Anhängen finden, geschwigeden überhaupt die Funktionen, da ich sie noch nicht eingebaut habe, sowie einige andere Methoden die ich hier vorstellen werden.
Es sollte aber auch nicht schwer sein selber etwas derartiges zu erstellen (ich hab Gimp benutzt, damit ich auch durchsichtige Aussparungen wie z.B beim Futterkorn machen konnte)

Weitere Ideen:
Da die Möglichkeiten, die man hat, recht vielfälltig sind kann ich leider nicht alles ordentlich ausführen, deshalb geb ich euch hier mal eine Liste mit Idee die ich selber noch habe oder schon bei meiner persönlichen Version angewandt hab
  • zusätzliche GUI, Levelauswahl, etc.
  • online Highscore via FTP.au3
  • Maussteuerung
  • Dynamischer Kopf (bessere Kopfgrafiken für alle 4 Richtungen, Kopf guckt in die grade eingeschlagene Richtung)
  • Steuerung verfeinern (ist teilweise noch etwas hackelig bei mir gewesen)

Falls ich noch andere Ideen habe Liste ich sie hier auf, wenn ihr etwas als zu kompliziert empfindet werde ich mir das mal ansehn und das Thema vllt. doch noch ein bisschen erklären.

Schlusswort

So, dass war's mit meinem Workshop, ich hoffe ihr hattet Spaß bei der Entwicklung.
Tut mir Leid, wenn ich es euch nicht immer leicht gemacht habe, aber sonst hätte es keinen Sinn gemacht
Ich freu mich also nachwievor über eure Lösungen oder Programme (ob es jetzt C++, Delphi oder AutoIT, etc. ist, ist mir egal^^)
Bis dahin .nAno
.nAno is offline  
Thanks
9 Users
Old 04/11/2010, 09:06   #3
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
Ich bin echt begeistert was du hier großartiges hingeschrieben hast.
Denn obwohl du kein einziges Codestück vorgibst, kommt man relativ gut (bedingt durch die Tipps) zurecht.
Meiner Meinung nach sollten in Zukunft noch mehr solche Tutorials/Workshops geschrieben werden, da sie gerade an dem Beispiel zeigen, das man damit einen bis zu 100% höheren Lernerfolg hat.

Großen Respekt an die Arbeit wie du es erklärt hast.

€: Das Programm Snake ist auch gut, auch wenn ich´s nun schon sehr lange von dir kenne
HardCore.1337 is offline  
Thanks
1 User
Old 04/11/2010, 09:16   #4
 
elite*gold: 0
Join Date: Jul 2009
Posts: 2,583
Received Thanks: 808
39 Punkte habe ich nur erreicht xP
aber naja istsehr gut wie ich finde dein THX kriegste auch :P
Loveskill is offline  
Thanks
1 User
Old 04/11/2010, 11:08   #5
 
elite*gold: 99
Join Date: Oct 2008
Posts: 2,708
Received Thanks: 1,726
Der Workshop ist echt gut geworden.
Meiner Meinung nach gehört der hier auch nicht in die AutoIT Section, sondern in die allgemeine coder-section.
Warum?
Der Workshop benutzt nämlich keine speziellen Befehle, sondern die Tipps sind eigentlich für jede Programmiersprache übertragbar.

Ich versuch mal das ganze in C++ nachzubauen, mal schauen was dabei rauskommt. =D

btw. hast du gerade mein 1.000tes thx bekommen ;O
Frezee is offline  
Thanks
1 User
Old 04/11/2010, 11:18   #6
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
Quote:
Ich versuch mal das ganze in C++ nachzubauen, mal schauen was dabei rauskommt. =D
Sehr gute Idee. Ich mach mich auch mal dran
HardCore.1337 is offline  
Old 04/11/2010, 11:28   #7
 
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
Danke an alle für das Feedback bis jetzt

@Freeze
Das Dumme ist, dass ich nacher noch im unteren Teil in nem Spoiler "Notfall" Codesequenzen einbaue, falls man mal wirklich nen Hänger hat.
Da ich in C++ noch lange nicht soweit bin werden die wohl in AutoIT sein

Aber ich bin mal gespannt was bei dir draus wird und danke :P
.nAno is offline  
Old 04/11/2010, 12:05   #8
 
elite*gold: 0
Join Date: Dec 2008
Posts: 45
Received Thanks: 3
Sehr gutes Tut! Könnte man das auch in 3D machen ?
Artimes Fowl is offline  
Thanks
1 User
Old 04/11/2010, 12:10   #9
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
In AutoIt eher schwer (3D funktioniert zwar, allerdings ist die Geschwindigkeit sehr sehr träge)
HardCore.1337 is offline  
Thanks
1 User
Old 04/11/2010, 15:39   #10
 
elite*gold: 0
Join Date: Dec 2007
Posts: 127
Received Thanks: 11
Thanks
Wellard is offline  
Old 04/11/2010, 16:02   #11
 
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
Danke für euer Feedback

Ich hab jetzt erstmal die Codebeispiele eingefügt und schonmal einen Weiterentwicklungsvorschlag
.nAno is offline  
Old 04/14/2010, 14:15   #12
 
Masterakio1995's Avatar
 
elite*gold: 8
Join Date: Apr 2009
Posts: 2,977
Received Thanks: 855
Sehr schönen tutorial
Masterakio1995 is offline  
Thanks
1 User
Old 04/14/2010, 21:58   #13
 
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
Danke

Ich finde es nur schade, dass sich anscheinend niemand bisher ernsthaft mit der Anleitung auseinandergesetzt hat
Es wurde mehr als doppelt so oft der komplette SourceCode und nicht das ResourceKit geladen.
Ich werde natürlich weiter Ideen für die Weiterentwicklung sammeln und die Arbeit fortsetzen, obwohl sich mir langsam der Eindruck aufzwingt, dass das Interesse doch nicht so groß ist wie vorher behauptet...
.nAno is offline  
Old 04/14/2010, 22:10   #14
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by .nAno View Post
Danke

Ich finde es nur schade, dass sich anscheinend niemand bisher ernsthaft mit der Anleitung auseinandergesetzt hat
Es wurde mehr als doppelt so oft der komplette SourceCode und nicht das ResourceKit geladen.
Ich werde natürlich weiter Ideen für die Weiterentwicklung sammeln und die Arbeit fortsetzen, obwohl sich mir langsam der Eindruck aufzwingt, dass das Interesse doch nicht so groß ist wie vorher behauptet...
Wie bereits gesagt , Sourcecode hätte vollkommen gereicht
Aber naja trotzdem sehr schön geworden .
Shadow992 is offline  
Thanks
2 Users
Old 04/14/2010, 23:17   #15
 
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
deshalb hab ich mich ja dazu entschieden nen Workshop daraus zu machen
Mein fertiges Programm dient dabei letztenedes nur als Leitfaden für mich um die Tipps, etc. zu schreiben
.nAno is offline  
Reply

Tags
autoit, snake, spiel, spiele programmieren


Similar Threads Similar Threads
[Guide] Wie baue ich mein eigenes Farm- und Level-Imperium auf
06/02/2011 - Metin2 Guides & Templates - 116 Replies
-
[Mein eigenes Forum]KLICK!
08/08/2010 - Metin2 Private Server - 1 Replies
Huhu also ich versuche grade ein Forum mit Werdenators Forum Scipt zu machen Ich komme bis zum Punkt: "So , jetzt öffnet ihr wieder euren Webbrowser , tippt "127.0.0.1/Forum" ein und klickt auf die "install.php". Nun beginnt ihr , das Forum zu installieren." Wenn ich 127.0.0.1/Forum eingebe und danna uf install.php anmache kommt da
Mein eigenes Spiel
08/07/2010 - Off Topic - 83 Replies
Hey, würde mich über feedback freuen :mofo: *edited* Danke :).
Wie macht mein sein eigenes interface ?
07/03/2008 - World of Warcraft - 4 Replies
Hallo, ich suche eine möglichst genaue anleitung dazu wie man sein eigenes interface mit hintergrund bild und styles selbst machen kann ohne eine fertige vorlage zu nehmen.
Mein eigenes Video - gut? schlecht?
12/26/2006 - World of Warcraft - 3 Replies
K L I C K Bitte sagt mir was ihr davon hält. Meine Mutter kommt aus Kanada und deshalb hab ichs auf Englisch gemacht und war zu faul es noch umzuändern.. MfG, Maydie.



All times are GMT +2. The time now is 09:44.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.