Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

04.08.2004, 17:06

Struktur für ein Brettspiel

:wirbel:

Hoi bin gerade in meiner Freizeit daran und baue mitm Kumpel der mir aber leider nur bei den Texturen richtig gut weiterhelfen kann en kleines Brettspiel.. mit hilfe der Tribase Engine und den bischen Breakanoid-code mit den Spielzuständen.. Ich wollte umbedingt das kleine Projekt machen um selber Gamecode zu schreiben und dabei mal mein bisheriges Wissen auf die Probe zu Stellen.. und nicht nur nach Anleitung ein Projekt schreiben..
so die ganze abbeit is jetzt soweit das ich 2 intromovies laufen lasssen kann ins erweiterte hauptmenü komme und beim starten das spielbrett (bestehend aus 18000 und paar zerquetschte vertices) und die spielerfiguren auf ihren startplätzen anzeigen kann.. alles kein problem dank tribase.. So nun kommt der schwierige Teil :) selber Birne anstrengen.. und Gamecode aufsetzen..

ich dachte mir das ganze So: 8)


Das Spiel hat 30 Felder die Linear abgelaufen werden.. darin müssen Dinge gespeichert werden wie.. ist es ein Baufeld oder ein Kauffeld gehört das angrenzende Feld bereits einem Spieler ist es bebaut.. besitzt es einen Eingang & prosition für die Spielfigur auf dem brett:

Ich die glaube die meisten werden spätestens jetzt erraten haben das wir "Hotel" umsetzen wollen :)) obwohl ich sowas nicht gerne verrate jetzt weiss jeder was ich zumindest meine. ~:)]-<

Die Struktur die ich setzen wollte sähe jetzt nach erster überlegung aus.. währe das möglich oder hätte da jemand ne bessere effizientere Möglichkeit. bzw was wäre daran grundsätzlich falsch...


struct Feld
{
int Typ;
char *Feldart;
bool IsOwned;
char *Ownername;
bool OnEntry;
char *Hotelname;
tbVector3 Position;
};

Feld Spiel_Feld[31] =
{
{ 0, "NICHTS", FALSE, "", FALSE, "", tbVector3(35.0f, 0.0f, 13.0f) },
{ 1, "BAUFELD", FALSE, "", FALSE, "", tbVector3(35.0f, 0.0f, 13.0f) },
{ 2, "KAUFFELD", FALSE, "", FALSE, "", tbVector3(35.0f, 0.0f, 13.0f) },
{ 3, "BAUFELD", FALSE, "", FALSE, "", tbVector3(35.0f, 0.0f, 13.0f) },
{ 4, "KAUFFELD", FALSE, "", FALSE, "", tbVector3(35.0f, 0.0f, 13.0f) },
{ 5, "BAUFELD", FALSE, "", FALSE, "", tbVector3(35.0f, 0.0f, 13.0f) }

~~~~~~~~

};

In Deinem Beitrag befinden sich noch Fehler.
Bitte bearbeite die rot markierten Stellen und lösche diesen Text.

2

04.08.2004, 19:07

Sieht doch schon ganz gut aus. Nur das char* würde ich durch std::string oder char[{nr}] ersetzen ;)

Wenn du mit C++ Arbeitest würde ich
Hotelname durch einen Objekt Pointer ersetzen. Das Objekt ist in diesem Fall eine Klasse die ein Hotel representiert. Wenn der Poiner == NULL ist, hat das Feld keinen Eingang ansonsten ist ein Eingang vorhanden.
Die Owned Variablen brauch man nicht unbedingt. Da das Hotel ja einem Spieler zugewiesen ist.

Die Spielposition auf dem Brett ergibt sich doch aus der Position des Feldes an sich. Genau genommen besteht ein Feld ja aus drei bereichen. Der Fahrspur und links/rechts den Bürgersteig. Daher sind die Positionen fest. Wo also was stehen kann, kann man also leicht errechnen.

Dann würde deine Feldstruktur so ausschauen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
enum eFeldType
{
  NICHTS,
  BAUFELD,
  KAUFFELD,
  ...
};

struct Feld
{
   eFeldType Type;
   std::string strType;
   CHotel* pHotel;
   CPlayer* pPlayer; // Nicht unbedingt notwendig

};


Du solltest aber noch festlegen welche Hotels denn einen Eingang auf das Feld sezten können. Dies kannst du entweder so machen das du jedem Feld eine Liste der möglichen Hotels mit gibst, oder das Hotel Objekt hat eine Liste der möglichen Felder.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

3

04.08.2004, 20:38

danke

:roll: danke das hilft mir scho malsehr viel weiter :O)

jo genau es ist ja so das ein Feld maximal 2 Hotels angrenzen aber am ende nur ein eingang auf ein Feld gesetzt werden darf.. und dann muss ich noch die ganzen preise in strukturen packen.. bin gerda auch dabei die Dice klasse zu machen :) brauch ich ja nur 2 lustige befehle... am anfang sollen bilder reichen um es darzustellen und später vielleicht kleine animationen :)

Anonymous

unregistriert

4

04.08.2004, 20:50

:) @smaltalk

Wenn man selbst versucht en kleines Projekt umzusetzen,
lern man schon um einiges besser.. zb enum "Aufzählung"
hab ich schön öfters benutzt und vorhin ahb ich mich noch gefragt wie :) man
das nochmal macht :))

Wie ist ads eigentlich: :) da ich ja ein Brettspiel 1:1 Kopiere also die 1024x768 textur vom spielfeld handgemacht sieht sehr gut aus :)
kann man dann schwierigkeiten mit Urheberrechten bekommen zb wenn ich es voröffentlichen würde ohne MB Spiele zu fragen :) (tribase) is ja open source oder?? :D (werde schon schreiben Powered by Tribase:) Credits ;) erwähnung inklusive. :wirbel:

Anonymous

unregistriert

5

04.08.2004, 20:51

Re: :) @smaltalk

da hab ichs bissi übertrieben mit smileys

Anonymous

unregistriert

6

05.08.2004, 11:39

jojo

:) jetzt muss ich mir wohl oder über alle zusämmenhänge zu strings zusammenmausern 8)

Anonymous

unregistriert

7

05.08.2004, 17:55

nachtag

mit Strings bin ich nicht so sehr in übung soviel steht fest, :O)
aber ich konnt mir einige beispiele im Netz ansehen..

wenn ich jetzt die Namen der Hotels in eine Stringtabelle oder ein Array schreiben will wie sieht das den aus...

hab nur sowas in der art in meinem schlauen buch gefunden.

const char *meldung[]=
{
"string1"
"string2"
};
aber const char is ja nicht gleich string.. ich weiss zwar das string mit char den selben header teilen :D aber mehr auch nit genau über die zusammenhänge.. ich denke für sone kleine gechite wer der unterschied zwischen char und string eigentlcih nicht besonders oder was bringt string zu benutzen für vorteile.. ?

hab zumindest das hier noch eingebunden..:

#include <string>
using std::string;
#include <iostream>

weil ohne ist ja string nich verfügbar oder.. (zumindets hab ich emhr fehler :D) ..ist es vielleicht doch irgendwo in tribase schon definiert..?

Struktur sieht so aus :

struct Feld
{
int Typ; // Nummerierung
eFeldType Type; // Art des Feldes
string strOwnername; // Name des Besitzers
bool Entry; // sitzt auf dem Feld ein Eingang?
string strHotelname; // Name des Hotels
tbVector3 vPosition; // Vektorposition für die Spielfigur auf dem Feld.. wenn das überhaupt so geht wie ich mir das vorstell denke aber ja
};

und die Spielfeldstruktur ungefähr so :

Feld Spiel_Feld[31] =
{
{ 0, eFeldType(0), strOwnername="" , FALSE, strHotelname="" , tbVector3(35.0f, 0.0f, 13.0f) },
{ 1, eFeldType(2), strOwnername=""[b] , FALSE, strHotelname="" , tbVector3(35.0f, 0.0f, 13.0f) },
{ 2, eFeldType(1), strOwnername="" , FALSE, strHotelname="" , tbVector3(35.0f, 0.0f, 13.0f) },
{ 3, eFeldType(2), strOwnername="" , FALSE, strHotelname="" , tbVector3(35.0f, 0.0f, 13.0f) },

~~~

strOwnername="" <-- hab ich nur rumprobiert das natürlich falsch..
genauso wie
strHotelname="" <-- ich will ja die Namen der Hotels in ne string tabelle schreiben und dann ansprechen mit strTHotelname[0]

oder amch ich da wieder was falsch .. :) es darf Kritik hageln :) und berichtigt werden.

Anonymous

unregistriert

8

05.08.2004, 20:25

multiplayer

http://www.gamedev.net/reference/articles/article722.asp
die erste Variante will ich für den lokalen einzelspieler wo aber am selber rechner leute mitzocken wollen und dann hatt ich ein ein extra gamestate für den multiplayer gedacht und die 2. variante da ich damit schon ein wenig vertraut bin..

Das eigentliche was ich noch loswerden wollte :-D

Wer gute Sourcecode beispiele zu brettspielen kennt oder weiss wo man sowas findet nur her damit..

9

05.08.2004, 20:27

Der Unterschied zwischen char* und std::string ist, das eine ist C und das andere ist C++. std::string ist ein Teil der STL.

Du scheinst da große Lücken zu haben. Empfehle dir das erst einmal aufzuarbeiten bevor du an deinem Spiel weiter machst.


Zitat

strOwnername="" <-- hab ich nur rumprobiert das natürlich falsch..
genauso wie
strHotelname="" <-- ich will ja die Namen der Hotels in ne string tabelle schreiben und dann ansprechen mit strTHotelname[0]

Oh je....

Zitat

...,eFeldType(0),...
doppel oh je....du weis was ein Enumerationstyp ist?

Erst einmal zwei grundsätzliche Frage. Arbeitest du mit C oder C++? Wie weit bist du schon mit der Sprache?

Tipp:
Teile dein Game erst einmal in Strukturen auf. Und bitte lass die Hotel- und Owner-Strings weg. Es ist sehr viel einfacher wenn du dies durch eine Struktur oder ein Objekt ersetzt. Du ersparst die ein haufen Zeit dadurch. Sowohl bei der Entwicklung als auch zur Runtime.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

10

05.08.2004, 21:29

:)

lassen sich doch auh prima kombinieren oder nicht.. g
naja in meinem studium zb, ahben wir nur mit char typen gearbeitet..
ausserdem beschäftige ich mich ja mit allem ein bischen und kann mich nicht an einer Sache aufhängen.. ich hab bisher verschiedene Dinge gemacht.. Selbstständig jedoch weniger, in der sache hätte es doch char auch getan.. ich mein es war nicht mein vorschlag string zu benutzen..
:wirbel:
ajo ajo.. aber wie gesagt man kann auch nicht alles wissen.. bevor ich mir das ganze c/c++ kompendium um die ohrn schlage , schlage ich lieber bestimmte dinge nach.. leider ;) bei den string ohne erfolg, .. gut zugriff auf enumerationstypen auch noch falsch meine güte .. hat aber keine warnung ergeben..

Enumerationstypen ist eine Aufzählung von Mengen :) für einen eigenen Datentypen .. und hier steht noch
Aufzählungstypen sind Datentypen, deren mögliche Werte durch explizite Aufzählung festgelegt werden... ah na gut ok sol das so aussehen ?

enum eFeldType
{
NICHTS, = 0, //Startfeld
KAUFFELD = 1,
BAUFELD, = 2,
EINGANG, = 3, // Eingang kostenlos
BAUPHASE = 4 // Bauphase kostenlos
};


{ 0, 0, strOwnername="" , FALSE, strHotelname="" , tbVector3(35.0f, 0.0f, 13.0f) },
{ 1, 2, strOwnername="" , FALSE, strHotelname="" , tbVector3(35.0f, 0.0f, 13.0f) },

Werbeanzeige