Autor Beitrag
G-McKree
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Mi 22.10.03 20:55 
Ihr kennt ja sicher alle dieses tausendmal geklonte Spiel, wo zwei oder mehr Panzer zwischen Hügeln stehen und einander beschießen. Ich hab mir gedacht, das ich das auch mal versuche. die Balistik is fast fertig und ich stehe ratolos vor dem Problem wie ich einen zufällige hügelige Landschaft generieren kann.


Zuletzt bearbeitet von G-McKree am Sa 25.10.03 10:38, insgesamt 1-mal bearbeitet
Setsuna Meio
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 70

Windows
Delphi
BeitragVerfasst: Mi 22.10.03 20:59 
Huhu,

dann poste das doch in der Multimedia-Sparte, da hilft man Dir wohl eher. =)

^^

_________________
Pluto, schicke das Feuer der Tiefe...
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mi 22.10.03 21:05 
das will ich abermal bezweifeln ;)
hast du dir da schon gedanken drüber gemacht, wie man es machen könnte??
mir ist jetzt auf die schnelle folgende möglichkeit eingefallen:
-die Hoch- und Tiefpunkte in der LAndschaft zufällig generieren und dann dadurch ne Kurve zeichnen

falls mir noch was anderes einfällt dann trage ich es natürlich noch nach...
IMO sind in manchen solcher Spiele auchd ei Karten schon gespeichert, so dass gar keine zufällig generiert werden...
Killmag10
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 297

Suse Linux / DOS / Windows All In One ;)
D4 / D2005
BeitragVerfasst: Mi 22.10.03 21:34 
Hier mal ein beispiel wie du sowas machen kannst :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);
var
r,y,x,z1,z2:integer;
begin
Randomize;
y:=random(600);
x:=0;
for z1:=0 to 30 do begin
if r<0 then r:=(random(2)-1)
else if r>0 then r:=(random(2))
else if r=0 then r:=(random(3)-1);
for z2:=0 to 20 do begin
x:=x+1;
y:=y+r;
y:=y+(random(3)-1);
form1.Canvas.MoveTo(x,y);
form1.Canvas.LineTo(x,600);
end;
end;

end;


(neuer code)

_________________
Mega-inkompetente Computer-ruinierende Organisation spioniert ohne funktionierende Technik


Zuletzt bearbeitet von Killmag10 am Mi 22.10.03 23:17, insgesamt 2-mal bearbeitet
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mi 22.10.03 22:06 
ich bezweifle mal stark, das man damit eine Landschaft hinbekommt, wie er sie haben will
Killmag10
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 297

Suse Linux / DOS / Windows All In One ;)
D4 / D2005
BeitragVerfasst: Mi 22.10.03 22:33 
Fiji-Fighter hat folgendes geschrieben:
ich bezweifle mal stark, das man damit eine Landschaft hinbekommt, wie er sie haben will


mit diesen code nicht is ja auch blos in beispiel aber wenn mann ihn ausbaut schon !

_________________
Mega-inkompetente Computer-ruinierende Organisation spioniert ohne funktionierende Technik
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mi 22.10.03 22:44 
ich sehe allerdings nicht den sinn darin einen solchen Quellcode zu posten...
man könnte z.B. auf die Funktionen MoveTo und LineTo verweisen, aber das ist es ja auch ga nicht, was er wissen will, wenn ich das richtig verstanden habe...
dein Quellcode weist folgende Mängel auf und unterscheidet sich dadurch gravierend von der eigentlichen "Aufgabenstellung":
-er zeichnet nur eine Linie und keinen "massivern" BErg
-diese Linie ist noch nicht einmal zusammenhängend
-es gibt keine wirklichen Berge...

deshalb fand ich den Quellcode etwas "unpassend"...
ist aber ja im Pribnzip auch egal, wollte aber trotzdem mal darauf hinweisen und dich in keinster Weise angreifen oder was auch immer (nur falls es sos rübergekommen sein sollte :/)
Killmag10
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 297

Suse Linux / DOS / Windows All In One ;)
D4 / D2005
BeitragVerfasst: Mi 22.10.03 22:59 
Zitat:

-er zeichnet nur eine Linie und keinen "massivern" BErg
-diese Linie ist noch nicht einmal zusammenhängend
-es gibt keine wirklichen Berge...

zu 1: wenn du meinst das es keine richtigen großen berge gib, dan sag ich nur das mann den code halt weiter ausbauen muss.

zu 2: weiso sind die nicht zusamenhängent ?

zu 3: wenn du meinst das sie datenmäsig nicht verhanden sind, is ja klar das mann das noch einbauen muss !


oder hab ich das total missverstanden wass er meind ?

mfg. Killmag10

_________________
Mega-inkompetente Computer-ruinierende Organisation spioniert ohne funktionierende Technik
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mi 22.10.03 23:13 
kannst es dir ja mal in Delphi zeichnen lassen... die Berge sind jetzt bei deinem Quellcode höchstens 3Pixel, was ich nicht als Berg bezeichnen würde...
außerdem ist es, wenn ich das richtig sehe (habe es in Delphi nicht geguckt...) keine durchgezogene linie, denn du fängst in jedem Schleifendurchlauf mit moveto auf einem anderen y-Wert an als 600 (bzw. meistens, da zufällig)
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mi 22.10.03 23:15 
habe grad gesehn, dass du nen neuen Code hast:
-der erste Teil der Schleife ist völlig unnötig/unsinnig (r verändert sich nicht und wird nicht initialisiert)
-y wird imnmer größer bzw. immer kleiner... -> IMO kein Berg
-wieder kein zusammenhängeder Strich :(
Killmag10
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 297

Suse Linux / DOS / Windows All In One ;)
D4 / D2005
BeitragVerfasst: Mi 22.10.03 23:19 
Fiji-Fighter hat folgendes geschrieben:
habe grad gesehn, dass du nen neuen Code hast:
-der erste Teil der Schleife ist völlig unnötig/unsinnig (r verändert sich nicht und wird nicht initialisiert)
-y wird imnmer größer bzw. immer kleiner... -> IMO kein Berg
-wieder kein zusammenhängeder Strich :(


hatte else vergessen

und mit den durschgehenden strich meinst du wohl das ich erst eine durschgehende line zeichnen soll und dann den bereich ausfüllen soll. richtig ?

_________________
Mega-inkompetente Computer-ruinierende Organisation spioniert ohne funktionierende Technik
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mi 22.10.03 23:30 
k, das wird doch immer besser :)
hatte doch einen denkfehler drin...
ich dachtedu würdest ne linie von links nach rechts zeichnen...
hab wohl nicht richtig hingeschaut :?

jetzt bräuchte man nur noch ne Überprüfung, ob die Werte nicht zu klein werden , damit man was sieht, und das 600 sollte man durch die "height" ersetzen...

sowas ist doch als "RumpF" für den Threadersteller wirklich brauchbar ;)

gn8

EDIT: man sollte am besten nicht vergessen r zu initialisieren ;)
Killmag10
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 297

Suse Linux / DOS / Windows All In One ;)
D4 / D2005
BeitragVerfasst: Mi 22.10.03 23:32 
Fiji-Fighter hat folgendes geschrieben:
k, das wird doch immer besser :)
hatte doch einen denkfehler drin...
ich dachtedu würdest ne linie von links nach rechts zeichnen...
hab wohl nicht richtig hingeschaut :?

jetzt bräuchte man nur noch ne Überprüfung, ob die Werte nicht zu klein werden , damit man was sieht, und das 600 sollte man durch die "height" ersetzen...

sowas ist doch als "RumpF" für den Threadersteller wirklich brauchbar ;)

gn8


jo

ich bau mal darn weiter !

gn8


edit:

hier is in neuer:

ausblenden 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:
procedure TForm1.Button1Click(Sender: TObject);
var
r,y,x,z1,z2:integer;
begin
daten.Clear;
Randomize;
y:=random(form1.Height-100)+50;
x:=0;
r:=0;
for z1:=0 to round(form1.Width/10do begin
if r<0 then r:=(random(2)-1)
else if r>0 then r:=(random(2))
else if r=0 then r:=(random(3)-1);
for z2:=0 to 10 do begin
x:=x+1;
y:=y+r;
y:=y+(random(3)-1);
if y > (form1.Height-50then y:=y-1;
if y < (50then y:=y+1;
daten.Add(inttostr(y)); //daten werden gesamelt (Tstrings)
form1.Canvas.MoveTo(x,y);
form1.Canvas.LineTo(x,form1.Height);
end;
end;

end;

_________________
Mega-inkompetente Computer-ruinierende Organisation spioniert ohne funktionierende Technik
thebe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: Do 23.10.03 01:16 
Erstell Dir einfach nen paar zufällige Sinus-Kurven mit verschiedener Amplitude, Frequenz und Phasenverschiebung und addier sie alle auf einander auf.

[EDIT]

Kommt dann sowas bei raus: www.smilitzer.com/pics/kurve.jpg

Ggf. müßtest dann noch mti den Frequenzen der Kurven rumspielen und das alles nen bisschen aufeinander abgestimmt machen, aber das könnte doch schon recht gut ausschauen.

[/EDIT]
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Do 23.10.03 20:27 
wow, thebe
das is ja richtig gut
aber wie kann ich die sinus-kurven kombinieren? (zeichnen kann ich sie mehr oder weniger)
thebe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: Do 23.10.03 20:39 
indem Du die Y-Werte der Sinus-Kurven alle aufeinander addierst


hier is nen Turbo Pascal Code dafür, sowas kleines 2D gekritzel geht damit schneller als mit Delphi ;)

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:
program terrain;

uses Crt, Dos, Graph;

type
    tCurve = packed record
           amplitude,
           frequency: single;
    end;

var
   modus, treiber: integer;
   curves: array[1..10of tCurve;
   i, x, y, ly: integer;

begin
     modus := VGAHi;
     treiber := VGA;
     InitGraph(treiber, modus, 'BGI');

     randomize;

     for i := 1 to 5 do
     begin
          curves[i].amplitude := ((random(200)+1)/10);
          curves[i].frequency := ((random(250)+150)/10);
     end;

     cleardevice;

     ly := 320;
     for x := 1 to 640 do
     begin
          y := 320;
          for i := 1 to 5 do
          begin
               <span style="font-weight: bold">y := y + trunc(sin((x / curves[i].frequency)) * curves[i].amplitude);</span>
          end;
          Line(x-1, ly, x, y);
          ly := y;
     end;

     repeat
     until keypressed;

     closegraph;
end.
[/delphi]
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 24.10.03 18:32 
ich würde das glaube ich so lösen:
- ein raster anlegen.
- verschiedne grafiken erstellen für die landschaft
und fertig.
das rastrr könnte dann so aussehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  TMyGame = record
    typ, tex, steigung: Integer;
  end;
  
   Game:array[0..maxX, 0..MaxY];

und fertig, das ist die einfachste variante würde ich mal sagen.

_________________
MFG
Michael Springwald, "kann kein englisch...."
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.10.03 18:38 
Warum versuchst du eigentlich immer alles auf Basis deines Snake-Tutorials zu lösen? ;)
wenn du dir mal dieses Bild angeguckt hättest: www.smilitzer.com/pics/kurve.jpg
Wäre dir aufgefallen dass es um etwas völlig anderes geht.

Ansonsten, hier der Code in Delphi

ausblenden 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:
type
 tCurve = packed record
                  amplitude,
                  frequency: single;
                 end;

var
 curves: array[1..10of tCurve;
 i, x, y: integer;

begin
 randomize;

 for i := 1 to 5 do
 begin
  curves[i].amplitude := ((random(200)+1)/10);
  curves[i].frequency := ((random(250)+150)/10);
 end;

 canvas.fillrect(canvas.ClipRect);

 canvas.MoveTo(0320);
 for x := 1 to 640 do
 begin
  y := 320;
  for i := 1 to 5 do
   y := y + trunc(sin((x / curves[i].frequency)) * curves[i].amplitude);
  canvas.LineTo(x, y);
 end;
end;
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 24.10.03 19:42 
ich haben nur die ersten beiträge gelesen und dort ging es um die landschafts erstellung und mit meiner metodte geht das nun mal sehr einfach.

_________________
MFG
Michael Springwald, "kann kein englisch...."
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Fr 24.10.03 19:59 
Dann hast du aber nicht bis zum dritten Post gelsen.

Es geht nicht um eine 2D-Landschaft, wie in diversen Taktik-Spiele, sondern um eine, wie in Scorch. Also nicht von oben, sondern von der Seite.

user defined image

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius