Dim oder Type ?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

NForcer

Betreff: Dim oder Type ?

BeitragSo, Jan 25, 2004 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo erstmal ich bin gerade dabei ein Spiel nach dem Vorbild von WoG (www.warofgalaxy.com) fürn Singleplayer zu schreiben und habe dabei folgendes Problem

angenommen man hat 5 Galaxien à 5 Systemen à 10 Planeten auf denen man Gebäude,Kampfschiffe,Forschungen etc bauen kann, wie würde man dies am besten machen?
Bis jetzt habe ich das Menü grafisch schon erstellt, also es gibt schon kaufen_Buttons etc jetzt müssen nur noch die Werte eingearbeitet werden.
Ich habe zurzeit soetwas "fabriziert" ;)
es sollte jedenfallls nach folgendem Prinzip ablaufen:
ich habe einen Planeten in Galaxy 2,Sytsem 3, Planet 5 ,Gebäude 1 (Eisenmine),Erweiterung 3 , Forschung 2, Produktivität 210 <- da habe ich mir schon eine Formel ausgedacht. ( P. = 10+50*Erw. + 25*Fors.)
also Dim Gebäude(2,3,5,1,3,2,210) oder wie?
Es soll ein rundenbasiertes Spiel sein (man baut Gebäude -einige dauern 3 Runden einige 1 etc,je nach stufe der Technologie- und klickt unten rechts den "Nächste Runde-Button"
und dann soll meinetwegen aus der Forschung 2 Forschung 3 werden etc.

wie kann ich das jetzt realisieren ich weis das das mit den Dims nichts wird aber kann mir trotzdem wer helfen, auch wenn es Types sein müssen (habe schlechte/kaum Erfahrung mit Types)

Travis

BeitragSo, Jan 25, 2004 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du ein solches DIM-Deld aufbaust, dann reservierst du ja gleich Speicher für 37.800 Verschiedene Variablen. Und das für nur ein Gebäude!!

Dann würde ich mir lieber noch mal genau die Type-Befehle angucken, es lohnt sich. Dann kann man später auch Problemlos wieder was löschen.

Jetzt mal ein Beispiel:

Code: [AUSKLAPPEN]

Type Gebäude
 Field Galaxie, System, Planet, Gebäudetyp, Erweiterung, Forschung
End Type


Eventuell würde ich auch noch eine ID für jedes Gebäude einbauen, damit man es Später herauspicken kann.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

NForcer

BeitragSo, Jan 25, 2004 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo danke
habe ich mir auch schon so vorgestellt.. denn es müssen ja noch die Schiffe + Kosten jedes einzelnen Gebäudes irgendwo abgespeichert werden.
sind Types automatisch global und können in Funktionen verwendet werden?
edit:
heisst das jetzt ich muss für Schiffe,Gebäude etc Types erstellen wzb.
Type Schiffe
Field KostenEisen,KostenGold,KostenSilber,Angriff,Verteidigung,Bauzeit etc
endtype machen?

Travis

BeitragSo, Jan 25, 2004 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Jepp, Types sind global. Hier mal ein Beispiel:

Code: [AUSKLAPPEN]

Graphics 640,480, 16, 2

Type star
 Field x,y
End Type


CreateStar(500) ; Sterne erstellen

For s.star = Each star ; Sterne anzeigen
 Plot s\x,s\y
Next


WaitKey
End


Function CreateStar(n)
 For i = 1 To n
  s.star = New star
  s\x = Rnd(0,640)
  s\y = Rnd(0,480)
 Next
End Function


Hier werden die Sterne in einer Funktion erstellt und im Hauptprogramm angezeigt.

Und was deine andere Frage angeht, so würde ich empfehlen, für jeden Einheitentyp wie z.B. Schiffe einen eigenen Type anzulegen. Dann hat man auch immer gleich alle zugehörigen Variablen schön im Überblick. Wink
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

NForcer

BeitragSo, Jan 25, 2004 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
jo Danke,
ich habe jetzt eine extra .bb datei erstellt in dem ich meine Types erstelle und hier mal ein beispiel

Code: [AUSKLAPPEN]

; ============ Types für die Gebäude ======================
Type Gebaeude
 Field KostenSilber
 Field KostenGold
 Field KostenEisen
 Field Galaxy
 Field System
 Field Planet
 Field Erweiterung
 Field Forschung
End Type

Global Silbermine.Gebaeude = New Gebaeude
Global Goldmine.Gebaeude = New Gebaeude
Global Eisenmine.Gebaeude = New Gebaeude
Global Oilmine.Gebaeude = New Gebaeude
Global Raffenerie.Gebaeude = New Gebaeude  ; soll später Öl in Treibstoff umwandeln
Global Werft.Gebaeude = New Gebaeude       ; hier werden Kampfschiffe gebaut
Global Forschungszentrum.Gebaeude = New Gebaeude  ; hier können Verbessereungen erworben werden
Global Verteidigungsturm.Gebaeude = New Gebaeude  ; hier können Kampftürme gebaut werden

; ============ End-Types für die Gebäude ======================


und ab jetzt könnte ich theroretisch auf jede eigenschaft zugreifen in jder funktion,ja?
ok soweit komme ich ja mit aber wie lasse ich mir jetzt die einzelnen eigenschaften anzeigen,wenn ich die "koordinaten" (sprich: Galaxy,System,Planet" auswähle?
Bsp: ich habe ein Menü wie in WoG und wähle nun meinen Planeten auf
Gal.2,Sys.1,Pla.5 aus( dieser Planet soll meinetwegen 2 Gebäude auf Stufe 3 und Forschung 2 haben,und die anderen auf Stufe 1 und Forschung 1),wie komme ich nun an die eigenschaften ALLER Gebäude dort ran?<- denn erst durch diese eigenschaften kann ich ja die Ress. die ich verdiene erst ausrechnen. (ich hoffe ihr versteht was ich meine)
weiterhin danke an alle die mir helfen geile Comunity hier ;)

Travis

BeitragSo, Jan 25, 2004 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Aha, du benutzt also für jeden Gebäudetyp eine eigene Typen-Variable. Wenn du es so machst, wüsste ich momentan keine Lösung.

Wenn du nur eine Variable hättest und für den Gebäudetyp einen extra Wert hättest z.B.:

Code: [AUSKLAPPEN]

Type Gebäude
 Field Galaxie, System, Planet, Gebäudetyp, Erweiterung, Forschung
End Type

; Goldmiene auf Planet 1 im 1.System der 1.Galaxie erstellen
g.gebäude = new gebäude
g\Planet = 1
g\Galaxie = 1
g\System = 1
g\GebäudeTyp = 3 ;(z.B.  3 = Goldmiene)
g\Erweiterung = 2  ;(Ausbaustufe?)
g\Forschung = 10   ;(Forschungsstand???)


Dann könnte man es so machen:

Code: [AUSKLAPPEN]

; Eigabebeispiel für das Auswählen der Koordinaten
GalaxieAuswahl = input("Galaxie")
SystemAuswahl = input("System")
PlanetAuswahl   = input("Planet")

; Und jetzt das Auswählen aller Gebäude dieses Planetens
For g.gebäude = each gebäude
 if g\Galaxie = GalaxieAuswahl and g\System = systemauswahl and g\Planet = planetauswahl then

; ---- Mache irgendetwas mit den Werten

next


Die Bedingung der letzten Schleife würde ja für jedes Gebäude dieses Planeten zutreffen. Dann könnte man die Werte je nach Bedarf auswerten.

Code: [AUSKLAPPEN]

If Gebäudetyp = 3 then Goldmiene = Goldmiene + 1


Dann hätte man z.B. die Anzahl der vorhandenen Goldmienen.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

NForcer

BeitragMo, Jan 26, 2004 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo vielen dank ich denke ich habs verstanden ;)
ich werds gleich ma versuchen .. wenn ich irgendwelche probs habe,melde ich mich ;)
 

NForcer

BeitragDo, Jan 29, 2004 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
So bis jetzt kam ich leider kaum dazu weiter zu machen, und habe folgendes problem:

ich habe dies in die "EisenminekaufFunktion()" gepackt:

Code: [AUSKLAPPEN]

If MouseHit(1)
 If BauWahl = 1 Then
  EisenM_Erweiterung = EisenM_Erweiterung + 1
  EisenM.Gebaeude = New Gebaeude
  EisenM\Galaxy = Wahl_Galaxy
  EisenM\System = Wahl_System
  EisenM\Planet = Wahl_Planet
  EisenM\Gebaeudeart = 1
  EisenM\Erweiterung = EisenM_Erweiterung 
 EndIf
EndIf


und will aber von der "UebersichtFunktion()" drauf zugreifen und mir die EisenM\Erweiterung " anzeigen lassen ,aber er kennt die Variable
"EisenM\Erweiterung " nicht *ich nehme mal an,weil sie nur local ist,so wird sie jedenflass im BB-menü angezeigt wenn man mit Strg + Alt+entf raus geht um sich die variablen anzugucken.
wie kann ich diese funktion jetzt globaln? wenn ich dies in der funktion tue kommt ja fehlermeldung :(

i need help sonst komme ich nicht weiter,ich hab jetzt schon einiges ausprobiert,aber es kommen jedesmal irgendwelche fehlermeldungen :(((

Edit: Hier zeigt sich mal wieder,wie schlecht ich mich mit Types auskenne und anwenden kann ;)

jetzt hatte ich versucht mal global Gebaeude zu mach oder global EisenM.Gebaeude und zwar jeweils einzeln vor dem Programm,jedoch kamen da auch Fehlermeldungen *grml*

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group