Autor Beitrag
Pyr0cracker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 164

Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
BeitragVerfasst: Mi 26.03.03 15:32 
Hallo, ich bin dabei ein kleines Spiel(strategie-ähnlich, von oben) zumachen, weiss aber nicht wie ich scrollen kann.
nehme delphix.
kann mir jemand weiterhelfen? vielleicht kennt ihr ja auch ein gutes tutorial.

ciao,
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 26.03.03 17:14 
Yo...is kein prob.

Du must einfach alle sprites, der map, in ein übergeordnetes sprite packen. Dann musst du nurnoch das eine sprite bewegen und alle anderen laufen mit.
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 29.03.03 21:17 
sprints würde ich nicht nehmen: veraltet und zu langsam.
ich habe mal ein spiel angefagen , das kannst du scrollen und hast vor die eine map und hast ein rader.... wenn du willst kann ich dir es mal senden.
Es ist aber kein "strategie spiel" ......
und wo hast du jetzt dein problem ???

_________________
MFG
Michael Springwald, "kann kein englisch...."
Pyr0cracker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 164

Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
BeitragVerfasst: Fr 06.06.03 17:19 
Alle Sprites in ein großes... hä?

@mimi: JAA, bitte schicks mir mal ([url=mailto:doriannagel@lycos.de]doriannagel@lycos.de[/url])
Darf ich das mit dem Radar abgucken? (natürlich nicht c&p) :)

Gruß
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Fr 06.06.03 18:32 
Wie hast du denn deine Karte aufgebaut?

Wenn du z.B. ein Array, nennen wird es map hast (m : array[1..100,1..100] of irgendwas und der Ausschnitt, der auf dem Bildschirm gezeichnet wird 30 x 30 Karteneinheiten groß ist, kannst du es so machen:

Zeichnen der Karte:

(Postition im Kartenausschnitt (oben, links: integer))

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
for x := 1 to 30 do
  for y := 1 to 30 do
  begin
     "zeichenbefehl" map[x+oben, y+links]
  end;

dxdraw.flip;


Diese (natürlich mit dem korrektem Zeichenbefehl) Procedure kann dann in eine OnTimer funktion eingebaut werden.

Wenn du jetzt "oben", oder/und "links" veränderst, scrollst du den Bildschirm. Dann mußt du noch entsprechende "Kollisionsabfragen" einbauen.
Pyr0cracker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 164

Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
BeitragVerfasst: So 08.06.03 00:15 
Hmm, mit Arrays kenne ich mich leider gar nicht aus. :oops:
Aber das mit dem Scrollen versteh ich. Glaub ich ;).

@mimi: Danke! Is ja ne ganze Menge Soßen-code :) aber ich werds mir mal angucken
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: So 08.06.03 14:01 
Arrays sind ganz einfach.

Arrays sind einfach eine Kette won gleichartigen Variabelen eines jeden Types. Jedes Glied dieser Kette ist von 0 bis x nummriert.

Diese Kette nennt man 1-Dimensionales Array.

ausblenden Quelltext
1:
2:
3:
4:
var daten: array[1..200] of integer;
....

daten[0] := 1;  {dem Kettenglied Nr. 0 wird ein Wert zugewisen. In dem Fall ein Integerwert, weil das array so definiert worden ist}



Zweidimensionales Array:

ausblenden Quelltext
1:
2:
3:
4:
5:
var daten: array[1..200,1..200] of Integer;

...

daten[0,5] := 1; {dem Kettengewebeglied x=0 und y = 0 (wie bei einer Tabelle) wird ein Integerwert zugeordnet}


Ich hoffe das ist ein Einstieg für Dich in Arrays.

Gruß Umpani

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
Elayla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: So 08.06.03 14:17 
Genau, stell die ein Array wie einen Karteikasten vor in dem Daten gespeichert werden.
Ein zweidimensionales Array kann man gut mit einem Schachbrett vergleichen oder einem Koordinatensystem.
Es gibt eine x-Koordinate A : Array[x..x2,...] of String
und eine y.Koordinate A : Array[...,y..y2] of String

Um auf ein Array zuzugreifen musst du folgendes schreiben:
(Beispiel)

edit1.text:= A[x]; x ist die Position im Array

oder zweidimensional:

edit1.text:= A[x,y];

und schreiben geht so:

A[x]:='text';

oder zweidimensional:

A[x,y]:='text'

Das müsste hoffentlich gereicht haben als Einführung :)
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 08.06.03 18:05 
es gibt zu array auch ein tutrial(was mir bei einem projekt übrings sehr geholfen hat:), obwolh nicht schon mit array umgehen konnte)

ist mein erste versuch gewesen sowas wie scrollen hinzubekommen.
im grunde mache ich dort folgendes:
ich definiere einen 2D array mit einer bestimmten größe
das sicht fehlt ist immer 640 X 480 pixel aber der arrray hatte glaube ich eine größe von 1024 X 764 oder so. und dann musst du nur nuch rechnen und das war das einfachste:)
wenn man einmal rauß hat wie das geht ist der rest einfach

die minkarte funktioniert so:
ich nehme einfach kleiner grafiken und zeichne die karte vom selben array und fertig.

@Pyr0cracker
und hast du den code verstanden ?

edit:
Zitat:

Aber das mit dem Scrollen versteh ich. Glaub ich

wie das denn wenn du dich nicht mit array auskennst ?

_________________
MFG
Michael Springwald, "kann kein englisch...."
Pyr0cracker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 164

Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
BeitragVerfasst: So 08.06.03 19:12 
Okay, jetzt hab ich das mit den Arrays verstanden. Aber wie baut man daraus jetzt eine Karte?

hab mal nen scroll probiert aber map is nur 1 grafik (hier
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: So 08.06.03 19:36 
Habe mir mal deinen Quelltext angeschaut.

Hier habe ich zunächst mal ein paar Anmerkungen allgemeiner Art.

1. Dein Spiel soll doch ein Strategiespiel werden. Da ist es nicht so sinvoll eine Karte zu haben, die sich aus nur einem Bitmap zusammensetzt.

2. Du hast eine Figur (soll man nur eine Figur steuern können?), die man mit der Tastatur steuert. Wenn man die Figur bewegt, bewegt sich eigentlich nur der Hintergrund und die Figur.

Zu 1.

Hier kommt der Array inst Spiel.
Du zwerfledderst dein Hintergrundbild in kleine Quadrate. z.B in 50x50 pix Grösse
Wenn man jetzt der Einfachheit halber davon ausgeht "1" ist Wiesenquadrat und "0" ist strassenquadrat dan wäre das:


1111011111
1111011111
1111011111
1111011111
1111011111
1111011111

eine Strasse durch eine Wiese von Oben nach unten.

"0" und "1" hast du in einer Imagelist (bildliste) bei den Positionen 0 und 1.
Das Karten array ist map: array[1..10,1..6] of integer;




ausblenden Quelltext
1:
2:
3:
4:
5:
6:
for x := 1 to 10 do 
  for y := 1 to 6 do 
  begin 
     bildliste.items[map[x,y]].draw(dx.surface,x*50,y*50,0);{*50 wegen der Pixelgröße der Bilder}
  end; 
dx.flip;

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 08.06.03 20:46 
ich denke er hat mein spiel nicht verstanden sonst hätte er das so gemacht:)
ich weiß der qullcode ist nicht umbeding der sauberste :(

_________________
MFG
Michael Springwald, "kann kein englisch...."
Pyr0cracker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 164

Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
BeitragVerfasst: Mo 09.06.03 03:43 
Hallo, DANKE für die guten Tips.
Ich hab jetzt ein 2 dimensionales Array für eine Karte in meinem Spiel
ausblenden Quelltext
1:
2:
var
   map: array[0..10, 0..10] of integer;

Ich kann sie auch abfrageen
ausblenden Quelltext
1:
2:
3:
4:
5:
for mapx := 0 to 10 do
   for mapy := 0 to 10 do
   begin
      BodenTex.Items[map[mapx,mapy]].draw(dx.surface,mapx*50,mapy*50,0);{*50 wegen der Pixelgröße der Bilder}
   end;

Aber wie kann ich diesem Array übersichtlich Werte zuweisen? (in der OH stehts nicht drinn...)
z.B für:
ausblenden Quelltext
1:
2:
3:
010
010
010

(z.B. 0=boden, 1=wand)
Ich meine...
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
map[1,1] := 0;
map[1,2] := 0;
map[1,3] := 0;

map[2,1] := 1;
map[2,2] := 1;
map[2,3] := 1;

map[3,1] := 0;
map[3,2] := 0;
map[3,3] := 0;

...ist doch ein bisschen umständlich oder?

Gruß
Elayla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mo 09.06.03 09:32 
Machs so, so hab ich es bei mir auch :)

Zitat:

Randomize;
For x:=1 To 48 Do
For y:=1 To 36 Do
Begin
Map[x,y]:=random(3)+1;
End;
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Mo 09.06.03 10:08 
Im prinzip musst du ein zweites Programm schreiben. Einen Map-Editor.

In deinem fall tut es ein 10x10 großes Stringrid.

Ganz einfaches Beispiel.

Erstelle ein Stringgrid 10x10 ohne fixedrows und fixedcols: grid
Erstelle ein eingabefeld: eingabe
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
Ereignis inclick bei grid

begin
   map[grid.row+1,grid.col+1] := strtoint(eingabe.text); {array wird gefüllt}
  grid.cells[grid.row+1,grid.col+1]:= strtoint(eingabe.text); {grid wird gefüllt}
end;


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Speichern des Arrays
procedure save;
var dat: file of tmap; {Typ tmap = array[1..10,1..10] of integer;}
begin
  assignfile(dat,'map.dat');
  rewrite(dat);
  write(dat,map);
  closefile(dat);
end;


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Laden des Arrays
procedure save;
var dat: file of tmap; {Typ tmap = array[1..10,1..10] of integer;}
begin
  assignfile(dat,'map.dat');
  reset(dat);
  read(dat,map);
  closefile(dat);
end;

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
Elayla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mo 09.06.03 11:00 
Hmm stimmt, deins basiert ja nicht auf Zufallszahlen, sry :)
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mo 09.06.03 12:48 
Hi,

Pyr0cracker hat folgendes geschrieben:
Aber wie kann ich diesem Array übersichtlich Werte zuweisen? (in der OH stehts nicht drinn...)
z.B für:
ausblenden Quelltext
1:
2:
3:
010
010
010

(z.B. 0=boden, 1=wand)
Ich meine...
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
map[1,1] := 0;
map[1,2] := 0;
map[1,3] := 0;

map[2,1] := 1;
map[2,2] := 1;
map[2,3] := 1;

map[3,1] := 0;
map[3,2] := 0;
map[3,3] := 0;

...ist doch ein bisschen umständlich oder?

Gruß


benutz einfach Constanten ;)

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
const
  TYP_WIESE = 0;
  TYP_STRASSE = 1;
[...]
map[1,1] := TYP_WIESE;
map[1,2] := TYP_WIESE;
map[1,3] := TYP_WIESE;

map[2,1] := TYP_STRASSE;
map[2,2] := TYP_STRASSE;
map[2,3] := TYP_STRASSE;

map[3,1] := TYP_WIESE;
map[3,2] := TYP_WIESE;
map[3,3] := TYP_WIESE;


Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mo 09.06.03 15:36 
nimm ein record und speichere da die werte rein ein level editor brauchst du nicht umbedingt

_________________
MFG
Michael Springwald, "kann kein englisch...."
Elayla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mo 09.06.03 16:46 
Ich hab das als Array gemacht und geht auch alles super, sogar das scrollen.
Aber wenn ich per Mauskoordinaten scrolle baut der jedesmal das Feld komplett neu auf, halt in die jeweilige Richtung verrückt.
Aber das ist recht langsam je kleiner die Felder werden und je mehr ich Anzeige.
Gibts ne Möglichkeit das besser zu machen und gibts ne Möglichkeit trotz 16x12 Fenster (jedes Feld hat 40x40 px) das Scrollen "Stufenlos" zu machen, also das ich nicht jedesmal um 40px "verschieben" muss?
Ein nahezu Stufenloses Scrollen mit 5px (trotz 40x40 Feldern) oder so wär genial :)
(Aber ich denke da brauch ich ne schnellere Bildaufbaumethode, bis jetzt rufe ich jedesmal ne Prozedur auf die DXDraw komplett neu aufbaut)

Hier mal der Link zum Programm wie es bisher ist, aber damit bin ich nicht wirklich zufrieden, sieht halt doof aus beim scrollen :?
www.pro3d.de/gonozal/Map-Creator.zip


Zuletzt bearbeitet von Elayla am Mo 09.06.03 17:09, insgesamt 1-mal bearbeitet
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mo 09.06.03 17:04 
mit record meinte ich das so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  TMap = record
     visible, enabled:Bool;
      Typ, Tex: Integer; 
   end;


du muss doch nur schauen wo dein player steht und dann die fehlder entwerder +1 vor bzw. in die gewüntsche richtig scollren oder um 40 einheiten vorscrollen und fertig:)

_________________
MFG
Michael Springwald, "kann kein englisch...."