Autor Beitrag
klausiemausie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Mi 21.01.09 20:35 
Hallo an alle, ich habe ein kleinen Problem, bin momentan dabei ein Strategiespiel zu programmieren im rahmen des info-unterrichts in der schule, bin also kein profi. Zum besseren Verständnis beschreib ich mal kurz das spiel. Im Prinzip läuft es ab wie "Kampf um Afrika", falls das jemand kennt, nur für Europa. Habe etliche GifImages erstellt und da die einzelnen Länder mit transparentem Hintergrund reingeladen. Das ganze ist ein Rundenbasiertes Spiel, Spieler 1 beginnt mit Deutschland, Spieler 2 mit Russland. nach jeder runder, also wenn jeder einmal dran ist, werden in jedem land, das irgendjemanden gehört neue einheiten generiert, je nach wirtschaftsstärke, die variable habe ich selber festgelegt. die in einem land befindlichen Einheiten können in die Nachbarländer verschoben werden um neutrale Nachhbarländer zu annektieren oder feindliche anzugreifen und gegebenfalls auch zu annektieren. Wo wir beim eigentlichen Problem wären. Ich habe jetz für die Land.click-prozedur folgendes festgelegt:

ausblenden volle Höhe 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:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
procedure TForm1.DeutschlandClick(Sender: TObject);
var a,b:byte;
begin
repeat
Land.Text:='Deutschland';
zaehler.text:=floattostr(region[1]);
if zugehoerigkeit[1]=1 then Besitzer.Text:='Spieler1' else if zugehoerigkeit[1]=2 then Besitzer.Text:='Spieler2' else Besitzer.Text:='Neutral';
Combobox1.Clear;
Combobox1.ClearSelection;
combobox1.Items.add('verschieben');
Combobox2.Clear;
a:=0;
b:=0;
case Combobox1.ItemIndex of
0:begin
Combobox2.Items.add('Niederlande');
Combobox2.Items.add('Belgien');
Combobox2.Items.add('Frankreich');
Combobox2.Items.add('Schweiz');
Combobox2.Items.add('Österreich');
Combobox2.Items.add('Tschechien');
Combobox2.Items.add('Polen');
a:=1;
end;
if Combobox2.ItemIndex = 0 then zielland:=12
else
if Combobox2.ItemIndex=1 then zielland:=13
else
if Combobox2.ItemIndex=2 then zielland:=14
else
if Combobox2.ItemIndex=3 then zielland:=18
else
if Combobox2.ItemIndex=4 then zielland:=19
else
if Combobox2.ItemIndex=5 then zielland:=110
else
if Combobox2.ItemIndex=6 then zielland:=113
else Kommentar.text:='Land auswählen';
b:=1;
Sleep(10000);
until (a=1and (b=1)

erreichen wollte ich damit, dass in der ersten Combobox der User auswählt "verschieben", und wenn das so ist erscheinen in der 2. Combobox die Nachbarländer, von denen der User dann eins aussucht, geschieht dies, ändert sich die Variable "zielland" die bestimmt von welchem in welches Land einehiten verschoben werden, also zielland=12 wäre dann von land 1 in land 2, etc. Das problem bei der ganzen Sache ist, dass Delphi diese ganze Prozedur einmal durchläuft wenn man das land anklickt und nichts passiert, weil ja in der ersten combobox nichts ausgewählt ist, und in der zweiten ja logischer weise auch nichts. man kann dann zwar was auswählen, (in der 1.) aber delphi durchläuft ja diese prozedur dann nicht noch einmal. Also habe ich mir gedacht, füge ich die variablen a und b ein, die sich ändern wenn in den comboboxen was ausgewählt wird und lass die prozedur so lange wiederholen bis sich a und b ändern. Das Problem dabei ist nun, dass das Programm sich "aufhängt", qausi ständig diese Prozedur durchläuft ohne dass der user auf der oberfläche etwas anklicken kann. Ich habe versucht das mit dem Sleepbefehl zu steuern, aber das funktioniert auch nicht.
Vielleicht fällt von euch jemandem etwas ein, wie ich dieses Problem lösen kann. danke
gruss KLaus

Moderiert von user profile iconKha: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 21.01.2009 um 23:21
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 21.01.09 22:23 
Hallo und :welcome:!

Du musst darauf reagieren, wenn in der ComboBox etwas ausgewählt wird. Dafür gibt es OnChange. Dort musst du dann jeweils darauf reagieren, du kannst nicht alles in eine Prozedur schreiben. ;-)

Windows funktioniert ereignisorientiert. Du darfst nicht auf etwas warten, sondern musst auf Ereignisse ("etwas wurde ausgewählt / verändert") reagieren.