So nun meine Lösungsvorschläge für Die Aufagben Kapitel 3
aufgabe 1
program AK3N1;
const
MissionWin = 'Mission gewonnen' ; // Mission gewonnen
MissionLoose = 'Mission verloren' ; // Mission verloren
// Diese Prozedur wird aufgerufen, wenn die Mission gewonnen wurde
procedure OnMissionWin;
begin
game_api_messageBox(MissionWin);
end;
// wird aufgerufen, wenn die Mission verloren wurde
procedure OnMissionLoose;
begin
game_api_messageBox(MissionLoose);
end;
procedure StartMission;
var
UFO : TUFO;
begin
UFO:=ufo_api_CreateUFO(); // UFO erzeugen
register_ufo(UFO);
// UFOs erzeugen, Missionstext anzeigen, usw.
end;
begin
MissionName := 'AK3N1';
MissionType := mzUFO;
end.
aufgabe 2
program AK3N2;
const
Message1 = 'Die Zahl ist durch 3 Teilbar';
Message2 = 'Die Zahl ist nicht durch 3 Teilbar';
procedure StartMission;
{var
Zah : Integer;}
begin
{Zah:=random(99)+1;}
if ((random(99)+1) mod 3=0) then
begin
game_api_messageBox(Message1);
end
else
begin
game_api_messageBox(Message2);
end;
end;
begin
MissionName := 'AK3N2';
end.
Zah kann man benutzen, wenn man die Zahl später noch braucht.
aufgabe 3 und 4
program AK3N3u4;
const
MissionWin1 = 'Gleich im 1. Versuch eine 6! Du bist ein echter Glückspilz.' ;
MissionWin = 'Glückwunsch, du hast eine 6 gewürfelt.' ;
MissionLoose = 'Du hast das Spiel verloren' ;
var
Zaeh : Integer;
procedure OnMissionWin;
begin
game_api_messageBox('Du hast das Spiel gewonnen');
end;
procedure OnMissionLoose;
begin
game_api_messageBox(MissionLoose);
end;
procedure StartMission;
var
wurf : Integer;
begin
for zaeh:=1 to 6 do
begin
wurf:= random(6)+1;
if (wurf=6) then
begin
if (Zaeh=1) then game_api_messageBox(MissionWin1)
else game_api_messageBox(MissionWin);
Mission_Win;
end
else
begin
game_api_messageBox('Schade, leider Keine 6. Probiers nochmal!');
if (zaeh=6) then Mission_Loose;
end;
end;
end;
begin
MissionName := 'AK3N3u4';
end.
Wenn man nur Aufgabe 3 lösen will, kann man bei else immer wieder zaeh auf 1 setzen, solange bis man gewonnen hat, bzw. bei einen einmaligen durchgang kann man zaeh und die schleife weglassen.
aufgabe 5
..// vorher wie immer
procedure StartMission;
var
Index : Integer;
UFOs : Integer;
UFO : TUFO;
UFOModel : TUFOModel;
begin
... // vorher so wie immer
// zufällige UFO-Anzahl ermitteln
UFOs := random(5) + 1;
ufo_api_GetUFOModelByID(9424296, UFOModel); // UFOModel des Klotz Typ 1 (gal war)
for Index := 1 to UFOs do
begin
UFO := ufo_api_CreateUFOFromModel(UFOModel); // UFO entsprechend dem UFOModel erzeugen
register_ufo(UFO);
UFO.Name := UFO.Name + ' der Jägerstaffel';
end;
// Bei Ablauf des Zeitlimits wird die Prozedur TimeUp aufgerufen
register_timed_event(@TimeUp,Nil,UFOs*90);
end;
begin
MissionName := 'UFO-Angriff';
MissionType := mzUFO;
end.
Man könnte die ID's auch per schleife feststellen (dauert wahnsinnig lange) oder wahrscheinlich auch so genauso wie die Aliens in Kapitel 6.
aufagbe 6
...//vorher wie immer
procedure StartMission;
var
Index : Integer;
UFOs : Integer;
UFO : TUFO;
UFOModel : TUFOModel;
begin
...//vorher so wie immer
// zufällige UFO-Anzahl ermitteln
UFOs := random(5) + 1;
UFO := ufo_api_CreateUFO();
register_ufo(UFO);
UFO.Name := UFO.Name + ' der Jägerstaffel';
if (UFOs>1) then
begin
UFOModel := UFO.Model; //damit immer das selbe UFO erzeugt wird
for Index := 1 to UFOs-1 do
begin
ufo_api_CreateUFOFromModel(UFOModel); // UFO erzeugen
register_ufo(UFO);
UFO.Name := UFO.Name + ' der Jägerstaffel';
end;
end;
// Bei Ablauf des Zeitlimits wird die Prozedur TimeUp aufgerufen
register_timed_event(@TimeUp,Nil,UFOs*90);
end;
begin
MissionName := 'UFO-Angriff';
MissionType := mzUFO;
end.
Dadurch das beim Model alles übergeben wird, wird immer das selbe Ufo danach erzeugt, wobei noch überprüft wird ob mehr als 1 Ufo erzeugt werden soll, damit man nicht mehr Ufos erzeugt.
Ich denk mal, das man die aufgaben bestimmt noch eleganter lösen kann und ich hoff ich hab die Aufgaben richtig verstanden.