| Autor |
Beitrag |
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Mi 02.02.05 16:53
ich denke er arbeitet einfach nur mit der guten alten GDI(Canvas). Dieses Verfahren ist hier vollkommen ausreichend. DelphiX und andere engines wären hier wohl ein Overkill.
Vom Programmieren, so schwer ist das garnicht, ich denke, es kommt vor allem auf die gute Spielidee an.
Würde ich so etwas bauen wollen, würde ich vermutlich ein 2d array anlegen, in denen jedes Element speichert, ob und welcher Stein sich an dieser stelle befindet.
Wenn du nun mit dem Laser hindurchfliegst musst du je nach typ des aktuellen feldes z.B. die Richtung ändern.
MathiasH
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 02.02.05 16:59
hab noch ne kleine verbesserung, wenn man ein level speichert, dann muss man immer .lvl dahinter schreiben das sollte geändert werden.
wie mache ich denn sonn tile system, also mit feldern und wie mache ich sprites selber ?
ob und welcher, ob versteh ich ja zb myarray[1]:= true aber dann noch welcher ?
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Mi 02.02.05 17:00
suchanregung COPYRECT
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 02.02.05 17:06
da finde ich aber nichts darüber
wie mach ich das und wie das mit dem array ?
hätte zu gerne mal n code beispiel
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Mi 02.02.05 17:14
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| board: array[0..29] of array[0..29] of integer;
... for x := 0 to 29 do begin for y := 0 to 29 do begin BitBlt(Form1.Canvas.Handle, x*10, y*10, x*10+10, y*10+10, Image1.Canvas.handle, board[x,y]*10, 0, SRCCOPY); end; end; |
Das wäre ein code schnipsel zum zeichnen einer solchen karte. in Image1 liegen die 10x10 Pixel großen tiles nebeneinander und der wert im array gibt an, das wievielte Tile zu benutzen ist.
Ich hoffe ich hab die params bei Bitblt in der richtigen reihenfolge 
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 02.02.05 17:18
ich hasse verschachtelte arrays da drücke ich mich immer drum rum.
Der Code funzt soweit, dass er ein weißes feld in das image zeichnet.
wie krieg ich jetzt einzelne images auf die einzelnen felder und wie frage ich ab ob sich in diesem fall der laser auf so einem feld befindet bzw auf welchem er sich befindet und welche eigenschaften das feld hat.
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Mi 02.02.05 17:47
äh ih glaub du hast das bissel falsch verstanden. mal mal ein bitmap bunt an, oder noch besser such dir irgend ein bild, auf dem am linken oberen rand bisserl was zu sehen ist. dieses lädst du in ein image rein
das image kommt in den Hintergrund (visible= false), wir brauchen es nur als speicherplatz für unsere Tiles.
So und nun den code ausführen. dann sollte auf deinem fenster ein buntes chaos erschei5nen
natürlich muss du vorher in das array bisschen was hineinschreiben. z.B. jedes Feld mit Random(5)füllen
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 02.02.05 18:37
da baut sich das bild von links oben nach rechts unten hin auf und hinterlässt das was oben links in der ecke ist, aber das bild ist nicht dauerhaft da beim mini/maximieren ist es wieder weg, aber irgendwie schnall ich nich was das damit zu tun hat
gib mal beispiel
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Mi 02.02.05 19:14
1. das verschwinden ist klar, da wir auf einem puffer schreiben der gelöscht wird. wenn du form1.canvas durch image2.canvas ersetzt wird es permanent ins image 2 hineingemalt.
2. fülle das array mit vernünftigen daten, z.B. der folge aus 1,2,3,4,1,2,3,4 und du wirst sehen, wie das funzt
3. fülle image1 mit etwas, in dem du in der obersten zeile bissel rummalst, z.B. mach die ersten 10x10 pixel rot, danaben, wieder 10px breit das ganze in blau usw. und su wirst verstehen, wozu das gut ist
//edit, erbarme sich bitte ein mod und splitte das thema
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mi 02.02.05 19:29
| MathiasH hat folgendes geschrieben: | | //edit, erbarme sich bitte ein mod und splitte das thema |
Würde ich gerne machen, doch bis zum nächsten Patch funktioniert das Splitten nicht korrekt, deswegen geht das nicht. Ich würde Euch empfehlen, ein Topic zu öffnen, dort kann besser diskutiert werden.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 02.02.05 19:31
gute idee ich hatte auch keine lust 15 seiten zu lesen 
|
|
Phantom1 
      
Beiträge: 390
|
Verfasst: Mi 02.02.05 19:52
Ich habe wirklich nur eine normale TPaintbox verwendet, gezeichnet wird dabei auf ein TBitmap im Hintergrund. Die Leveldaten befinden sich in einem statischen array of string. Die Simulation selbst läuft über einen TTimer.
Es war mein erstes Spiel was ich in Delphi geschrieben habe. Damals brauchte ich etwa 1 woche für die erste Version, ist also nicht sehr schwer bzw zeitaufwendig. Der Code umfasst jetzt etwa 1100 zeilen (ohne leveleditor). Würde ich den Code veröffentlichen würde warscheinlich kaum einer dort durchblicken, weil ich damals sogut wie garnicht Object-Orientiert Programmieren konnte 
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 02.02.05 20:02
|
|
JiimmyC
      
Beiträge: 35
WinXP SP1
|
Verfasst: Mi 02.02.05 21:36
Klasse Spiel! :thumbsup:
_________________ Information in this online help system is subject to change without notice.
|
|
Phantom1 
      
Beiträge: 390
|
Verfasst: Mi 02.02.05 22:45
@F34r0fTh3D4rk: ich habe keine eigenen Klassen erstellt oder so, alles befindet sich in der form1 unit, bis auf die extra fenster natürlich ^^ Von Code-Kommentaren habe ich damals auch nie viel gehalten  Jetzt würde ich das alles natürlich komplett anders schreiben, zb für jedes Teilchen eine eigene Klasse erstellen usw...
Wie gesagt damals war ich noch ein delphi anfänger, turbo pascal konnte ich dagegen sehr gut und da waren eben noch nicht viel mit OOP.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 03.02.05 22:10
so ich habe jetzt die lösung, ich habe angefangen, 3 In A Row zu Programmieren also 4 gewinnt mit 3 * 3 Kästchen
der code war bislang so:
(keine Ahnung obs einfacher geht)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249:
| unit UMain;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus;
type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; MainMenu1: TMainMenu; Spiel1: TMenuItem; Neustart1: TMenuItem; N1: TMenuItem; Beenden1: TMenuItem; procedure FormCreate(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Image2Click(Sender: TObject); procedure Image3Click(Sender: TObject); procedure Image4Click(Sender: TObject); procedure Image5Click(Sender: TObject); procedure Image6Click(Sender: TObject); procedure Image7Click(Sender: TObject); procedure Image8Click(Sender: TObject); procedure Image9Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Neustart1Click(Sender: TObject); private public end;
var Form1: TForm1; i: integer; player: boolean; fields: array[1..9] of integer; able: array[1..9] of boolean;
implementation
{$R *.dfm}
function Win: boolean; begin
end;
procedure TForm1.FormCreate(Sender: TObject); var Map : TComponent; begin player:= true; for i:= 1 to 9 do begin fields[i]:= 0; able[i]:= true; Map := FindComponent('image'+IntToStr(i)); if Map <> nil then with Timage(map).Canvas do begin brush.color:= clwhite; rectangle(0,0,Timage(map).width,Timage(map).width); end; end; end;
procedure TForm1.Image1Click(Sender: TObject); begin if able[1] = true then begin if player = true then fields[1]:= 1 else fields[1]:= 2; player:= not player; if fields[1] = 1 then with image1.Canvas do begin brush.Color:= clred; ellipse(0,0,image1.Width,image1.Height); end; if fields[1] = 2 then with image1.Canvas do begin brush.Color:= clblue; ellipse(0,0,image1.Width,image1.Height); end; able[1]:= false; end; end;
procedure TForm1.Image2Click(Sender: TObject); begin if able[2] = true then begin if player = true then fields[2]:= 1 else fields[2]:= 2; player:= not player; if fields[2] = 1 then with image2.Canvas do begin brush.Color:= clred; ellipse(0,0,image2.Width,image2.Height); end; if fields[2] = 2 then with image2.Canvas do begin brush.Color:= clblue; ellipse(0,0,image2.Width,image2.Height); end; able[2]:= false; end; end;
procedure TForm1.Image3Click(Sender: TObject); begin if able[3] = true then begin if player = true then fields[3]:= 1 else fields[3]:= 2; player:= not player; if fields[3] = 1 then with image3.Canvas do begin brush.Color:= clred; ellipse(0,0,image3.Width,image3.Height); end; if fields[3] = 2 then with image3.Canvas do begin brush.Color:= clblue; ellipse(0,0,image3.Width,image3.Height); end; able[3]:= false; end; end;
procedure TForm1.Image4Click(Sender: TObject); begin if able[4] = true then begin if player = true then fields[4]:= 1 else fields[4]:= 2; player:= not player; if fields[4] = 1 then with image4.Canvas do begin brush.Color:= clred; ellipse(0,0,image4.Width,image4.Height); end; if fields[4] = 2 then with image4.Canvas do begin brush.Color:= clblue; ellipse(0,0,image4.Width,image4.Height); end; able[4]:= false; end; end;
procedure TForm1.Image5Click(Sender: TObject); begin if able[5] = true then begin if player = true then fields[5]:= 1 else fields[5]:= 2; player:= not player; if fields[5] = 1 then with image5.Canvas do begin brush.Color:= clred; ellipse(0,0,image5.Width,image5.Height); end; if fields[5] = 2 then with image5.Canvas do begin brush.Color:= clblue; ellipse(0,0,image5.Width,image5.Height); end; able[5]:= false; end; end;
procedure TForm1.Image6Click(Sender: TObject); begin if able[6] = true then begin if player = true then fields[6]:= 1 else fields[6]:= 2; player:= not player; if fields[6] = 1 then with image6.Canvas do begin brush.Color:= clred; ellipse(0,0,image6.Width,image6.Height); end; if fields[6] = 2 then with image6.Canvas do begin brush.Color:= clblue; ellipse(0,0,image6.Width,image6.Height); end; able[6]:= false; end; end;
procedure TForm1.Image7Click(Sender: TObject); begin if able[7] = true then begin if player = true then fields[7]:= 1 else fields[7]:= 2; player:= not player; if fields[7] = 1 then with image7.Canvas do begin brush.Color:= clred; ellipse(0,0,image7.Width,image7.Height); end; if fields[7] = 2 then with image7.Canvas do begin brush.Color:= clblue; ellipse(0,0,image7.Width,image7.Height); end; able[7]:= false; end; end;
procedure TForm1.Image8Click(Sender: TObject); begin if able[8] = true then begin if player = true then fields[8]:= 1 else fields[8]:= 2; player:= not player; if fields[8] = 1 then with image8.Canvas do begin brush.Color:= clred; ellipse(0,0,image8.Width,image8.Height); end; if fields[8] = 2 then with image8.Canvas do begin brush.Color:= clblue; ellipse(0,0,image8.Width,image8.Height); end; able[8]:= false; end; end;
procedure TForm1.Image9Click(Sender: TObject); begin if able[9] = true then begin if player = true then fields[9]:= 1 else fields[9]:= 2; player:= not player; if fields[9] = 1 then with image9.Canvas do begin brush.Color:= clred; ellipse(0,0,image9.Width,image9.Height); end; if fields[9] = 2 then with image9.Canvas do begin brush.Color:= clblue; ellipse(0,0,image9.Width,image9.Height); end; able[9]:= false; end; end;
procedure TForm1.Beenden1Click(Sender: TObject); begin application.terminate; end;
procedure TForm1.Neustart1Click(Sender: TObject); var Map : TComponent; begin player:= true; for i:= 1 to 9 do begin fields[i]:= 0; able[i]:= true; Map := FindComponent('image'+IntToStr(i)); if Map <> nil then with Timage(map).Canvas do begin brush.color:= clwhite; rectangle(0,0,Timage(map).width,Timage(map).width); end; end; end;
end. |
dann habe ich gedacht, es wäre doch viel zu aufwendig alles abzufragen da ja auch felder übereinander sein können und ein array ist nur 2 dimensional also mehr oder weniger.
aber mit
Delphi-Quelltext 1:
| fields: array of array of integer; |
müsste es doch gehen oder und was ist mit diagonalen kombinationen ?
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Fr 04.02.05 16:02
wie mach ich die abfrage am besten also das mit den arrays stell ich mir so vor:
normales array
Quelltext
3D Array (also array of array)
Quelltext
ein array aus dem obigen array halt aber wie frage ich das am besten ab, auch mit diagonalen usw ?
|
|
adler
      
Beiträge: 511
Windows XP
Delphi 05 Pers
|
Verfasst: Fr 04.02.05 20:18
Ich hänge an Level 5, wer kann helfen 
_________________ Wo's nix zu gucken gibt, gibts vielleicht was zu hören.
|
|
StefanH
      
Beiträge: 1144
Win XP
D5 Standard, D7 Pers, D2005 Pers
|
Verfasst: Fr 04.02.05 21:35
| adler hat folgendes geschrieben: | Ich hänge an Level 5, wer kann helfen  |
irgendwo in diesen Fünfzehn seiten...  nein... probiers aus... nimm lieber mal den längeren weg, um Spiegel zu sparen...
_________________ "Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 01.06.05 13:29
sehr geiles spiel
der einzige wermutstropfen ist, dass wenn man ein "item" vom spielfeld wegnimmt, die entsprechende sparte in der itembox nicht automatisch markiert wird.
z.b. in der itembox ist ein winkel markiert, ich klicke auf einen 2fach teiler auf dem spielfeld um diesen wegzunehmen. nun will ich ihn wo anders wieder abstellen, es kommt aber ein winkel. intuitiver wäre es, wenn nun automatisch der 2-fach teiler markiert wäre.
interessant wäre auch ne englische version, für den rest der welt...
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
|