Autor Beitrag
AlA
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 27.02.03 16:36 
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:

ausblenden 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 user profile iconKlabautermann: Code-Tags hinzugefügt.

_________________
ala
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Do 27.02.03 17:13 
Hi,

ausblenden 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:
ausblenden Quelltext
1:
MyBlock(s14,sx14,sy14);					

oder:
ausblenden Quelltext
1:
MyBlock(s7,sx7,sy7);					


Au'revoir,
Aya

_________________
Aya
I aim for my endless dreams and I know they will come true!
AlA Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: 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
AlA Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: 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
AlA Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: 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?

_________________
ala
DaRkFiRe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: 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

ausblenden Quelltext
1:
TLabel(FindComponent('Label'+X)).Visible:=True;					

_________________
Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
AlA Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: 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.

_________________
ala
Da_Knuddelbaer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mi 12.03.03 18:38 
von den 2 beispielen die du genannt hast, habe ich aber schon beide mal programmiert :roll:
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: 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...