Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
08.09.2001, 22:46
feigling



Ich habe eine kleine Frage:
Also, ich habe mal ein kleines Testprogramm geschrieben und das Programm erstellt aus einer vorher definierten Reihenfolge (txt-Datei) aus Einzelbildern ein großes Bild auf dem Formular (ne andere Erklärung fällt mir jetzt nicht ein). Das soll dann mal ein Level darstelen. Das ist ja kein Problem, aber nun will ich, dass sich ein zweites Bild (pacman) dann an bestimmten Stellen des großen Bildes bewegen kann und an machen nicht, d.h. wenn eine Wand vor ihm ist, dann bleibt er vor der Wand stehen und wenn freies Feld ist, dann kann er auf dieses Feld (Ich hoffe, dass das hier jemand versteht :). Also eine Art Kollisionsdetektor, wenn man das so nennen darf.
Ich weiß nicht, wie ich es bwschreiben soll.
Also, wenn dieser gelbe Kreis auf ein Feld springen will, wo eine Mauer ist, dann soll er nicht dahin können, sondern davor stehen bleiben.
Zur Verdeutlichung habe ich hier mal den Source und die exe.
Ich will eigentlich nur, dass der gelbe Kreis nicht über die Mauern kommt -> ganz einfache Erklärung.

Vielleicht hat mich ja jemand verstanden :)

Source

Exe

Vielen Dank schonmal im Vorraus.

--

zum Seitenanfang zum Seitenende Profil || Suche
001
08.09.2001, 23:43
tommsch



ich kann leider ken delphi (und mitn downloadn klappts bei mir auch leider nicht)
ich würd aber sagn du machst zuerst ein zweidimensionales feld und "schreibts" da dein level rein
bevor du dann deinen pacman bewegst prüfst du ob das feld vor dir begehbar is oder nicht (am bestn mit einem if-else ding)
Du könntest auch die information direkt vom bildschirm holn, weiß aber nicht o das geht in delphi)

--

"Wenn schon Sklave, dann überzeugter Sklave" - Steindl über techn. Zeichner


Dieser Beitrag wurde am 08.09.2001 um 23:44 von tommsch bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
09.09.2001, 01:15
Buran



ich habe sowas mal in pascal gemacht, delphi is ja ähnlich. damals habe ich ein 2dimensionales array benutzt um die koordinaten auf dem bildschirm zu bestimmen und habe jeweils jedem array entweder 1 oder 0 zugewiesen, 1 = wand, 0 = begehbar. danach musste nur noch jedesmal wenn man ein zu machen wollte geprüft werden ob das feld dort frei(0) oder verspert(1) war.
In delphi kannst du das fast 1:1 umsetzen nur die ausgabe ist natürlich umfangreicher.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
09.09.2001, 15:33
feigling



hmm ich muss mal gucken, ob ich diese Tipps einsetzen kann. Aber das Problem ist ja, dass in einer Textdatei steht, ob dort an der Stelle ne Wand ist oder nix und dementsprechend das dann auf den Bildschirm bringt und das Programm soll automatisch erkennen, ob das nächste eine Mauer ist, wo man nicht langlaufen kann. Da bringt mir das array nichts. Das muss der irgendwie automatisch machen.

Aber um zu verstehen, wie ich das meine, muss man sich den Source angucken. Also bei nmir geht der, aber ich weiß nicht, ob ihr den downloaden könnt :(

--


Dieser Beitrag wurde am 09.09.2001 um 15:35 von feigling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
09.09.2001, 15:53
Retro



Ich kann ihn nicht saugen, sonst könnte ich dir bestimmt helfen! :(

Wie schaut den die Textfile aus?Quellcode:HHHHHHHHHHHHHHHH
H==============H
H===HHHHHHHH===H
H===HHHHHHHH===H
H===HHHHHHHH===H
H===HHHHHHHH===H
H==============H
HHHHHHHHHHHHHHHH

Sowas in der art hab ich auchmal angefangen - aber darauß lässt sich doch perfekt nen Array machen?!

Wie schon gesagt Array + if wird die Lösung deines Problems sein.
Bevor sich Pacman bewegt, fragst du ab, ob er sich in die Richtung bewegen darf. Wenn ja lässt du es zu, wenn nein, wird es geblockt.

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
005
09.09.2001, 18:06
feigling



Warum könnt ihr das alle nicht runterladen ? Komisch.
Ich gucke nochmal, wie ich das lösen könnte.

Vielleicht liegt es auch daran, dass ich das falsch im Boardcode eingegeben habe. Hier also die normalen Links

Source: http://people.freenet.de/feigling4u/source.zip

Exe: http://people.freenet.de/feigling4u/exe.zip

Das müsstet ihr euch jetzt runterladen können.

P.S. Klar ist das mit dem Array nicht schlecht, aber das passt nicht so zu meinem Prog.

--


Dieser Beitrag wurde am 09.09.2001 um 18:10 von feigling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
09.09.2001, 18:19
Buran



yo genau so, und die textfile kannst du ja ganz easy in einen array einlesen,

var datei:textfile;
i,j:integer;
array:array[1..10;1..10] of string;

assignfile(datei,'was weiß ich');
reset(datei);

for i:=1 to zb10 do readln(datei,array[1;i]);

for j:=1 to 10 do begin
for i:=10 downto 1 do begin array[i;j]:=copy(array[1,j],length(array[1;j],1);
delete(array[1;j],length(array[1;j]),1);
end;
end;

end;

so ähnlich könnte man es machen, bin mir nicht sicher ob da jetzt ein denkfehler drin ist und ich habs auch nicht nachgeprüft, aber so in die richtung könnte es funzen

--

zum Seitenanfang zum Seitenende Profil || Suche
007
09.09.2001, 19:44
feigling



Ja, so in der Art habe ich das auch gemacht, wenn ich deinen Code richtig interpretiert habe. Aber ich werde mal gucken, ob ich mir meinen Code nicht ein bisschen umbaue, also dass ich dafür doch ein Array nehme.

--

zum Seitenanfang zum Seitenende Profil || Suche
008
10.09.2001, 10:50
apfelkorn



Merke dir immer: Du solltest bei der Spieleprogrammierung nie dir Daten aus dem Bildschirmspeicher holen. 1. Ist das langsamer und 2. ist es eleganter, wenn man den Bildschirmspeicher nur als Ausgabegerät nutzt und nicht als einen RAM-Ersatz

--

zum Seitenanfang zum Seitenende Profil || Suche
009
11.09.2001, 21:33
Konrad



Na, wenn ich dich richtig verstehe hast du BITMAPS und musst nun anhand der FARBE erkennen wo Pacman hindarf und wo nicht.
Dann mach halt sowas :
Quellcode:
if Bitmap.Pixels[pacman.position.x,pacman.position.y]=clblack then DontGo
else Go;

Wobei dieses pacman eine klasse sein müsste.
das die position gespeichert wird ist jedenfalls erstmal wichtig glaube ich.
Und wenn du Textdateien benutzt rate ich dir nur umzusteigen...
sieht sonst nicht aus.

--

eigentlich heisse ich [UHK]Hostage

zum Seitenanfang zum Seitenende Profil || Suche
010
11.09.2001, 21:40
feigling



Nein, so meinte ich das nicht :) Aber trotzdem danke.
Ich habe die Lösung aber auch schon gefunden. Der Thread hat sich somit schon erledigt.
Aber vielen Dank nochmal

--

zum Seitenanfang zum Seitenende Profil || Suche
011
12.09.2001, 17:24
apfelkorn



Und umbedingt umsteigen auf Bitmaps ist auch ziemlich krank. 1. Sind sie ziemlich Platzsparend, zweitens ist es einfacher neue Maps zu machen, 3. Kann man auch aus der Textdatei was schöne Bilder machen, da mann ja bei Wänden als Programmierer eine Wand zeichnen lässt und bei Freiraum einen Gang zeichnen lässt. Es ist nur eine Sache des Programmierens, welche Teilgrafik man dafür verwendet. Solltest du aber immer noch auf Bitmaps bestehen, bist du wohl in der Steinzeit des Programmierens hängengeblienen.

--

zum Seitenanfang zum Seitenende Profil || Suche
012
12.09.2001, 17:36
Konrad



hab grad verstanden was du meinst.
man hat dann also sozusagen eine "stein.bmp" welche dem zeichen "#" oder so in einer pacmanmap entspricht.
Dann kann man sich aber am besten einen array of char machen anhand dessen man kollisionsprüfung macht

--

eigentlich heisse ich [UHK]Hostage

zum Seitenanfang zum Seitenende Profil || Suche
013
12.09.2001, 21:44
feigling



@ apfel
Meintest du mich damit ?
Wenn ja, das ist alles nur ein kleines Testprogramm und wollte nurmal so ausprobieren, ob sowas funzt. Das soll kein Spiel sein. Wenn ich mal sowas mache, wird das ganz anders aussehen.

@ Konrad Ja genau, so ähnlich habe ich es dann gemacht. Ich habe diesen Tipps in einem anderen Forum bekommen und auch so, dass ich es gleich einbauen konnte.

--

zum Seitenanfang zum Seitenende Profil || Suche
014
13.09.2001, 21:03
apfelkorn



Nö, ich meinte Konrad :)

--

zum Seitenanfang zum Seitenende Profil || Suche