Fragen zu DefData?
Übersicht

blackmasterBetreff: Fragen zu DefData? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich möchte das Spiel TopWords mal nach Programmieren, jetzt habe ich aber ein Problem mit DefData. Edit: Hier mal ein Screen was für Spiel ich meine: http://picnic.ciao.com/de/2699878.jpg Ich habe dazu erstmal ein Array für die Karte erstellt, für die aktuelle Map und dann erstelle ich ein Array für die Steine und weise die Steine die werte von der Karte zu, auf welche Position man den Stein Setzen möchte. Code: [AUSKLAPPEN] [code]Global Karte:Int[10,10]
Global Spielstein:Int[10,10,20,5][/code] und hier die Daten für die Spielsteine: Code: [AUSKLAPPEN] #stein_data
DefData 0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0 das Problem ist, es müssen 4 Parameter für die Daten vorhanden sein, ich weiss jetzt nicht, wie ich diese mit eingeben kann. Wie würdet ihr das ambesten machen mit der Map und die Spielsteine? Ich wäre euch sehr dankbar für Tipps und Lösungsvorschläge. MfG |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich kenn' das Spiel nicht, darum: Wozu braucht man da die Karte? Liegen da schon Buchstaben verteilt?
Wenn ja würde ein Zufällig initialisiertes Spielfeld einfacher gehen. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke Dir.
Ich versuche ambesten mal ein Scrabble Spiel nach zu Programmieren und möchte wissen, wie ich das Spielfeld über DefData einlese, da ich 3 Parameter im Array habe (x,y,p), das p ist für die Punktzahl für die jeweilige Tiles. Code: [AUSKLAPPEN] #map_data
DefData 3,1,1,4,1,1,1,3,1,1,1,4,1,1,3 DefData 1,5,1,1,1,6,1,1,1,6,1,1,1,5,1 DefData 1,1,5,1,1,1,4,1,4,1,1,1,5,1,1 DefData 4,1,1,5,1,1,1,4,1,1,1,5,1,1,4 DefData 1,1,1,1,5,1,1,1,1,1,5,1,1,1,1 DefData 1,6,1,1,1,6,1,1,1,6,1,1,1,6,1 DefData 1,1,4,1,1,1,4,1,4,1,1,1,4,1,1 DefData 3,1,1,4,1,1,1,2,1,1,1,4,1,1,3 DefData 1,1,4,1,1,1,4,1,4,1,1,1,4,1,1 DefData 1,6,1,1,1,6,1,1,1,6,1,1,1,6,1 DefData 1,1,1,1,5,1,1,1,1,1,5,1,1,1,1 DefData 4,1,1,5,1,1,1,4,1,1,1,5,1,1,4 DefData 1,1,5,1,1,1,4,1,4,1,1,1,5,1,1 DefData 1,5,1,1,1,6,1,1,1,6,1,1,1,5,1 DefData 3,1,1,4,1,1,1,3,1,1,1,4,1,1,3 Und wo muss ich die 3te Parameter(p) im DefData eintragen? Danke schonmal für die Hilfe. MfG |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die X/Y Größe vom Spielbrett ist doch statisch, du musst nur den Dritten Parameter einlesen.
Code: [AUSKLAPPEN] SuperStrict
Local map_x:Int, map_y:Int, p:Int ReadData map_x, map_y Local map:Int[map_x, map_y] For Local x:Int = 0 Until map_x For Local y:Int = 0 Until map_y ReadData(p) map[x, y] = p Next Next '* Testweise ausgeben: Print map[0, 0] + " " + map[1, 0] + " " + map[2, 0] Print map[0, 1] + " " + map[1, 1] + " " + map[2, 1] Print map[0, 2] + " " + map[1, 2] + " " + map[2, 2] #map_data DefData 3,3 '* 3x3 Felder (X und Y größe) DefData 0,1,0 '* Was auf der Position für ein Zustand sein soll DefData 1,2,1 DefData 0,1,0 Edit: Ausführliches Beispiel |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke Dir für das Beispiel.
Was ich noch wissen möchte ist, wie du die Map und Steine erstellen würdest? Also ich habe das aktuelle Spielfeld in einem Array und die Spielsteine in einem Array. Ich musss das halt wissen, da ich später bei der Punkte berechnung der gesetzten Steine keine probleme bekomme. Edit: Oder sollte ich die Spielsteine ambesten mit Types erstellen? Beispiel: Code: [AUSKLAPPEN] Global SteinList:TList = New TList
Type TSpielStein Field SteinX:Int Field SteinY:Int Field SteinXFeld:Int Field SteinYFeld:Int Field SteinFrames:Int Field SteinBuchstabe:String Method New() SteinList.AddLast(Self) End Method End Type Ich danke Dir schonmal. MfG |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst ja Array und Type kombinieren.
Code: [AUSKLAPPEN] SuperStrict
Type TSpielStein Field Wert:Int Function Create:TSpielStein(fwert:Int) Local s:TSpielStein = New TSpielStein s.Wert = fwert Return s End Function End Type Local map_x:Int, map_y:Int, p:Int ReadData map_x, map_y Local map:TSpielStein[map_x, map_y] '*** Die Map enthält Daten vom Typ TSpielStein For Local x:Int = 0 Until map_x For Local y:Int = 0 Until map_y ReadData(p) map[x, y] = TSpielStein.Create(p) '** Erstellt einen Spielstein und legt ihn im Array ab. Next Next '* Testweise ausgeben: For Local i:Int = 0 Until map_x For Local j:Int = 0 Until map_y Print map[i, j].Wert Next Next #map_data DefData 3,3 '* 3x3 Felder (X und Y größe) DefData 0,1,0 '* Was auf der Position für ein Zustand sein soll DefData 1,2,1 DefData 0,1,0 Du erstellst einen Array und ließt aus dem Data-Block die Werte für Wortwerte aus, das Feld für den Buchstaben der dort liegt bleibt Leer bis man dort was ablegt. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank.
Aber wenn man doch auf 1 Feld ein Buchstaben drauf setzt, wird diese doch dann gelöscht und den Stein dort drauf gesetzt, so kann ich dann nicht mehr prüfen, auf welches Feld der Buchstabe ist, wegen die Farbige Felder, indem man bestimmte Punkte bekommt. Wenn ich das Array mit Type kombiniere, muss es ja funktionieren. Sry, ich muss mich da ein bisschen ein arbeiten um Feld mit Type zu kombinieren. Ich werde erstmal paar Übungen machen, bevor ich los lege. Vielen Dank für den Beispielcode. MfG |
||
- Zuletzt bearbeitet von blackmaster am Mi, Okt 29, 2008 0:07, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst in den Type doch beliebig viele Werte verwenden. Erstmal wird ein "leerer" Spielstein auf jedem Feld erstellt, der nur Informationen für mehrfachen Buchstaben/Wortwert enthält. Wenn man einen Buchstaben legen möchte, bekommt der Spielstein den Wert des Buchstabens.
Du musst nur einmal alle Spielfelder erstellen und einzelne Werte eintragen oder zurück setzen; den Type musst du dann nicht löschen, es sei denn, du willst eine anderes Spielbrett Laden. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, ich hab das mit den Steinen anders versucht, hier mal der komplette Code:
Code: [AUSKLAPPEN] SuperStrict
Graphics 1024,768,0 SetMaskColor 255,0,255 Global tile:TImage = LoadAnimImage("img/tile.png",32,32,0,7) Global steine:TImage = LoadAnimImage("img/steine.png",32,32,0,32) Global SteinFrames:Int Type TSpielStein Field Wert:Int Field Text:String Field SteinImFeld:Int Field SteinFrames:Int Function Create:TSpielStein(fwert:Int) Local s:TSpielStein = New TSpielStein s.Wert = fwert Return s End Function End Type Local map_x:Int, map_y:Int, p:Int ReadData map_x, map_y Local map:TSpielStein[map_x, map_y] '*** Die Map enthält Daten vom Typ TSpielStein For Local x:Int = 0 Until map_x For Local y:Int = 0 Until map_y ReadData(p) map[x, y] = TSpielStein.Create(p) '** Erstellt einen Spielstein und legt ihn im Array ab. If map[x, y].Wert = 3 Then map[x, y].Text = "DREIFACHER WORT WERT" If map[x, y].Wert = 4 Then map[x, y].Text = "DOPPELTER BUCHSTABEN WERT" If map[x, y].Wert = 5 Then map[x, y].Text = "DOPPELTER WORT WERT" If map[x, y].Wert = 6 Then map[x, y].Text = "DREIFACHER BUCHSTABEN WERT" Next Next Repeat Cls '* Testweise ausgeben: For Local i:Int = 0 Until map_x For Local j:Int = 0 Until map_y SetColor 255,255,255 DrawImage tile,100+i*32,100+j*32,map[i, j].Wert 'Stein im Feld anzeigen, wenn = 1 If map[i, j].SteinImFeld = 1 Then DrawImage steine,100+i*32,100+j*32,map[i, j].SteinFrames SetColor 0,0,0 If MouseX() > 100+i*32 And MouseX() < 100+i*32+32 Then If MouseY() > 100+j*32 And MouseY() < 100+j*32+32 Then SetColor 255,255,255 DrawText map[i, j].Text,20,20 If MouseHit(1) And MouseDown(1) Then map[i, j].SteinImFeld = 1 map[i, j].SteinFrames = SteinFrames 'den aktuelle Stein im Spielfeld zuweisen EndIf EndIf EndIf Next Next 'Nächster Stein auswählen SetColor 255,255,255 If KeyHit(KEY_LEFT) And KeyDown(KEY_LEFT) Then SteinFrames = SteinFrames - 1 If SteinFrames < 0 Then SteinFrames = 26 EndIf 'Verheriger Stein auswählen If KeyHit(KEY_RIGHT) And KeyDown(KEY_RIGHT) Then SteinFrames = SteinFrames + 1 If SteinFrames >= 27 Then SteinFrames = 0 EndIf 'Stein am Mouseposition zeichnen DrawImage steine,MouseX()-16,MouseY()-16,SteinFrames Flip Until KeyHit(KEY_ESCAPE) End #map_data DefData 15,15 '* 15x15 Felder (X und Y größe) DefData 3,1,1,4,1,1,1,3,1,1,1,4,1,1,3 '* Was auf der Position für ein Zustand sein soll DefData 1,5,1,1,1,6,1,1,1,6,1,1,1,5,1 DefData 1,1,5,1,1,1,4,1,4,1,1,1,5,1,1 DefData 4,1,1,5,1,1,1,4,1,1,1,5,1,1,4 DefData 1,1,1,1,5,1,1,1,1,1,5,1,1,1,1 DefData 1,6,1,1,1,6,1,1,1,6,1,1,1,6,1 DefData 1,1,4,1,1,1,4,1,4,1,1,1,4,1,1 DefData 3,1,1,4,1,1,1,2,1,1,1,4,1,1,3 DefData 1,1,4,1,1,1,4,1,4,1,1,1,4,1,1 DefData 1,6,1,1,1,6,1,1,1,6,1,1,1,6,1 DefData 1,1,1,1,5,1,1,1,1,1,5,1,1,1,1 DefData 4,1,1,5,1,1,1,4,1,1,1,5,1,1,4 DefData 1,1,5,1,1,1,4,1,4,1,1,1,5,1,1 DefData 1,5,1,1,1,6,1,1,1,6,1,1,1,5,1 DefData 3,1,1,4,1,1,1,3,1,1,1,4,1,1,3 Ich habe die Tiles für die Felder in einem extra Image-Datei und die Steine für die Buchstaben auch. Könntest Du vieleicht kucken, ob das so richtig ist? Den rest werde ich schon alleine lösen. Edit: Ich habe das mal hochgeladen, wenn man den Code so nicht gut lesen kann: Download (690 kB) Vielen Dank. MfG |
||
- Zuletzt bearbeitet von blackmaster am Mi, Okt 29, 2008 21:59, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich könnte nicht behaupten, irgendwas grundfalsches zu sehen. So lang es funktioniert, ist es richtig. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, ich dachte man könnte es auch anders machen, wollte halt nur wissen, ob es so sinnvoll ist.
Aber es funktioniert. Vielen Dank. MfG |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group