Autor |
Beitrag |
G-McKree
Beiträge: 178
|
Verfasst: 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
Beiträge: 70
Windows
Delphi
|
Verfasst: 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.
Beiträge: 1596
VS 2013
|
Verfasst: 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
Beiträge: 297
Suse Linux / DOS / Windows All In One ;)
D4 / D2005
|
Verfasst: Mi 22.10.03 21:34
Hier mal ein beispiel wie du sowas machen kannst :
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.
Beiträge: 1596
VS 2013
|
Verfasst: Mi 22.10.03 22:06
ich bezweifle mal stark, das man damit eine Landschaft hinbekommt, wie er sie haben will
|
|
Killmag10
Beiträge: 297
Suse Linux / DOS / Windows All In One ;)
D4 / D2005
|
Verfasst: 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.
Beiträge: 1596
VS 2013
|
Verfasst: 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
Beiträge: 297
Suse Linux / DOS / Windows All In One ;)
D4 / D2005
|
Verfasst: 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.
Beiträge: 1596
VS 2013
|
Verfasst: 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.
Beiträge: 1596
VS 2013
|
Verfasst: 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
Beiträge: 297
Suse Linux / DOS / Windows All In One ;)
D4 / D2005
|
Verfasst: 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.
Beiträge: 1596
VS 2013
|
Verfasst: 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
Beiträge: 297
Suse Linux / DOS / Windows All In One ;)
D4 / D2005
|
Verfasst: 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:
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/10) 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 10 do begin x:=x+1; y:=y+r; y:=y+(random(3)-1); if y > (form1.Height-50) then y:=y-1; if y < (50) then y:=y+1; daten.Add(inttostr(y)); form1.Canvas.MoveTo(x,y); form1.Canvas.LineTo(x,form1.Height); end; end;
end; |
_________________ Mega- inkompetente Computer- ruinierende Organisation spioniert ohne funktionierende Technik
|
|
thebe
Beiträge: 128
WinXP Home
D6 Enterprise
|
Verfasst: 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
Beiträge: 178
|
Verfasst: 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
Beiträge: 128
WinXP Home
D6 Enterprise
|
Verfasst: 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
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..10] of 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
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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:
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
|
Verfasst: 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
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..10] of 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(0, 320); 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
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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
Beiträge: 389
|
Verfasst: 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.
_________________ Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
|
|