Autor Beitrag
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Mi 02.02.05 17:00 
suchanregungSuche in: Delphi-Forum, Delphi-Library COPYRECT

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 02.02.05 17:06 
da finde ich aber nichts darüber :gruebel:

wie mach ich das und wie das mit dem array ?

hätte zu gerne mal n code beispiel
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Mi 02.02.05 17:14 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
board: array[0..29of array[0..29of integer;

...
//draw
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]*100, 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 :mrgreen:

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 02.02.05 19:31 
gute idee ich hatte auch keine lust 15 seiten zu lesen :lol:
Phantom1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 390



BeitragVerfasst: 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 :roll:
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 02.02.05 20:02 
ist da kein oop drinne ?
JiimmyC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 35

WinXP SP1

BeitragVerfasst: Mi 02.02.05 21:36 
Klasse Spiel! :thumbsup:

_________________
Information in this online help system is subject to change without notice.
Phantom1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 390



BeitragVerfasst: 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 :wink: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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)
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  i: integer;
  player: boolean;
  fields: array[1..9of integer;
  able: array[1..9of 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

ausblenden Delphi-Quelltext
1:
fields: array of array of integer;					


müsste es doch gehen oder und was ist mit diagonalen kombinationen ?
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ausblenden Quelltext
1:
1 2 3					


3D Array (also array of array)
ausblenden Quelltext
1:
2:
3:
1 2 3
1 2 3
1 2 3

ein array aus dem obigen array halt aber wie frage ich das am besten ab, auch mit diagonalen usw ?
adler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 511

Windows XP
Delphi 05 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: 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... :roll: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 01.06.05 13:29 
sehr geiles spiel :D

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...