Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 23:31

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Swarm Catcher
BeitragVerfasst: So Sep 11, 2011 22:47 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Hallo allerseits,
da zurzeit Semesterferien sind, dachte ich programmierst du mal wieder was: Zuerst wollte ich nur einen Schwarm simulieren, nachdem das aber recht schnell vonstatten ging, wollte ich das ganze mit OpenGl 3D mässig darstellen.
Dabei hatte ich die Idee, ein kleines Spielchen zu programmieren: Man muss versuchen alle Kugeln in möglichst kurzer Zeit in einen gekennzeichneten Bereich zu treiben.
Damit ist zum Spielprinzip schon alles gesagt :D


Was kann das Programm bis jetzt:
- Kollisionserkennung (mit Schwarm-Objekten sowie Hindernissen - siehe Screenshot)
- Schwarmbildung
- Spielprinzip: Man muss alle Kugeln in den roten Bereich treiben: Je schneller desto mehr Punkte gibt es
- flüssige Kameraklasse (ein bischen tricky zu steueren, aber das kommt noch)


Hier ist erst mal ein Bild von der Paintbox-Version, welche am Anfang stand:
Bild


Hier ist die erste Umsetzung mit OpenGL:
Bild


Heute habe ich das HUD erstellt - die GUI kommt aus meinem Framework:
Bild


To Dos
- GUI zum Einstellen verschiedener Schwarm-Eigenschaften - siehe ersten Screenshot
- Weitere optische Sachen wie bessere Lichter, Materialeigenschaften, usw
- Weitere Levels u.a. mit Hindernissen

Weitere Ideen
- Neues Spielprinzip: Man muss eine einzelne markierte Kugel aussondern, für falsche Kugeln gibts Punktabzug



Hier findet sich eine spielbare Test-Version für Windows. Es wäre nett wenn mir ein paar Leute Feedback liefern würden, insbesondere zum HUD, ob die Aufteilung genauso wie im Screenshot ist

Steuerung: Pfeiltasten
Kamera drehen: WASD
Zoomen: Q und E

bekannte Bugs:
- Aus irgendeinem Grund funktioniert die Kollisionserkennung für den Spieler nicht
- Manchmal schaffen es Kugeln die Abgrenzungen zu durchbrechen

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.


Zuletzt geändert von Carmageddon am So Okt 09, 2011 19:54, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Swarm Catcher
BeitragVerfasst: Mo Sep 12, 2011 14:46 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Das wichtigste zuerst: Bei manchen fehlt die qtintf70.dll. Ich habe sie in obiges Projekt eingefügt, aber es gibt sie auch noch einmal hier zum downloaden.
Ich weiß noch nicht genau wo das herkommt, aber damit habe ich heute abend was zu tun :D


Zuallerst was optisches: Ich bastel gerade die GUI, hier ist ein kleiner Vorgeschmack:
Bild

Je nachdem wo die Maus ist werden sich die Kugeln entsprechend umordnen, eine optische Hervorhebung wird es auch noch geben.



Hier nun noch ein paar Details zum programmtechnischen Hintergrund:

Bilder werden via glBitmap.pas eingeladen und weiterverwendet

HUD / GUI werden mit einer Unit aus meinem Framework. Sie ist etwas steif und unflexibel, aber sie erfüllt ihren Zweck: Unterstützt werden Buttons, Windows, Panels, Edits, Bilder, Checkboxes, desweitern natürlich alle Standardschriftarten, Alpha-Blending und verschiedene optische Einstellungen.
Übergeben werden muss nur der DC und die Größe des Bildschirmes, alles weitere lässt sich untuitiv hinzufügen, etwa so:
Code:
  1.  
  2. //HUD erzeugen
  3. HUD := TGUI.Create(DC,x,y);
  4.  
  5.  //Ein Fenster erstellen 
  6.   HUD.CreateWindow(0,trunc(0.9*y), trunc(0.7*x) ,y,'hud');
  7.  
  8.  //Ansteuern des Fensters 'hud' und Einstellen diverser Eigenschaften
  9.   HUD.Window('hud').BorderVisible := false;
  10.   HUD.Window('hud').BorderSize := 0;
  11.   HUD.Window('hud').BackgroundVisible := false;
  12.   HUD.Window('hud').AddImage(0,0, trunc(0.7*x) ,trunc(0.1*y), ExtractFilePath(ParamStr(0))+'hud.tga','hud_image');
  13.  
  14.  //Ansteuern des Bildes 'hud_image' im Fenster 'hud'
  15.   HUD.Window('hud').Image('hud_image').Active := true;
  16.   HUD.Window('hud').Image('hud_image').onClick := DoSomethingAwesome;
  17.   ...
  18.  


Gerendert wird das ganze dann via glOrtho, eine dreidimensionale Ausgabe ist meiner Meinung nach nicht nötig. Sollte die Maus oder eine Taste gedrückt worden sein, wird dieser einfach mit Koordinaten an TGUI weitergegeben und diese überprüft ob auf den aktivierten Fenster z.b ein Edit-feld den Fokus hat und trägt dort das übermittelte Zeichen ein.


Schwarm
Mein Schwarm basiert auf folgenden Eigenschaften:
- Kommt eine Kugel einer anderen zu nahe wird der Beschleunigungsvektor so gesetzt dass er sich entfernt. Befinden sich mehrere Kugeln zu nahe, wird gemittelt
- Analog wird auf den Schwerpunkt der umgebenden Kugel zugesteuert

Dazu kommt dann noch: Eine Art Gleichrichtung, indem der Beschleunigungsvektor an den mittleren Geschwindigkeitsvektor der umgebenden Kugel angepasst wird, sowie eine Art Fluchtinstinkt. Die Kugeln weichen dem Spieler aus.
Desweiteren die Kollisionserkennung: Innerhalb eines Kreises wird überprüft ob der Vektor Position+Beschleunigung*Faktor innerhalb eines Dreiecks liegt welches ein Hinderniss beschreibt. Wenn ja wird der Beschleunigungsvektor so gesetzt, dass die Kugel sich am schnellsten vom Hinderniss wegbewegt


Levels
In einer level-datei, welche eine einfache Textdatei darstellt, stehen einfach die Koordinaten der Barrieren, de Größe des Spielfeldes usw. Also nichts großes. Evtl stelle ich das später mal um, so dass auch Texturen gespeichert werden können usw.

So long
Carmageddon

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.


Zuletzt geändert von Carmageddon am So Okt 09, 2011 19:56, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Swarm Catcher
BeitragVerfasst: So Sep 25, 2011 17:23 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
So, es ist Sonntag, Zeit für ein paar Updates:

Was ist neu bzw wurde verbessert/geändert

GUI
    - Textdarstellung wurde deutlich verbessert (Ausgabe nun via SDL_TTF)
    - Neue Komponente Memo hinzugefügt
    - Die Fenster-Klasse wurde optisch aufgefrischt
    - Die Checkbox-Klasse wurde überarbeitet

Spiel
    - Umstellung auf SDL, d.h. diese qtintf70.dll wird nun nicht mehr benötigt
    - überarbeitete GUI, d.h. die Interaktion mit dem Spieler ist nun fast überall implementiert
    - weitere spielerische Elemente wurden hinzugefügt

Geplant sind fürs erste zwei Spielmodi - spielbar ist im Moment nur der erste:
    - Catch the Swarm: Versuche so schnell wie möglich alle Kugeln einzufangen
    - Black Sheep: Versuche eine bestimmte Kugel auszusortieren

So, hier gibts nun ein paar Bilder:
Bild Bild

Bild Bild


So, hier gibt die erste wirklich spielbare Demo: (Steuerung wie im ersten Post beschrieben)
Swarm Catcher Beta

Ich habe gerade einen Bug endeckt: Manchmal (wenn man geschickt klickt) verliert ein Edit-Feld zwar den Fokus, aber der Mauszeiger wird weiterhin angezeigt. Fix ich gleich.

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.


Zuletzt geändert von Carmageddon am So Okt 09, 2011 20:02, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Swarm Catcher
BeitragVerfasst: So Okt 09, 2011 19:45 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Wieder zwei Wochen rum und da sich doch einiges getan hat, mach ich ein Update:

GUI
    - Optimierungen vorgenommen, es läuft nun auch auf meinen alten Pc flüssig mit 30-40 FPS
    - Buttons unterstützen nun Hintergrundbilder
    - Neue Objekte hinzugefügt: TabControl, ComboBox, ListBox
    - Unterstützung für eigene Cursor (Bilder im tga-Format) wird nun angeboten

Wobei TabControl mehr oder weniger eine selbstständige GUI darstellt, da sie ähnlich wie meine TGUI-Class ein Array von TGUIWindow enthält:

Code:
  1. TGUITabControl = class(TGUIStandartClass)
  2.   private
  3.    sActiveTab    : String;
  4.    pActiveTab    : PGUIWindow;
  5.  
  6.    procedure SetActiveTab(actTab: String);
  7.    procedure PlotHeader;
  8.   public
  9.    Tabs            : array of TGUIWindow;
  10.    Captions        : array of String;
  11.    CaptionPos      : array of TGUIRect;
  12.    CaptionPics     : array of GLUInt;
  13.    headerColor     : TGUIColor;
  14.    backgroundColor : TGUIColor;
  15.  
  16.    inactiveCaptionHeight,
  17.    activeCaptionHeight  : integer;
  18.  
  19.    property ActiveTab: String write SetActiveTab;
  20.  
  21.    procedure Init(pX,pY,pH,pW: integer; pName: String);
  22.    procedure AddTab(TabName, TabCaption: String);
  23.    function Tab(searchTab: String): PGUIWindow;
  24.  
  25.    procedure MouseDown(mX,mY: integer);
  26.    procedure MouseUp(mX,mY: integer);
  27.    procedure MouseMove(mX,mY: integer);
  28.  
  29.    procedure Render(pAlpha: extended);  override;
  30. end;


via forward declaration ist natürlich TGUITabControl eine Komponente von TGUIWindow, auf dem man nun wieder ein TabControl erstellen könnte auf dem man nun wieder.....

linkes Bild: Grafisch ist das natülich nicht das Highlight, aber lieber eine unschöne funktionierende Komponente als eine schöne nicht funktionierende. Man sieht eine TGUITabControl im einsatz. Per Klick auf die Header lässt sich durch die Tabs navigieren.
Oben rechts sieht man die ComboBox. Die Items poppen auf wenn man mit der Maus über die Komponente fährt. Per Klick auf die Buttons recht uns links lässt sich durch die Einträge navgieren

Auf dem rechten Bild sieht man den neuen Level-Lade-Bildschirm und die List-Box
Bild Bild



Spieltechnisch
Die Verwaltung der Highscores wurde komplett neu überarbeitet: Es existiert nun eine Klasse die sich um die ganzen Daten kümmert, sich sortiert und bei Bedarf ausgibt. Desweiteren wurde die Text-Datei entfernt. Alles wird nun per FileStream geladen und gespeichert, was die Sache auch um einiges einfacher macht. (Außerdem kann man nun nicht mehr so leicht "cheaten" )



Ich habe auch ein Format entwickelt indem man meine Level speichern kann. Dies ging Hand in Hand mit der Entwicklung eines Leveleditors:

Bild Bild

Die gesamten Level basieren nun auf Dreiecken, welche man noch per Hand eintippen muss, mal schauen, vll implementiere ich ein Art Click&Drop.

Kurze Erklärung der Farben:
    - Lila: Boden
    - Grün: Spawn-Bereich, d.h. dort erscheinen später die Kugeln
    - Gelb: Barrieren. Um zu vermeiden das Kugeln an den Kanten durchschlüpfen habe ich das gesamte Level damit umgeben
    - Hellblau: Der Ziel-Bereich, d.h. dort müssen die Kugeln rein
    - Rot: Ein Ausgewähltes Dreieck, welches nun bearbeitet werden kann

Jedes Spawn-Bereich Dreieck erhält auserdem eine Koordinate zu der die Kugeln gezogen werden wenn sie auf das Dreieck kommen. Auch kann/muss die Spieler-Startposition gesetzt werden.
Alle spielrelevanten Daten (maximale Geschwindigkeiten der Kugeln, diverse Schwarmeinstellungen, Anzahl der Kugeln,...) werden unter dem Reiter Spieldaten gesetzt.

Was mir an dem Editor noch nicht gefällt ist, dass man keine Relationen sieht, d.h. wie groß ist das Spielfeld am Ende. Ein Möglichkeit wäre einfach ein paar Kugeln aufs Spielfeld zu zeichnen welche die Größe wie im Spiel haben.

Hier gibts die neuste Version zum testen. Allerdings erstmal ohne Leveleditor, da dieser noch nicht wirklich benutzerfreundlich ist.

So, das wars für erste. Jetzt geht es mit großen Schritten auf die 1.0 Version zu. Es fehlt nur noch der zweite Spielmodus und vll hier und da noch eine kleine Feineinstellungen. :D
Ich freue mich auf eure Kommentare

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Swarm Catcher
BeitragVerfasst: So Okt 16, 2011 16:05 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Release der v1.0 Version

Ich habe die letzte Woche den zweiten Spielmodus implementiert. Da ich aber leider nicht so viel Zeit hatte wie ursprünglich gedacht sind viele Ideen nicht eingebaut (fürs erste). Ich wollte z.b. im Black Sheep Modus Löcher einbauen, sodass man besser aufpassen muss was man tut, usw

Hinzugefügt wurde desweiteren ein weitere Level, den ich mal die Schwierigkeit "mittel" gebe, da ich dort die Schwarm-Einstellungen ein bischen variert habe um den Schwarm nicht ganz so kontaktfreundig zu machen.

Ich hoffe dass ich demnächst wieder genug Zeit habe um eine 1.1 Version zu realisieren, indem ich ein paar mehr Ideen umsetzen kann.

Hier gibts die Version zum Downloaden. Viel Spass damit :D


Grüße
Carmageddon

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 23 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.091s | 17 Queries | GZIP : On ]