Erweiterte Sprite-Engine zur schnelleren Programmierung von
Verfasst: 13.01.2009 13:39
Hier der Grund für mein Projekt:
http://de.youtube.com/watch?v=Kd0Of4PnpQk
übersetzt: Microsoft sagt: 83% der Windows-Nutzer spielen
Ich nehme auch stark an, dass ts-soft schon mal ein Spiel gedaddelt hat
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Da einige von uns nur Gelegenheitsspieler sind und eher selten
Spieleentwickeln, also lieber PureBasic für Anwendungen nutzen
wäre eine "Engine" nicht schlecht in meinen Augen, die es ermöglicht,
ohne viel Aufwand leichte kleine Spiele für Zwischendurch zu erschaffen.
Bitte verspottet mich nicht gleich wieder. Lassen wir auch einmal die
Diskussion bei Seite, ob Kinder programmieren sollten oder wie sinnfrei
der Aufsatz sein könnte.
Bitte stellt euch nicht gegen diese Idee.
Wo wären wir, wenn alle Urmenschen das Rad oder das Feuer permanent
abgelehnt hätten
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Ich bin kein Hardcore-Programmierer. Ich kann programmieren, aber
einige Dinge interessieren mich nicht und erachte ich auch in meinem
Leben für nicht zwingend als benötigtes Wissen.
Ich bin eher ein visueller Typ. Mag Bilder und Fotos. Schöne Frauen.
Dinge zum Anfassen. Logische Dinge, aber auch einfache Dinge.
Aus meinen Bedürfnissen heraus und einigen Umfragen bei anderen,
hatte ich ein Konzept erarbeitet, welches ich gern vorstellen möchte.
Als Demonstration möchte ich euch hier den Link zu Walter Zorns
Webseite geben:
http://www.walterzorn.de/dragdrop/dragdrop.htm
Er hat über JavaScript eine relativ leicht zu benutzende Drag'n'Drop-Engine
erschaffen.
Ich hatte meine alte Webseite damit auch ausgesattet
http://www.folker-linstedt.de/index.htm
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Dann hatte ich mich viel mit Scratch auseinander gesetzt
http://scratch.mit.edu/ und auch mit Alice 3D: http://www.alice.org
Aber keine der vorhandenen Programme hatte alle schönen Dinge beisammen
Und waren ja auch nicht für PureBasic verfügbar.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Ab hier wird's eher wichtig
Ich habe ein Konzept ausgearbeitet, welches mir persönlich sehr gut
gefällt, allerdings reicht mir nicht aus, wenn es mir gefällt und deshalb
wollte ich das zusammen mit euch besprechen / diskutieren.
Ein ähnliches Projekt gibt es im englischen Forum, welches für
Fenster und Gadgets im Screen gedacht war
http://www.purebasic.fr/english/viewtopic.php?t=31357
Mein Projekt ist hier zu finden:
http://www.purebasic.fr/german/viewtopic.php?t=17049
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Grundidee:
mehr als nur Spiele können täten tut
Umsetzung theoretisch:
Syntaxmethoden
Der Programmierer legt fest, welche Objekte er gern hätte und
definiert diese vom Aussehen. Ähnlich den Gadgets.
Beispiel eines leeren Programms:
Die Klacks.pbi
http://www.folker-linstedt.de/pureforum/FL_Klacks.zip
Übernimmt folgende Punkte:
alles in einer Zeile durch das reine Einbinden der Klacks.pbi
Hatte mir auch Gedanken drüber gemacht, ob man den Programmierer
hier nicht zu sehr bevormundet, aber man kann bei der
StartMyProgram_FL2D()
Noch Parameter hinzufügen, wenn man mag, die dann
spezieller den Modus bestimmen, also ob Fenster oder welche Auflösung.
Ab hier wirklich interessant, ... vielleicht
Nun zum eigentlichen Punkt der Objektverwaltung.
Mich hat gestört, dass man irgendwie immer erst ne Liste erzeugen
musste, wenn man mehrere Gegner im Spiel hat, oder ein Array oder
seinen Helden ja mit Koordinaten versehen muss und diese Abfragen ...
Und auch das Ganze noch mal extra für den Mauszeiger ...
Und wenn man dann verschiebbare Fenster haben möchte, muss man
sich darüber noch mal Gedanken machen und das "Klicken" programmieren
Und da hab ich mir nun durch Inspiration von der Drag'n'Drop-JS von W.Z.
folgendes überlegt:
Hintergrund, Maus und alle verwendeten Objekte werden gleich behandelt.
Der Hintergrund wird als #BACKGROUND bezeichnet, die Maus als #MOUSE
die anderen Objekte kann man nennen, wie man will.
Zum Beispiel: "Haus", "Held", "Ball", "Skateboard"
Wenn ich nun den Helden zum Haus steuern möchte,
brauche ich im Programm nur sagen: Move - Held Richtung Haus
Wenn der Held auf dem Skateboard steht und ich nicht alles neu
programmieren möchte, klebe ich die beiden Objekte zusammen.
Ich klebe das Skateboard an den Helden und das Skateboard wird sich
mitbewegen, wenn ich sage: Move - Held Richtung Haus
Ankleben und Ablösen von Objekten ist der Kernpunkt meines Projektes
Damit kann man folgende Probleme sehr leicht lösen:
- verschiebbare Fenster (Fenster einfach an den Mauszeiger kleben)
- verschiebbare Icons
- eine Gruppe von Icons zum Verschieben
- Strategiespiele, Sammler transportieren Rohstoffe und lassen sie wieder fallen
- Jump'n'Run, mit Fahrstühlen oder Hin und HerBewegflächen
(einfach den Held an die bewegte Plattform kleben und er bewegt sich mit)
- Point-to-Click Adventures
- Tetris, Blocks/Bricks/Bananoid, Sokoban, Bomberman, PackMan ...
- Kinder-Spiele zum Zählen und Rechnen. Wie viele Äpfel liegen im Korb
>>>>>>>>>>>>>>>>>>>>>>>>>>>
Die Objekte wissen, wen sie als Kinder haben. Also wer ans Objekt
geklebt wurde und die Kinder wissen an wem sie kleben, also wer ihre
Eltern sind.
Es gibt zwei verschiedene Arten Objekte zu bewegen. Entweder
absolut (Pixelgenau auf dem Bildschirm)
oder relativ. (von der jetzigen Position abhängig)
Bei beiden Optionen kann man wählen, ob die Kinder mitgenommen
werden oder nicht.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Im Kopf der FL_Klacks.pbi sind die meisten wichtigen Befehle erklärt.
Hier mal ein Tutorial für einfaches Anwenden der Klacks.pbi
Die Pfade sind absolute, hier solltet ihr eigene ICONs benutzen.
Oder nehmt die ICONs aus der FL_DGS (siehe oben)
Diese Variante von Klacks ist natürlich noch nicht ausgereift.
Das Klicken mit der Maus ist nur halbfertig implementiert.
Eine Kollisionsabfrage gibt es auch noch nicht und die Objekte
können noch nicht gedreht werden.
Auf diese Sachen habe ich erstmal verzichtet, da ein wichtigeres
Problem anstand:
Objekt1 + Objekt2 = 7
Denn alle Objekte haben Werte, die man für bestimmte Dinge nutzen kann.
Auch zum Beispiel, wie viele Kinder ein Objekt hat.
KinderVonObjekt1 + KinderVonObjekt2 = 12
Beide Objekte sind Körbe und das erste Objekt hat 5 Äpfel als Kinder
und das zweite Objekt entsprechend 7 Äpfel als Kinder.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Man könnte auch Schlüssel aufsammeln lassen, und bei Berührung
eines Objektes mit einem anderen, dieses Objekt oder beide verschwinden lassen.
Beispiel: Wenn Held Schlüssel berührt, dann klebe Schlüssel an Held.
Wenn Schlüssel Tür berührt, dann Entferne Tür und Schlüssel
Wenn Held Tür berührt, dann bewege ihn einen Schritt zurück
Mit so einem Simplen Code kann man schon alle Bedingungen für
ein kleines Spiel definieren.
Man braucht nun eigentlich nur noch Wege für den Helden und
definiert den Sprung bzw. bei welcher Taste er wie bewegt werden kann.
So kann man mit wenig Aufwand in einer Seite QuellCode schon
ein Spiel nach seinen Vorstellungen machen.
(ich weiß, ist viel Text und ne PDF wäre auch gut ...
)
Ich hoffe, ihr macht euch die Mühe und durchforstet mal meinen Code.
Allein fehlt mir einfach die Kraft daran zu arbeiten, weil ich zu viele
andere Verpflichtungen habe und mir hin und wieder einfach die
Motivation fehlt. Ich kann euch also nur bitten, es mit mir gemeinsam
zu entwickeln.
Sonst mache ich es allein und keinen interessiert's. Wäre blöd.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Noch eine wichtige Sache. Meine "Engine" versucht möglichst mit
falschen Eingaben klar zu kommen. Weil es ja schon nervig ist, wenn
man aus Versehen mal was falsch getippt hat und dann 100 Fehlermeldungen
kommen.
Angedacht ist dann auch ein Editor, der rein grafisch mit Objekten
umgehen kann und den entsprechenden PureBasic Code ausgibt.
Ein integriertes Zeichenprogramm ist auch vorhanden.
Da dieser Editor allerdings auf dem noch nicht fertigen Klacks basieren soll,
ist der natürlich noch nicht mal angefangen. Da sich ja der Syntax noch ändern kann.
Ich denke, wenn Klacks erstmal fertig ist, werden wir schnell auch
gute Beispiele für die Verwendung von Klacks haben.

http://de.youtube.com/watch?v=Kd0Of4PnpQk
übersetzt: Microsoft sagt: 83% der Windows-Nutzer spielen
Ich nehme auch stark an, dass ts-soft schon mal ein Spiel gedaddelt hat

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Da einige von uns nur Gelegenheitsspieler sind und eher selten
Spieleentwickeln, also lieber PureBasic für Anwendungen nutzen
wäre eine "Engine" nicht schlecht in meinen Augen, die es ermöglicht,
ohne viel Aufwand leichte kleine Spiele für Zwischendurch zu erschaffen.
Bitte verspottet mich nicht gleich wieder. Lassen wir auch einmal die
Diskussion bei Seite, ob Kinder programmieren sollten oder wie sinnfrei
der Aufsatz sein könnte.
Bitte stellt euch nicht gegen diese Idee.
Wo wären wir, wenn alle Urmenschen das Rad oder das Feuer permanent
abgelehnt hätten

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Ich bin kein Hardcore-Programmierer. Ich kann programmieren, aber
einige Dinge interessieren mich nicht und erachte ich auch in meinem
Leben für nicht zwingend als benötigtes Wissen.
Ich bin eher ein visueller Typ. Mag Bilder und Fotos. Schöne Frauen.
Dinge zum Anfassen. Logische Dinge, aber auch einfache Dinge.
Aus meinen Bedürfnissen heraus und einigen Umfragen bei anderen,
hatte ich ein Konzept erarbeitet, welches ich gern vorstellen möchte.
Als Demonstration möchte ich euch hier den Link zu Walter Zorns
Webseite geben:
http://www.walterzorn.de/dragdrop/dragdrop.htm
Er hat über JavaScript eine relativ leicht zu benutzende Drag'n'Drop-Engine
erschaffen.
Ich hatte meine alte Webseite damit auch ausgesattet
http://www.folker-linstedt.de/index.htm
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Dann hatte ich mich viel mit Scratch auseinander gesetzt
http://scratch.mit.edu/ und auch mit Alice 3D: http://www.alice.org
Aber keine der vorhandenen Programme hatte alle schönen Dinge beisammen
Und waren ja auch nicht für PureBasic verfügbar.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Ab hier wird's eher wichtig
Ich habe ein Konzept ausgearbeitet, welches mir persönlich sehr gut
gefällt, allerdings reicht mir nicht aus, wenn es mir gefällt und deshalb
wollte ich das zusammen mit euch besprechen / diskutieren.
Ein ähnliches Projekt gibt es im englischen Forum, welches für
Fenster und Gadgets im Screen gedacht war
http://www.purebasic.fr/english/viewtopic.php?t=31357
Mein Projekt ist hier zu finden:
http://www.purebasic.fr/german/viewtopic.php?t=17049
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Grundidee:
Ich sage bewusse Screen-Programm und nicht Spiel, weil "meine" "Engine"der User der "Engine" braucht sich nicht mehr um
die Spriteverwaltung kümmern, nicht mehr über die Mausansteuerung
oder über Dinge, die nicht direkt mit dem Inhalt des Screen-Programms
zu tun haben.
mehr als nur Spiele können täten tut
Umsetzung theoretisch:
Syntaxmethoden
Der Programmierer legt fest, welche Objekte er gern hätte und
definiert diese vom Aussehen. Ähnlich den Gadgets.
Beispiel eines leeren Programms:
Code: Alles auswählen
XIncludeFile "FL_Klacks.pbi" ;
StartMyProgram_FL2D()
Procedure AddObjects_FL2D()
EndProcedure
Procedure Events_FL2D()
EndProcedure
http://www.folker-linstedt.de/pureforum/FL_Klacks.zip
Übernimmt folgende Punkte:
Und öffnet gleich den gewünschten Bildschirmmodus.- Initialisierung der Grafikmodi / und Sprites
- Tastaturabfrage
- Mausabfrage
- wenn vor handen auch Joystick-Abfrage
- Soundinitialisierung
alles in einer Zeile durch das reine Einbinden der Klacks.pbi
Hatte mir auch Gedanken drüber gemacht, ob man den Programmierer
hier nicht zu sehr bevormundet, aber man kann bei der
StartMyProgram_FL2D()
Noch Parameter hinzufügen, wenn man mag, die dann
spezieller den Modus bestimmen, also ob Fenster oder welche Auflösung.
Ab hier wirklich interessant, ... vielleicht
Nun zum eigentlichen Punkt der Objektverwaltung.
Mich hat gestört, dass man irgendwie immer erst ne Liste erzeugen
musste, wenn man mehrere Gegner im Spiel hat, oder ein Array oder
seinen Helden ja mit Koordinaten versehen muss und diese Abfragen ...
Und auch das Ganze noch mal extra für den Mauszeiger ...
Und wenn man dann verschiebbare Fenster haben möchte, muss man
sich darüber noch mal Gedanken machen und das "Klicken" programmieren
Und da hab ich mir nun durch Inspiration von der Drag'n'Drop-JS von W.Z.
folgendes überlegt:
Hintergrund, Maus und alle verwendeten Objekte werden gleich behandelt.
Der Hintergrund wird als #BACKGROUND bezeichnet, die Maus als #MOUSE
die anderen Objekte kann man nennen, wie man will.
Zum Beispiel: "Haus", "Held", "Ball", "Skateboard"
Wenn ich nun den Helden zum Haus steuern möchte,
brauche ich im Programm nur sagen: Move - Held Richtung Haus
Wenn der Held auf dem Skateboard steht und ich nicht alles neu
programmieren möchte, klebe ich die beiden Objekte zusammen.
Ich klebe das Skateboard an den Helden und das Skateboard wird sich
mitbewegen, wenn ich sage: Move - Held Richtung Haus
Ankleben und Ablösen von Objekten ist der Kernpunkt meines Projektes
Damit kann man folgende Probleme sehr leicht lösen:
- verschiebbare Fenster (Fenster einfach an den Mauszeiger kleben)
- verschiebbare Icons
- eine Gruppe von Icons zum Verschieben
- Strategiespiele, Sammler transportieren Rohstoffe und lassen sie wieder fallen
- Jump'n'Run, mit Fahrstühlen oder Hin und HerBewegflächen
(einfach den Held an die bewegte Plattform kleben und er bewegt sich mit)
- Point-to-Click Adventures
- Tetris, Blocks/Bricks/Bananoid, Sokoban, Bomberman, PackMan ...
- Kinder-Spiele zum Zählen und Rechnen. Wie viele Äpfel liegen im Korb
>>>>>>>>>>>>>>>>>>>>>>>>>>>
Die Objekte wissen, wen sie als Kinder haben. Also wer ans Objekt
geklebt wurde und die Kinder wissen an wem sie kleben, also wer ihre
Eltern sind.
Es gibt zwei verschiedene Arten Objekte zu bewegen. Entweder
absolut (Pixelgenau auf dem Bildschirm)
oder relativ. (von der jetzigen Position abhängig)
Bei beiden Optionen kann man wählen, ob die Kinder mitgenommen
werden oder nicht.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Im Kopf der FL_Klacks.pbi sind die meisten wichtigen Befehle erklärt.
Hier mal ein Tutorial für einfaches Anwenden der Klacks.pbi
Die Pfade sind absolute, hier solltet ihr eigene ICONs benutzen.
Oder nehmt die ICONs aus der FL_DGS (siehe oben)
Code: Alles auswählen
; Folker Linstedt
; 2008-07-07, 2008-07-10
; Tutorial FL2D, DGS-Lite, KidsWin
; Ermöglicht die Benutzung der DGS-Befehle
XIncludeFile "FL_Klacks.pbi" ; Unit für JAVA, JAVAScript, C# individuell
DisableExplicit
; Diese Zeile startet dein Programm
StartMyProgram_FL2D(1) ; 1 Vollbildmodus, 0 Fenstermodus
Procedure AddObjects_FL2D()
; Am Anfang eines Programms, werden Objekte hinzugefügt
For i=0 To 10
AddOBJ_FL2D(Str(i),"",Random(600)-300,Random(400)-200,Random(30)+10,Random(30)+10,Random(16700000))
Next
; Fügt einen Stift hinzu, Verzeichnis und Dateiendung werden benötigt
AddOBJ_FL2D("Stift","C:\F\PureBasic\2008-07\FLDGS\Stift.ico")
; Fügt eine Tastatur hinzu, Verzeichnis und Dateiendung werden wie oben benutzt
AddOBJ_FL2D("Key","Keyboard")
; Fügt eine Computer-Maus hinzu
AddOBJ_FL2D("Maus","Mouse")
; Fügt noch eine Computer-Maus hinzu, diese heiß´t aber nur "M"
AddOBJ_FL2D("M","Mouse")
; Bewegt die Tastatur etwas zur Seite und nach unten
MoveOBJ_FL2D("Key",40,10)
; bestimmt das Aussehen des Mauszeigers.
; Dieser besteht aus einem Stift und der Maus "M"
;MouseCursor_FL2D("Stift") ; entspricht
Attach_FL2D("Stift","#MOUSE")
Attach_FL2D("M","Stift")
MoveOBJ_FL2D("M",20,30)
AddOBJ_FL2D("Fenster","",-200,-100,150,150)
; Stift wird zum Schluss gezeichnet und ist damit immer sichtbar
Highest_FL2D("Stift")
MoveOBJ_FL2D("Stift",16,16)
; Verändert den Hardflag
EndProcedure
Procedure Events_FL2D()
; Hier werden die Bedingungen definiert
; Verändert die Position des Mauszeigers, der wie ein Stift aussieht
; und setzt ihn an die Position der Maus
; Setzt die Farbe des Hintergrunds auf zufällige Farben
;If MouseButton_FL2D() ; MousePushed, MouseReleased, MouseClick
;
;EndIf
DragDrop_FL2D("Maus Key Fenster")
For i=0 To 10
; DragDropOBJ_FL2D(Str(i))
DragDrop_FL2D(Str(i))
Next
EndProcedure
Das Klicken mit der Maus ist nur halbfertig implementiert.
Eine Kollisionsabfrage gibt es auch noch nicht und die Objekte
können noch nicht gedreht werden.
Auf diese Sachen habe ich erstmal verzichtet, da ein wichtigeres
Problem anstand:
Spter wäre auch folgendes denkbar: Rechnen mit Klacks.1. große Sprites müssen automatisch verwaltet werden
2. die Syntax der Klacks-Befehle sollte euch auch gefallen.
(das heißt, ihr dürft gern Vorschläge machen, wie die Befehle
sinnvoll benannt werden können)
Objekt1 + Objekt2 = 7
Denn alle Objekte haben Werte, die man für bestimmte Dinge nutzen kann.
Auch zum Beispiel, wie viele Kinder ein Objekt hat.
KinderVonObjekt1 + KinderVonObjekt2 = 12
Beide Objekte sind Körbe und das erste Objekt hat 5 Äpfel als Kinder
und das zweite Objekt entsprechend 7 Äpfel als Kinder.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Man könnte auch Schlüssel aufsammeln lassen, und bei Berührung
eines Objektes mit einem anderen, dieses Objekt oder beide verschwinden lassen.
Beispiel: Wenn Held Schlüssel berührt, dann klebe Schlüssel an Held.
Wenn Schlüssel Tür berührt, dann Entferne Tür und Schlüssel
Wenn Held Tür berührt, dann bewege ihn einen Schritt zurück
Mit so einem Simplen Code kann man schon alle Bedingungen für
ein kleines Spiel definieren.
Man braucht nun eigentlich nur noch Wege für den Helden und
definiert den Sprung bzw. bei welcher Taste er wie bewegt werden kann.
So kann man mit wenig Aufwand in einer Seite QuellCode schon
ein Spiel nach seinen Vorstellungen machen.

(ich weiß, ist viel Text und ne PDF wäre auch gut ...

Ich hoffe, ihr macht euch die Mühe und durchforstet mal meinen Code.
Allein fehlt mir einfach die Kraft daran zu arbeiten, weil ich zu viele
andere Verpflichtungen habe und mir hin und wieder einfach die
Motivation fehlt. Ich kann euch also nur bitten, es mit mir gemeinsam
zu entwickeln.
Sonst mache ich es allein und keinen interessiert's. Wäre blöd.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Noch eine wichtige Sache. Meine "Engine" versucht möglichst mit
falschen Eingaben klar zu kommen. Weil es ja schon nervig ist, wenn
man aus Versehen mal was falsch getippt hat und dann 100 Fehlermeldungen
kommen.
Angedacht ist dann auch ein Editor, der rein grafisch mit Objekten
umgehen kann und den entsprechenden PureBasic Code ausgibt.
Ein integriertes Zeichenprogramm ist auch vorhanden.
Da dieser Editor allerdings auf dem noch nicht fertigen Klacks basieren soll,
ist der natürlich noch nicht mal angefangen. Da sich ja der Syntax noch ändern kann.
Ich denke, wenn Klacks erstmal fertig ist, werden wir schnell auch
gute Beispiele für die Verwendung von Klacks haben.
