Autor |
Beitrag |
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: 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.
      
Beiträge: 1596
VS 2013
|
Verfasst: 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
|
Verfasst: 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
|
Verfasst: Do 06.03.03 17:20
Jo, kann man .. jedenfalls mit bmp-Dateien!
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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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.
      
Beiträge: 1596
VS 2013
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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
|
Verfasst: 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
|
Verfasst: 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:
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:
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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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
|
Verfasst: So 09.03.03 18:15
Ä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:
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 !? 
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 09.03.03 18:19
also 1.
du solltes vileicht nicht in den for schleifen.
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
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 09.03.03 18:50
du musst beide Tutors durchlesen
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: So 09.03.03 19:15
 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
|
Verfasst: 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
|
Verfasst: 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. 
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Di 11.03.03 21:20
ich glaube er meint sowas:
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
|
Verfasst: Di 11.03.03 23:27
Zitat: | mit Puren delphi ist das schon etwas schwera.... |
so ein quatsch 
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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...."
|
|