Autor |
Mitteilung |
|
verfasst am: 02.02.2009, 22:38
|
Registrierdatum: 08.11.2006, 06:23
Beiträge: 433
|
Nach einigem experimentieren habe ich dieses Kartenskript für das "village" entwickelt.
Das eignet sich, wenn man sehr viele Einsätze hat, sehr gut, damit man nicht endlos suchen muss und die Übersicht verliert.
Bei einem Spielsatz, wo man sehr wenige Kämpfe hat, ist das natürlich weniger spannend.
program YourMapScript;
procedure CalculateMapSize(Units: Integer);
begin
MapHeight:=2;
MapHeight:=2;
if Units<61 then
MapHeight:=4
if Units<51 then
MapHeight:=3
if Units<46 then
MapHeight:=4
if Units<41 then
MapHeight:=3
if Units<36 then
MapHeight:=2
if Units<31 then
MapHeight:=3
if Units<26 then
MapHeight:=2
if Units<21 then
MapHeight:=3
if Units<16 then
MapHeight:=2
if Units<61 then
MapWidth:=5
if Units<51 then
MapWidth:=6
if Units<46 then
MapWidth:=4
if Units<41 then
MapWidth:=5
if Units<36 then
MapWidth:=8
if Units<31 then
MapWidth:=4
if Units<25 then
MapWidth:=6
if Units<21 then
MapWidth:=3
if Units<16 then
MapWidth:=4
if Units<11 then
MapWidth:=3
if Units<6 then
MapWidth:=2
end;
procedure GenerateMap;
var
i,X,Y : Integer;
RowOK : Boolean;
YTemp : Integer;
begin
// Horizontale Strasse erstellen
for i:=0 to round(GetMapWidth/10) do
begin
X := random(GetMapWidth);
if (GetRoomAtPos(X-1,1) = '') and (GetRoomAtPos(X+1,1) = '') then
begin
for y:=0 to GetMapHeight-1 do
CopyRoomToPos(X,Y,'Street_Horizontal_*');
end
end;
// Vertikale Strasse erstellen
for i:=0 to GetMapHeight/10 do
begin
Y := random(GetMapHeight);
RowOK:=true;
for YTemp:=Y-1 to Y+1 do
begin
if (GetRoomAtPos(0,YTemp)='Street_Vertical_*') or (GetRoomAtPos(0,YTemp)='Street_Crossing_*') then
RowOK:=false;
end;
if RowOK then
begin
for X:=0 to GetMapWidth-1 do
begin
if GetRoomAtPos(X,Y) = 'Street_Horizontal_*' then
CopyRoomToPos(X,Y,'Street_Crossing_*')
else
CopyRoomToPos(X,Y,'Street_Vertical_*');
end;
end;
end;
FillFreeRooms('House_*');
end;
begin
// Hier darf kein weiterer Code folgen
end.
Wuasi sind immer 1-5 Aliens pro "Haus" und nur soviele Häuser, wie Aliens
...DX |
|
verfasst am: 02.02.2009, 22:47
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Du kannst übrigens mit begin/end auch if-Blöcke zusammenfassen, z.B.:
if Units<61 then
begin
MapHeight:=4;
MapWidth:=5;
end;
Außerdem solltest Du Dir angewöhnen Deine Befehle korrekt abzuschließen - hier wird zwar keine Weltraumsonde verloren gehen, aber der NASA ist das schon passiert. Irgendeine der Sonden vor ein paar Jahrzehnten ist nämlich genau deshalb ausgefallen, weil jemand bei der Programmierung ein einziges Abschluss-Semikolon vergessen hat...
Das war ein teurer Programmierfehler... |
|
verfasst am: 02.02.2009, 23:25 · Edited by: DareliusXurax
|
Registrierdatum: 08.11.2006, 06:23
Beiträge: 433
|
Was meinst du mit abschließen?
Da ich keine Ahnung von der Skriptsprache habe, rate ich immer nur herum...
Ist das dann so "besser"?
program YourMapScript;
procedure CalculateMapSize(Units: Integer);
begin
MapHeight:=2;
MapHeight:=2;
if Units<61 then
begin
MapHeight:=4;
MapWidth:=5;
end;
if Units<51 then
begin
MapHeight:=3;
MapWidth:=6;
end;
if Units<46 then
begin
MapHeight:=4;
MapWidth:=4;
end;
if Units<41 then
begin
MapHeight:=3;
MapWidth:=5;
end;
if Units<36 then
begin
MapHeight:=2;
MapWidth:=8;
end;
if Units<31 then
begin
MapHeight:=3;
MapWidth:=45;
end;
if Units<26 then
begin
MapHeight:=2;
MapWidth:=6;
end;
if Units<21 then
begin
MapHeight:=3;
MapWidth:=3;
end;
if Units<16 then
begin
MapHeight:=2;
MapWidth:=4;
end;
if Units<11 then
MapWidth:=3
if Units<6 then
MapWidth:=2
end;
procedure GenerateMap;
var
i,X,Y : Integer;
RowOK : Boolean;
YTemp : Integer;
begin
// Horizontale Strasse erstellen
for i:=0 to round(GetMapWidth/10) do
begin
X := random(GetMapWidth);
if (GetRoomAtPos(X-1,1) = '') and (GetRoomAtPos(X+1,1) = '') then
begin
for y:=0 to GetMapHeight-1 do
CopyRoomToPos(X,Y,'Street_Horizontal_*');
end
end;
// Vertikale Strasse erstellen
for i:=0 to GetMapHeight/10 do
begin
Y := random(GetMapHeight);
RowOK:=true;
for YTemp:=Y-1 to Y+1 do
begin
if (GetRoomAtPos(0,YTemp)='Street_Vertical_*') or (GetRoomAtPos(0,YTemp)='Street_Crossing_*') then
RowOK:=false;
end;
if RowOK then
begin
for X:=0 to GetMapWidth-1 do
begin
if GetRoomAtPos(X,Y) = 'Street_Horizontal_*' then
CopyRoomToPos(X,Y,'Street_Crossing_*')
else
CopyRoomToPos(X,Y,'Street_Vertical_*');
end;
end;
end;
FillFreeRooms('House_*');
end;
begin
// Hier darf kein weiterer Code folgen
end.
...DX |
|
verfasst am: 03.02.2009, 00:37 · Edited by: Nedar
|
Registrierdatum: 23.09.2008, 00:25
Beiträge: 67
|
Also rumraten kann zwar bei Scripts oder bei Programmieren allgemein eine Weile funktionieren aber irgendwann sollte man auch verstehen was man macht. *grins* Hab leider zur Zeit eine Menge Klausuren, aber ab nächsten Dienstag könnte ich dir theoretisch etwas erklären, wenn du nicht weißt wie es funktioniert. (Kenn mich zwar mit Kartenscripts speziell wenig aus, dafür aber mehr mit Programmieren allgemein) |
|
verfasst am: 03.02.2009, 06:45
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Zitat: DareliusXurax Was meinst du mit abschließen?
Am Ende jedes Befehls muss ein Semikolon stehen - allerdings ist nicht jeder Befehl in einer Zeile beendet.
D.h. Du darfst auch nicht hingehen und ans Ende jeder Zeile ein Semikolon setzen, Du musst genau wissen wo es gesetzt werden muss (90% aller Fälle) und wo nicht (10% aller Fälle).
Zitat: DareliusXurax Da ich keine Ahnung von der Skriptsprache habe, rate ich immer nur herum...
Deshalb solltest Du Dir das Tutorial dazu anschauen, sonst wird früher oder später alles in den Skripten durcheinander geraten.
Es geht auch nicht darum bestimmte Skriptbefehle auswendig zu kennen, Du musst stattdessen wissen wie die Struktur der Sprache ist - die genauen Befehle merke ich mir auch nie, die kann man jederzeit im Objektbrowser des Skripteditors nachschlagen. |
|
verfasst am: 03.02.2009, 12:08
|
Registrierdatum: 08.11.2006, 06:23
Beiträge: 433
|
Objektbrowser? Skripteditor?
Gibt das dzu diesem komischen Skripteditor eigentlich eine Hilfe?
...DX |
|
verfasst am: 03.02.2009, 12:43
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Nein - aber das sollte auch nicht nötig sein.
Die Bedienung sollte mehr oder weniger selbsterklärend sein (das ist ja im wesentlichen nur ein Texteditor mit Zusatzfunktionen), und der Objektbrowser ist das Fenster links, in dem alle Funktionen, Typen und Konstanten aufgelistet sind die im Skript zur Verfügung stehen.
Spätestens wenn man das X-Skript-Tutorial durchgearbeitet hat sollte man genug Übung mit dem Skripteditor haben um damit klarzukommen. |
|
verfasst am: 23.11.2023, 06:02
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 69718
|
|
|
verfasst am: 02.12.2023, 21:08
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 69718
|
|