Autor Beitrag
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Sa 16.06.07 22:33 
Hallo zusammen,

ich bin gerade dabei ein kleines Spielchen in C++ zu schreiben.
Bisher funktioniert auch alles wunderbar, aber jetzt bin ich auf zwei Konzeptprobleme gestoßen.

1. Landschaft
Problem 1 geht darum, wie die Landschaft, d.h. der Boden angezeigt werden soll.
Befindet sich die aktuelle Karte im Weltall, dann ist das kein Problem. Einfaches Parallaxenscrolling und gut.

Auf Planeten / Asteoriden / etc. möchte ich den Boden mit kleinen Kacheln (Tiles) darstellen.
Folgende Überlegungen:

Ich habe mind. 5 verschiedene Tile-Typen. Erde, Gras, Geröll, Beton, und "nichts" (Loch im Asteroiden / Weltraum / einfach kein Boden)
Ich könnte jetzt jeder Kachel des Spielfeldes einen Tiletype zuordnen und zeichnen. Dann habe ich aber ein extrem Kantiges Spielfeld und keine Übergänge.
Siehe: horschdware.de/sc/shot-16-06-07-a.jpg

Also muss jeder Tiletype in 9 Arten vorkommen: Oben links, oben, oben rechts, mitte links, mitte, ....
user defined image, Annahme: jedes Kästchen sei ein Quadrat)

Dann hätte ich aber folgendes Problem: Ich müsste ja ein solches Set (wie in der Grafik) für jede Art von Übergang zu einem anderen Tile erstellen. D.h. von Erde->Gras, Gras->Erde, Erde->Geröll,Geröll->Beton,...

Das wären bei 5 versch. Tiletypes wenn ich richtig rechne 5*4*9 = 180 Kacheln. Mindestens!

Ist das normal so oder habe ich mir da einen ziemlich umständlichen Weg herausgesucht?

2. Menüstruktur
Ich stelle mich gerade etwas ungeschickt mit den Menüfenstern an.

Das Programm startet und öffnet Formular 1, Hauptmenü. Von hier aus kann ich in Unetermenüs wie "Multiplayer", "Singleplayer", etc...
Dafür öffne ich aber jedes Mal ein neues Fenster und schliesse das alte. Das finde ich sehr unschön, da so jedes Menü eine eigene Fensterposition erhalten könnte (wenn z.B. der User die Fenster verschiebt).
Ich habe mir schon überlegt, nur ein einziges Fenster zu nehmen und die Menüs durch ein Menüobjekt, d.h. eine eigene Klasse darzustellen. Jetzt wollte ich mal hören: Was gibt es hier an guten Ansätzen? Wie erstelle ich eine "gescheite" Menüstruktur, bei der nach Möglichkeit nur ein Fenster verwendet wird?

_________________
Delphi: XE - OS: Windows 7 Professional x64
Comp-Freak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 89



BeitragVerfasst: So 17.06.07 02:44 
Soweit ich weiss muss man die uebergaenge nuhr 'programmieren' das heisst du hast jezt diese 9 teile von jeder sorte, die legst du dan einfach uebereinander. es muss aber auch noch die volgenden teile geben:

..................
..............
..........
......
...
..
.
.

und andersrum das es in eine ecke passt

das menu erstelle ich immer ueber tmenu, eine leiste oben imm programm.
natuerlich musst du pausen fals der user aufs menu geht dan ^

man kann die windows aber auch am plazt festhalten --> border := bssingle; oder bsnone
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: So 17.06.07 08:04 
wegen tiles:
die bilder einfach zur laufzeit übernander legen (Stichwort Masken)

Menü: die meisten Programme (Installer etc) machn es so, dass sie ein Fenster haben und nicht benötigte Felder unsichtbar machen...
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 17.06.07 08:07 
Ich persönliche verwende bei meinem Spiel ([url=www.heiliger-damm.de]HD[/url]) immer eine Statemachine - genau wie OpenGL:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
const
  rs_InGame = $01;
  rs_InMenu1 = $02;
  rs_InMenu2 = $03;
  { ... }

Diesen RenderState kann ich nun beliebig umschalten (CurrentState := rsInMenu2;). Beim Rendern selbst muss ich nun nur überprüfen, welcher State aktiv ist und die dafür ausgelegte Prozedur aufrufen (procedure RenderMenu2).

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Horschdware Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: So 17.06.07 09:05 
@GTA
Im eigentlich Spielfenster arbeite ich auch mit solchen States (nennen sich bei mir Enginestates)
Das ganze auf die Menüs zu übertragen ist eine Idee... werde ich mal ausprobieren.

Zu den Tiles:
Wenn ich die Tiles maskiert zeichne, dann habe ich aber trotzdem immer noch recht harte Übergänge - oder sehe ich das falsch?

_________________
Delphi: XE - OS: Windows 7 Professional x64
Hajoseb
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 42



BeitragVerfasst: So 17.06.07 10:01 
Mach es doch folgendermaßen: (Nur ne Idee)

Die Tiles haben einen recht großen Mittelbereich, der immer gleich ist. dann brauchst du (im Prinzip) nur noch kleine Tiles für jede Übergangskombination ...

Die müssen noch nicht einmal im Array berücksichtigt werden, denn die ergeben sich ja aus den eigentlichen Tiles.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  +          +  +          +
++++++++++++++++++++++++++++++
  +          +  +          +
  +          +  +          +
  +   T 1    +  +   T 2    +
  +          +  +          +
  +          +  +          +
++++++++++++++++++++++++++++++
  +          +  +          +
++++++++++++++++++++++++++++++
  +          +  +          +
  +          +  +          +
  +   T 3    +  +   T 4    +
  +          +  +          +
  +          +  +          +
++++++++++++++++++++++++++++++
  +          +  +          +

Du hats also die Tile-Typen 1, 2, 3 und 4 un benutzt Übergänge senkrecht 1-2 3-4, wagerecht 1-3 2-4 und Kreuzung x-x-x-1 (x = egal) x-x-1-2, x-x-2-x, x-1-x-3, 1-2-3-4, 2-x-4-x, ...

Um das Zeichenn von vielen Übergangsbildern kommst du nicht herum, aber es sind kleinere Graphiken, die weniger Speicher brauchen ...

Mfg Hajoseb
Horschdware Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: So 17.06.07 11:42 
@Hajoseb
Ok, das ists auch eine gute Idee. Meine Ansätze gingen bisher immer von kompletten Tiles aus.
Ich glaube, ich werde das einfach mal ausprobieren und mich ans Photoshoppen machen ^^


Ihr könnt ja hier mal reinschauen: Kleine Demo vom Spiel.

horschdware.de/sc/stfc_publicdemo_v01.exe (~14 MB)


Netzwerkcode steht noch nicht, d.h. es geht aktuell nur "Hot Seat".
Im Hauptmenü einfach mal auf "Multiplayer" / "Hotseat" klicken und dann eine Karte auswählen.

Ein Savegame ist dabei. Das könnt ihr im Hauptmenü laden.
Das Spiel selbst läuft Rundenbasierend. Ich denke, man findet sich recht schnell zurecht.


Achtung: Ein paar der verwendeten Grafiken sind aus der Google Bildersuche genommen und dienen aktuell nur als Platzhalter. Diese Bidler werden später noch durch eigene Grafiken ersetzt.

_________________
Delphi: XE - OS: Windows 7 Professional x64
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: So 17.06.07 13:55 
2 Sachen:
1) Wenn ich mit Spieler 1 Angreifen will kommt "C++ Exception"
2) Könntest Du ein Archiv und keine Installationsdatei bereitstellen? wäre nett.
Horschdware Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: So 17.06.07 17:51 
@Tilo
Zum ersten Punkt:
Das ist ein Problem, das ich ab und zu auf Win98 Systemen beobachten konnte.
Leider kann ich mir keinen Reim darauf machen, warum das jetzt bei dir auftritt.
Du kannst auf zwei Arten angreifen:
Einmal Rechtsklick auf die feindliche Einheit, dann links die Waffen auswählen und auf OK klicken

oder

Zweimal Rechtsklick auf das Ziel.

Das Problem ist bisher immer nur bei ersterer Methode aufgetreten.
Wann tritt das bei dir auf?


Zum zweiten Punkt:
Die Datei ist eine WinRAR-Selfextrahierende.
Du kannst die Datei auch mit WinRAR öffnen und die Dateien so extrahieren.

_________________
Delphi: XE - OS: Windows 7 Professional x64
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: So 17.06.07 20:22 
Die Exception tritt bei der Direktwahl auf (1.genannte Methode, aber nur beim 1. Spieler)
Weiterhin ist mir aufgefallen das der Zoom über das Mausrad nicht immer funktioniert, bei mir bisher nur einmal.
Zyklame
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41
Erhaltene Danke: 1

Win 7 Professional
Delphi XE, Visual Studio 2010
BeitragVerfasst: So 17.06.07 21:45 
user profile iconFlamefire hat folgendes geschrieben:
wegen tiles:
die bilder einfach zur laufzeit übernander legen (Stichwort Masken)


würde ich dir auch empfelen
die Bilder einfach ein bischen größer als das Raster und dann Überblendung der Bilder im übergangsbereich