Entwickler-Ecke

Multimedia / Grafik - Verkürzung von Quelltext


AlA - Di 01.04.03 12:09
Titel: Verkürzung von Quelltext
Hallo Leute, habe wiedermal ein blödes Problem



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
    if (d11 < 6) then begin k:=k+1;  energie2:=energie2-15;messagebeep(977444);sx11:=x1;sy11:=y1;schus1 :=false;schuss11.visible:=false;expl1.Top:=(y2);expl1.Left:=(x2);expl1.visible:=true;k2:=k2+1; end;
    if (d12 < 6) then begin k:=k+1;  energie2:=energie2-15;messagebeep(977444);sx12:=x1;sy12:=y1;schus2 :=false;schuss12.visible:=false;expl2.Top:=(y2);expl2.Left:=(x2);expl2.visible:=true;k2:=k2+1; end;
    if (d13 < 6) then begin k:=k+1;  energie2:=energie2-15;messagebeep(977444);sx13:=x1;sy13:=y1;schus3 :=false;schuss13.visible:=false;expl3.Top:=(y2);expl3.Left:=(x2);expl3.visible:=true;k2:=k2+1; end;
    if (d14 < 6) then begin k:=k+1;  energie2:=energie2-15;messagebeep(977444);sx14:=x1;sy14:=y1;schus4 :=false;schuss14.visible:=false;expl4.Top:=(y2);expl4.Left:=(x2);expl4.visible:=true;k2:=k2+1; end;
    if (d15 < 6) then begin k:=k+1;  energie2:=energie2-15;messagebeep(977444);sx15:=x1;sy15:=y1;schus5 :=false;schuss15.visible:=false;expl5.Top:=(y2);expl5.Left:=(x2);expl5.visible:=true;k2:=k2+1; end;
    if (d16 < 6) then begin k:=k+1;  energie2:=energie2-15;messagebeep(977444);sx16:=x1;sy16:=y1;schus6 :=false;schuss16.visible:=false;expl6.Top:=(y2);expl6.Left:=(x2);expl6.visible:=true;k2:=k2+1; end;
    if (d17 < 6) then begin k:=k+1;  energie2:=energie2-15;messagebeep(977444);sx17:=x1;sy17:=y1;schus7 :=false;schuss17.visible:=false;expl7.Top:=(y2);expl7.Left:=(x2);expl7.visible:=true;k2:=k2+1; end;
    if (d21 < 6) then begin k1:=k1+1;energie1:=energie1-15;messagebeep(977444);sx21:=x2;sy21:=y1;schus21:=false;schuss21.visible:=false;expl11.Top:=(y1);expl11.Left:=(x1);expl11.visible:=true;k2:=k2+1; end;
    if (d22 < 6) then begin k1:=k1+1;energie1:=energie1-15;messagebeep(977444);sx22:=x2;sy22:=y1;schus22:=false;schuss22.visible:=false;expl12.Top:=(y1);expl12.Left:=(x1);expl12.visible:=true;k2:=k2+1; end;
    if (d23 < 6) then begin k1:=k1+1;energie1:=energie1-15;messagebeep(977444);sx23:=x2;sy23:=y1;schus23:=false;schuss23.visible:=false;expl13.Top:=(y1);expl13.Left:=(x1);expl13.visible:=true;k2:=k2+1; end;
    if (d24 < 6) then begin k1:=k1+1;energie1:=energie1-15;messagebeep(977444);sx24:=x2;sy24:=y1;schus24:=false;schuss24.visible:=false;expl14.Top:=(y1);expl14.Left:=(x1);expl14.visible:=true;k2:=k2+1; end;
    if (d25 < 6) then begin k1:=k1+1;energie1:=energie1-15;messagebeep(977444);sx25:=x2;sy25:=y1;schus25:=false;schuss25.visible:=false;expl15.Top:=(y1);expl15.Left:=(x1);expl15.visible:=true;k2:=k2+1; end;
    if (d26 < 6) then begin k1:=k1+1;energie1:=energie1-15;messagebeep(977444);sx26:=x2;sy26:=y1;schus26:=false;schuss26.visible:=false;expl16.Top:=(y1);expl16.Left:=(x1);expl16.visible:=true;k2:=k2+1; end;
    if (d27 < 6) then begin k1:=k1+1;energie1:=energie1-15;messagebeep(977444);sx27:=x2;sy27:=y1;schus27:=false;schuss27.visible:=false;expl17.Top:=(y1);expl17.Left:=(x1);expl17.visible:=true;k2:=k2+1; end;



Ich suche nach irgendeiner Möglichkeit solche Blöcke zu verkürzen!!!
Einerseits will ich aus der IF-Anweisung eine Case-Anweisung machen.
Geht aber nicht da diese d27,d26...usw keine Konstanten, sondern
sich ständig verändernde Variablen sind!!!! :?
Ausserdem wiederholen sich bei mir Anweisungen wie:


Quelltext
1:
r21.visible:=false;r22.visible:=true;r23.visible:=false;r24.visible:=false;r25.visible:=false;r26.visible:=false;r27.visible:=false;r28.visible:=false;                    

wie kann ich sie in einer Prozedur speichern und dann einfach bei Bedarf
abrufen???

Moderiert von user profile iconAya: Code-Tags hinzugefügt


mars - Di 01.04.03 12:19

Also ich würd mir diese verschiedenen Variablen als Array deklarieren (beispielsweise d: Array of Integer;) und eine Funktion kreieren, die als Parameter einen Integerwert entgegennimmt, den Index. Den Feinschliff musst du natürlich schon selber machen, aber die Funktion sähe dann beispielsweise so aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure blabla(I: Integer);
begin
if d[i]<6 then begin
Inc(k);
Dec(energie2, 15);
MessageBeep();
...
sy[i]:=x1
...
end;

Aufrufen könntest du die Prozedur dann folgendermassen:

Quelltext
1:
2:
For i:= 10 to 100 do
 blabla(i);


inselberg - Di 01.04.03 12:34

1. ich würde an deiner stelle mal über einrücken nachdenken ... das kann man doch nicht lesen

2. worum gehts bei dem problem ?
denn so viele selbstdefinierte vars hab ich noch nicht mal in grösseren programmen gebraucht.
wäre es nicht besser arrays, listen oder records zu benutzen ... oder gar eine eigene klasse ?

bzw das herangehen an das problem neu zu überdenken ...


en bisschen gekürzt hab ich dir das trotzdem :)



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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
procedure proc1(var energie:integer);
begin
 inc(k);
 dec(energie,15);
 messagebeep(977444);
end;



if (d11 < 6) then
  begin
    proc1(energie2);sx11:=x1;sy11:=y1;schus1 :=false;schuss11.visible:=false;expl1.Top:=(y2);expl1.Left:=(x2);expl1.visible:=true;inc(k2); 
  end; 
if (d12 < 6) then
  begin
    proc1(energie2);sx12:=x1;sy12:=y1;schus2 :=false;schuss12.visible:=false;expl2.Top:=(y2);expl2.Left:=(x2);expl2.visible:=true;inc(k2); 
  end; 
if (d13 < 6) then
  begin
    proc1(energie2);sx13:=x1;sy13:=y1;schus3 :=false;schuss13.visible:=false;expl3.Top:=(y2);expl3.Left:=(x2);expl3.visible:=true;inc(k2); 
  end; 
if (d14 < 6) then
  begin
    proc1(energie2);sx14:=x1;sy14:=y1;schus4 :=false;schuss14.visible:=false;expl4.Top:=(y2);expl4.Left:=(x2);expl4.visible:=true;inc(k2); 
  end; 
if (d15 < 6) then
  begin
    proc1(energie2);sx15:=x1;sy15:=y1;schus5 :=false;schuss15.visible:=false;expl5.Top:=(y2);expl5.Left:=(x2);expl5.visible:=true;inc(k2); 
  end; 
if (d16 < 6) then
  begin
    proc1(energie2);sx16:=x1;sy16:=y1;schus6 :=false;schuss16.visible:=false;expl6.Top:=(y2);expl6.Left:=(x2);expl6.visible:=true;inc(k2); 
  end; 
if (d17 < 6) then
  begin
    proc1(energie2);sx17:=x1;sy17:=y1;schus7 :=false;schuss17.visible:=false;expl7.Top:=(y2);expl7.Left:=(x2);expl7.visible:=true;inc(k2); 
  end; 
if (d21 < 6) then
  begin
    proc1(energie1);sx21:=x2;sy21:=y1;schus21:=false;schuss21.visible:=false;expl11.Top:=(y1);expl11.Left:=(x1);expl11.visible:=true;inc(k2); 
  end; 
if (d22 < 6) then
  begin
    proc1(energie1);sx22:=x2;sy22:=y1;schus22:=false;schuss22.visible:=false;expl12.Top:=(y1);expl12.Left:=(x1);expl12.visible:=true;inc(k2); 
  end; 
if (d23 < 6) then
  begin
    proc1(energie1);sx23:=x2;sy23:=y1;schus23:=false;schuss23.visible:=false;expl13.Top:=(y1);expl13.Left:=(x1);expl13.visible:=true;inc(k2); 
  end; 
if (d24 < 6) then
  begin
    proc1(energie1);sx24:=x2;sy24:=y1;schus24:=false;schuss24.visible:=false;expl14.Top:=(y1);expl14.Left:=(x1);expl14.visible:=true;inc(k2); 
  end; 
if (d25 < 6) then
  begin
    proc1(energie1);sx25:=x2;sy25:=y1;schus25:=false;schuss25.visible:=false;expl15.Top:=(y1);expl15.Left:=(x1);expl15.visible:=true;inc(k2); 
  end; 
if (d26 < 6) then
  begin
    proc1(energie1);sx26:=x2;sy26:=y1;schus26:=false;schuss26.visible:=false;expl16.Top:=(y1);expl16.Left:=(x1);expl16.visible:=true;inc(k2); 
  end; 
if (d27 < 6) then
  begin
    proc1(energie1);sx27:=x2;sy27:=y1;schus27:=false;schuss27.visible:=false;expl17.Top:=(y1);expl17.Left:=(x1);expl17.visible:=true;inc(k2); 
  end;


natürlich immer davon ausgehend dass du nur "global" vars nimmst :roll:


AlA - Di 01.04.03 12:51
Titel: Danke
Es handelt sich um ein Spiel das für den
Schulunterricht gefertigt wird (Inf GK)
Abschnitt klärt die Kokkision von geschussen
und Raumschiffen.
dxx sind die Abstände zw. den Schüssen und den
Raumschiffen,enex die Energie