Dim oder Type ?
Übersicht

NForcerBetreff: Dim oder Type ? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
NForcer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jo vielen dank ich denke ich habs verstanden ;)
ich werds gleich ma versuchen .. wenn ich irgendwelche probs habe,melde ich mich ;) |
||
NForcer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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* |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group