Entwickler-Ecke
Multimedia / Grafik - Brauche Hilfe bei einem Spiel
AlA - Do 27.02.03 16:36
Titel: Brauche Hilfe bei einem Spiel
Ich programmiere gerade ein Spiel bei dem man
ein kleines Raumschiff steuert und verschiedene
Waffensysteme hat (Kann bei Interesse mehr erzälen).
Das Spiel ist als Multiplayerspiel angelegt.
Aber nun zu meinem Problem:
Wegen der Bewegungsabläufe wiederholen sich bestimmte
Anweisungsblöcke, wie z.B:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| if s14 = 9 then begin sx14:=sx14+0*3;sy14:=sy14+2*3; end; if s14 = 10 then begin sx14:=sx14+1*3;sy14:=sy14+2*3; end; if s14 = 11 then begin sx14:=sx14+1*3;sy14:=sy14+1*3; end; if s14 = 12 then begin sx14:=sx14+2*3;sy14:=sy14+1*3; end; if s14 = 13 then begin sx14:=sx14+2*3;sy14:=sy14+0*3; end; if s14 = 14 then begin sx14:=sx14+2*3;sy14:=sy14-1*3; end; if s14 = 15 then begin sx14:=sx14+1*3;sy14:=sy14-1*3; end; if s14 = 16 then begin sx14:=sx14+1*3;sy14:=sy14-2*3; end; if s14 = 1 then begin sx14:=sx14-0*3;sy14:=sy14-2*3; end; if s14 = 2 then begin sx14:=sx14-1*3;sy14:=sy14-2*3; end; if s14 = 3 then begin sx14:=sx14-1*3;sy14:=sy14-1*3; end; if s14 = 4 then begin sx14:=sx14-2*3;sy14:=sy14-1*3; end; if s14 = 5 then begin sx14:=sx14-2*3;sy14:=sy14+0*3; end; if s14 = 6 then begin sx14:=sx14-2*3;sy14:=sy14+1*3; end; if s14 = 7 then begin sx14:=sx14-1*3;sy14:=sy14+1*3; end; if s14 = 8 then begin sx14:=sx14-1*3;sy14:=sy14+2*3; end; |
usw.
Solche Blöcke kommen sehr oft vor und unterscheiden sich
nur durch die Variablen (s14, sx ...)bei einem anderen Block(s15,sx1...)
Gibt es eine Möglichkeit diesen Block einmal zu definieren
und dann mehrmals, bloß von verschiedenen
Variablen abhängig, laufen zu lassen?
Ala
Moderiert von
Klabautermann: Code-Tags hinzugefügt.
Aya - Do 27.02.03 17:13
Hi,
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure MyBlock(Var s, sx, sy: Single); begin if s = 9 then begin sx:=sx+0*3;sy:=sy+2*3; end; if s = 10 then begin sx:=sx+1*3;sy:=sy+2*3; end; if s = 11 then begin sx:=sx+1*3;sy:=sy+1*3; end; if s = 12 then begin sx:=sx+2*3;sy:=sy+1*3; end; if s = 13 then begin sx:=sx+2*3;sy:=sy+0*3; end; if s = 14 then begin sx:=sx+2*3;sy:=sy-1*3; end; if s = 15 then begin sx:=sx+1*3;sy:=sy-1*3; end; if s = 16 then begin sx:=sx+1*3;sy:=sy-2*3; end; if s = 1 then begin sx:=sx-0*3;sy:=sy-2*3; end; if s = 2 then begin sx:=sx-1*3;sy:=sy-2*3; end; if s = 3 then begin sx:=sx-1*3;sy:=sy-1*3; end; if s = 4 then begin sx:=sx-2*3;sy:=sy-1*3; end; if s = 5 then begin sx:=sx-2*3;sy:=sy+0*3; end; if s = 6 then begin sx:=sx-2*3;sy:=sy+1*3; end; if s = 7 then begin sx:=sx-1*3;sy:=sy+1*3; end; if s = 8 then begin sx:=sx-1*3;sy:=sy+2*3; end; end; |
Aufrufen tust du's dann so:
Quelltext
1:
| MyBlock(s14,sx14,sy14); |
oder:
Au'revoir,
Aya
AlA - Do 27.02.03 18:57
Titel: Danke
Danke,Danke
Habe noch ein Paar kleinere Probleme
1.Steuerung:
Die Steuerung erfolgt bei mir über
onkeypress und onkeydown über
case key of
vk_left : ....
vk_right : ....
usw.
Leider kann Delphi nur immer eine Taste
aufeinmal bearbeiten.
Wie kann ich das beheben?(z.B. Gleichzeitiges
bearbeiten von gedrückter Schusstaste und gedrückter Steuerungstaste)
2.Wie kann ich ohne direkt den Timer zu benutzen
gif-Animationen wiedergeben?(Image-List)
3.Kann ich als Hintergrundmusik z.B.
eine MP3 abspielen lassen?
AlA - Do 27.02.03 19:37
Titel: Es klappt nicht
Hab es gerade versucht mit MyBlock, und es hat leider
nicht funktioniert,
[Error] Unit1.pas(15): Unsatisfied forward or external declaration: 'TForm1.MyBlock'
[Error] Unit1.pas(42): Types of actual and formal var parameters must be identical
sind die Fehlermeldungen.
ich habe die procedure aber selbst in den
Quelltext hineiengeschrieben(vielleicht liegts daran).
Kann jemand vielleicht einen Quelltext schicken?
Oder Programm?
AlA - Do 27.02.03 21:49
Titel: Es funktioniert
Das mit dem MyBlock funktioniert nun bestens.
Kann ich z.B. auch
procedure (var x : char);
begin
Labelx.visible:=true;
end;
machen?????????????????????????
Noch klappt es nicht.
Ich schaffe es nicht, dass Delphi
das x als Variable ansieht!!!
Hat jemand eine Ahmumg wie man das
bewältigen kann?
DaRkFiRe - Do 27.02.03 22:12
Nein das geht nicht, man kann generell nicht durch Aneinanderreihen von Zeichen neue variable Variablennamen definieren. Das hat weder Sinn, noch mag es der Compiler.
Versuch's mal mit
Quelltext
1:
| TLabel(FindComponent('Label'+X)).Visible:=True; |
AlA - Fr 28.02.03 19:13
Titel: Es hat durchaus einen Sinn
Mein Problem ist der zu lange Quelltext( 800 Zeilen),
TLabel(FindComponent('Label'+X)).Visible:=True;
ist wirkungsvoll, aber ich weis nicht genau wie
ich das als eine von Variablen abhängige Funktion
definieren kann.
Mir ist es wichtig die Prozedur:
if (d11 < 4) then begin
k:=k+1;energie2:=energie2-15;sx11:=x1;sy11:=y1;schus1:=false;schuss11.visible:=false;
end;
if (d12 < 4) then begin
k:=k+1;energie2:=energie2-15;sx12:=x1;sy12:=y1;schus2:=false;schuss12.visible:=false;
end;
if (d13 < 4) then begin
k:=k+1;energie2:=energie2-15;sx13:=x1;sy13:=y1;schus3:=false;schuss13.visible:=false;
end;
nur einmal zu definieren und dann abzurufen.
Das Problem besteht da z.B. in
der Image mit dem Namen schuss13!!!!
Ich würde das gern auch von Variablen abhängig machen.
Beim Abrufen der Funktion sollte dann
dieses ('Schuss' + XX) dann von der Variable XX
mit dem Wert(z.B. 13) abgerufen werden können!!!!!
Wenn jemand weis wie es geht bitte reischreiben.
Da_Knuddelbaer - Fr 28.02.03 21:13
Hmm, das mit den Variablen wie d11, sx11 etc. wird nicht so leicht zum suchen. Ansonsten hier mal ein vielleicht etwas nützlicher Anfang:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Baum(dvar, sxvar, syvar, X: Integer); begin If (dvar < 4) then begin inc(k); dec(energie,15); sxvar:=x1; syvar:=y1; schus1:=false; TImage(FindComponent('schuss'+X)).Visible:=false; end; end; |
Aufrufen tuste dann per Baum(d11,sx11,sy11,11);
Knuddelbaer
Affje - Mi 12.03.03 17:31
hi
ich kann zwar leider nicht weiterhelfen, aber mich würde folgendes interresieren: ich bin ziemlich neuling und habe erst ein visitenkarten-programm erstellt. ihr macht spiele, die sich super anhören. wie schafft ihr das, habt ihr informatik studiert?????
Raphael O. - Mi 12.03.03 17:45
EDIT: Mach am besten für sowas nen neuen Thread auf!!
ich denke, hier hat kaum einer/ keiner Informatik studiert...
wir sind alle nur Hobby-Progger ;)
am besten fängst du mit einem leichten Programm an:
da wäre zum Bsp. das Label autorennen aus der Freeware-Section ein gutes Bsp ;)
sonst wäre z.B. noch ein Programm möglich, wo der Computer eine zufällige Zahl wählt und du dann die Zahl raten musst...
es kommt dann immer ne Meldung, ob deine Zahl zu groß oder zu klein ist
am besten solltest du aber schon ein paar Grundlagen beherrschen, wenn du dich an ein Spiel drangibst...
aber probieren kostet ja nichts und fragen kannste ja hier im Forum...
Affje - Mi 12.03.03 18:38
von den 2 beispielen die du genannt hast, habe ich aber schon beide mal programmiert :roll:
Raphael O. - Mi 12.03.03 19:19
| Zitat: |
| ich bin ziemlich neuling und habe erst ein visitenkarten-programm erstellt |
| Zitat: |
| von den 2 beispielen die du genannt hast, habe ich aber schon beide mal programmiert |
ich dachte du hättest nur ein Visitenkartenprogramm gemacht :?:
dann such dir was schwereres...
z.B. ein "Schiebepuzzle"
oder ...
...keine Ahnung wie gut du bist ?!
...fang mit OpenGL an (3D programmierung)
such dir einfach was, dann mit der Übung kannst du acuh immer bessere Ergebnisse erzielen...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!