Autor Beitrag
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 06.03.03 15:27 
Moin!

Ich möchte ein Spiel proggen, bei dem ich viele Spielfelder brauche.
Diese wollte ich durch Images darstellen, was natürlich umständlich ist, da ich dann viele Images bräuchte.

Geht das irgendwie anders?
Durch ein Array of Images?
Oder noch anders und besser?

Die Images kann ich nicht zeichnen, da sie nachher "Texturen" haben sollen ...

Thx 4 Help!
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Do 06.03.03 15:30 
nimm ein großes image und male da rein...
du kannst acuh kleinere Bilder darin Positionieren ->CopyRect
Was für ein Spiel soll es denn sein??
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 06.03.03 15:38 
Ich wollte meine 2 Jahre alte TurboPascal-Facharbeit aus der 9 in Delphi programmieren. Das war Schiffe versenken.

Mann, hatte ich da ein geiles Intro geproggt! *schwärm*
Hat leider nur nie geklappt, weil mein dummer Lehrer mir nicht erklären konnte wie Arrays funzen. Also hat folglich auch die Facharbeit nicht gefunzt und ich hab nur ne 2- bekommen! *grml*


PS: Kann ich mit CopyRect auch bmp- oder jpg-Dateien ein das Image kopieren?
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 06.03.03 17:20 
Jo, kann man .. jedenfalls mit bmp-Dateien! :wink:

Aber im Spiel müsste man auch auf diese Grafiken, die die einzelnen Spielfelder darstellen, klicken können. Geht das auch, wenn ich sie auf ein großes Imgae zeichne? Klar, mit Mauspositionsabfrage, aber geht adas auch eleganter?
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 09.03.03 00:29 
also du erstllt ein array mit allen Pos denn gibt du an in einer Image komponenten aus.
am besten währe für sowas DelphiX;)

_________________
MFG
Michael Springwald, "kann kein englisch...."
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 09.03.03 00:34 
D0P3 F!$H hat folgendes geschrieben:
Geht das auch, wenn ich sie auf ein großes Imgae zeichne? Klar, mit Mauspositionsabfrage, aber geht adas auch eleganter?

Ich finde das ist zwar nicht sehr elegant, aber du musst andererseits ja auch nur einmal von den Mauskoordinaten in deine Spielfelddaten "umrechnen"...
das geht doch eigentlich noch ganz gut
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 09.03.03 00:48 
kommt darauf an, was du genau machen willst und wie du es machen willst. also ob nur mit delphi oder mit delphix oder oder oder

_________________
MFG
Michael Springwald, "kann kein englisch...."
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 09.03.03 10:17 
Also ich kenn nur Delphi. DelphiX ist doch DirectX unter Delphi oder so?

Also auf jeden Fall in Delphi (da kenn ich mich grad noch so aus ^^)!
Ich will ja "Schiffe versenken" proggen. Wen ich dort dann auf ein Spielfeld klicke (angenommen ich machs mit nem Array of TImages), dann muss ich halt errechnen, auf welchem Feld ich bin (das ist nicht llzu schwer, da weiss ich wies geht) und das Bild des entsprechendes Feldes ändern über Array[x, y].Picture.LoadFromFile('Bildname.bmp').
Crosskiller
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 09.03.03 17:03 
hi!
also wenn auf einen in delphi bereits integrierten gerätekontext, dann in eine paintbox! (das puffern und flippen nicht vergessen!)
dein spielfeld machst du am besten in einen eigenen typ, der eine matrix beinhaltet wiederum eines typs (z.b. Ttile)

das würde folgendermaßen aussehen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Type Ttile = record
   BildIndex:byte;
   Tag1,Tag2,Tag3,Tag4,Tag5:boolean;
end;

Type Tkarte = record
   Tilematrix:array[0..50] of array[0..50] of Ttile
end;

var karte:Tkarte;


Um speicher zu sparen wird das bild jedes einzelnen tiles natürlich nicht gespeichert, jeder der soetwas macht ist ein verbrecher, weil der den benutzern speicher stiehlt!! :) gespeichert wird NUR der index des bildes in EINEM byte!
gezeichnet wird in einem großen doppelloop einmal für X einmal für Y! ich geh mal aus faulheit von einer nicht-perspektivischen sicht aus. isometrische sicht ist mit ein bisschen hirnschmalz aber auch garnicht weit weg davon:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var LoopX,LoopY:integer;
begin
      for loopY := 0 to 50 do
         for LoopX := 0 to 50 do
         begin
         case karte[loopx,loopy].tilematrix.bildindex of
         1: Hauptcanvas.draw(LoopX*BILDBREITE,loopY*BILDHÖHE,Bild1.picture.graphic);
         2: Hauptcanvas.draw(LoopX*BILDBREITE,loopY*BILDHÖHE,Bild2.picture.graphic);
         3: Hauptcanvas.draw(LoopX*BILDBREITE,loopY*BILDHÖHE,Bild3.picture.graphic);
         end;
         end;
end;


ich denke das is leicht zu verstehen, habs jetzt aber hier nur schnell reigepfeffert, weis nicht obs fehlerfrei ist :)

viel glück und plz programmiert sauber und speichersparend!
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 09.03.03 18:15 
OK! schiffe versenken wird nicht so schwer sein
also so würde ich vorgehen:
1. Gitte zeichnen
2. Schiffe zeichnen
3. Ki erstellen
4. Fertig....
mit delphix ist das viel einfacher;)

_________________
MFG
Michael Springwald, "kann kein englisch...."
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 09.03.03 18:15 
:shock: :shock: :shock:

Äh, also ich versteh beim ersten Durchlesen nix!
Aber ich werd mal schauen, ob ichs noch schnalle.

Ich hab mal bei mir einen Versuch für das Spielfeld gestartet:

ausblenden 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:
var Feld: TBitmap;

procedure TForm1.FormCreate(Sender: TObject);
var x, y: Integer;
begin
  for x:= 0 to 9 do begin
   for y:= 0 to 9 do begin
    Feld := TBitmap.Create;
    Feld.LoadFromFile('Test.bmp');
    Image1.Canvas.CopyRect(Rect(x * 22, y * 22, x * 22 + 20, y * 22 + 20), Feld.Canvas, Rect(0, 0, 20, 20));
    Feld.Free;
   end;
  end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var FeldX, FeldY: Integer;
begin
  FeldX := X div 22;
  FeldY := Y div 22;
  Feld := TBitmap.Create;
  Feld.LoadFromFile('Test2.bmp');
  Image1.Canvas.CopyRect(Rect(FeldX * 22, FeldY * 22, FeldX * 22 + 20, FeldY * 22 + 20), Feld.Canvas, Rect(0, 0, 20, 20));
  Feld.Free;
end;


Klappt auch so weit und ich versteh das auch! ^^
Also das ist sowas in der Art was wir nie in der Schule lernen werden, was ich aber (selbst beigebracht) verstehe.
Aber das ist wohl nicht sehr speicherfreundlich, woll !? :wink:
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 09.03.03 18:19 
also 1.
du solltes vileicht nicht in den for schleifen.
ausblenden Quelltext
1:
Feld := TBitmap.Create;					

schreiben.
auch das Free ist an falscher stelle.
mehr ist mir noch nicht aufgefallen;)
also ich habe da auf meiner seite ein Snake tutor lis es dir doch mal durch....

_________________
MFG
Michael Springwald, "kann kein englisch...."
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 09.03.03 18:40 
Hab ich gemacht und die Befehle vor die for-Schleifen gepackt.

Das Tut hab ich mir auchmal angeschaut, aber so ganz versteh ichs noch nicht.
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 09.03.03 18:50 
du musst beide Tutors durchlesen

_________________
MFG
Michael Springwald, "kann kein englisch...."
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 09.03.03 19:15 
:oops: Natürlich übersehen das 2. Tut, aber mit DelphiX wollte ich das eh nicht machen, da ich das Prog auch in der Schule testen wollte und dort können/dürfen wir nichts installieren.
Crosskiller
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 11.03.03 19:02 
jo, wie willst du jetzt aber deine map speichern, dopefish?
- eben genau dazu brauchst du die matrix die ich oben deklariert hatte. aja: Tbitmap.create /.free /.loadfromfile ausserhalb der schleife, und in einen try finally block.

die ganze schleife in einen timer oder einen gameloop-thread erstellen (...oder OnIdle) und bei click nur den wert des tiles in der matrix änder, das zeichnen übernimmt dann der loop.
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 11.03.03 19:39 
Wie meine Map speichern? :?

Ich wollte nix speichern.
Die Felder, auf denen die Schiffe stehen, wollte ich in einem Array speichern lassen.

Aber könntest du mal genauer und ausführlicher (4 Dummies) erklären, was du meinst. Ich hab keine Ahnung wovon du sprichst. :oops:
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Di 11.03.03 21:20 
ich glaube er meint sowas:
ausblenden Quelltext
1:
karte:array[0..MapX,0..MapY] of TKarte					

;)
habt ihr kein DirecX bei euch in der schule ?
kann ich mir nicht vorstellen, DX 5 bzw 7 habt ihr sichelich;)
mit Puren delphi ist das schon etwas schwera....

_________________
MFG
Michael Springwald, "kann kein englisch...."
Crosskiller
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 11.03.03 23:27 
Zitat:
mit Puren delphi ist das schon etwas schwera....

so ein quatsch :?
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Di 11.03.03 23:50 
nein kein quatsch, es ist mit puren delphi schwere als in DX, aber wenn man es einmal kann dann kann man es ;)

_________________
MFG
Michael Springwald, "kann kein englisch...."
Ist die Frage beantwortet? Das Problem gelöst?

Dann klicke hier, um das Thema entsprechend zu markieren!