fb:porticula NoPaste
Airport - unvollständiges Spielprogramm
Uploader: | George |
Datum/Zeit: | 21.02.2010 20:46:17 |
' AIRPORT
' ist die FreeBASIC-Version des zuvor in QBAsic und davor in C64-Basic entwickelten Spiels
' begonnen am 15.02.10
#include "vbcompat.bi"
Declare Sub Ruecksetzen
Declare Sub Cargomove
Declare Sub Tower
DIM shared as Integer i, a, b '----allgemeine Index- und Hilfsvariablen
DIM shared ProgCode as Integer = 1
DIM shared Auswahl as String
DIM shared Wort as String '---allgemeine Hilfskette
DIM shared as Integer ZeitMin, Zeit, Zeiger '--- Zeiger zeigt den nächsten Flieger
DIM shared as Integer AnzKollision, AnzRout, AnzStaLa, AnzDisp, AnzCM
DIM shared as Integer Pardis, ParMay, Parmai, ParTra '--- Parameter Wahrschein. discharge,Mayday,maintain,Transitpaletten
DIM shared as Integer HisF(30), HisK(30) '---- 30 Min Historie
DIM shared as Integer Gat(4), GF(4) '---- Gat=AnzeigeDeparture, GF=Flieger am Gate
DIM shared as Integer KollStat, xKoll, yKoll '---- Kollision auf Rollfeld
DIM shared as Integer Fstat(19), Fx(21), Fy(21), Fdx(21), Fdy(21)
DIM shared as String Fziel(19), FCall(21)
DIM shared as Integer Pa(1 to 236), Px(1 to 236), Py(1 to 236), PF(1 to 211) '--PF=Folge auf Bild
'-----------------------------------------------------------Initialisierung-----
Pardis=60: ParMay=10: Parmai=15: ParTra=25 '--- in Prozent Wahrscheinlichkeit
for i=0 to 30: HisF(i)=0: HisK(i)=0: next
Ruecksetzen '------ VORLÄUFIG, sollange Speichern noch fehlt
'+++ Datei einlesen
Fx(20)=1048:Fy(20)=312:Fdx(20)=0:Fdy(20)=0:FCall(20)="+" '---Feuerwehr Start
Fx(21)=1072:Fy(21)=240:Fdx(21)=0:Fdy(21)=0:FCall(21)="+" '---Versorgung Start
randomize timer
screenres 1200,900,32,2 '------ 1200x900px, 32Farbtiefe, 2 Seiten für screenset
width 150, 56 '------ Schriftgröße 16 festlegen
do
'-------------------------------------------------------------Startbild-----
bload "data/Startbild.bmp"
draw string (55,700),"Version 1.0",0: draw string (55,716), "20.08.2010",0
draw string (425,83),"Flugzeuge", &hFF0000: draw string (505,83), "Kolli", &h00FF00: draw string (685,83), "max:", &hFFFF00
draw string (669,264), "Minuten", &HFFFF00: draw string (770,78), "Dauer der Simulation",0
Wort= str(Int(ZeitMin/60))&":"&str(ZeitMin MOD 60)&":"&str(Zeit): draw string (770,94), Wort,0
draw string (800,110), str(AnzKollision)&" x Kollision verursacht",0: draw string (800,126), str(AnzRout)&" Routings Destination (RD)",0
draw string (800,142), str(AnzStaLa)&" Starts und Landungen (SL)",0: draw string (800,158), str(AnzDisp)&" Dispatching (DI)",0
a=0: b=0: for i=0 to 19
If Fstat(i)=1 then a=a+1
If Fstat(i)=2 then b=b+1
next
draw string (770,174), "Zur Zeit sind",0: draw string (800,190), str(a)&" Flieger in der Luft",0
draw string (800,206), str(b)&" Flieger am Boden",0: draw string (800,222), str(AnzCM)&" Kolli im Prozess",0
If ZeitMin=0 then
draw string (770,260),"--.- RD/h", &HFF0000: draw string (860,260),"--.- SL/h", &HFF0000
draw string (950,260),"--.- DI/h", &H00FF00
else
draw string (770,260), format ((AnzRout/(ZeitMin/60)),"###.#")&" RD/h", &HFF0000
draw string (860,260), format ((AnzStaLa/(ZeitMin/60)),"###.#")&" SL/h", &HFF0000
draw string (950,260), format ((AnzDisp/(ZeitMin/60)),"###.#")&" DI/h", &H00FF00
end if
a=0: b=0: for i=0 to 30
If HisF(i)>a then a=HisF(i)
If HisK(i)>b then b=HisK(i)
next
If a=0 then a=1
If b=0 then b=1
draw string (685,99),str(a), &HFF0000: draw string (685,115),str(b), &H00FF00
for i=0 to 29
line (440+i*8,250-(HisF(i)/a)*150)-(440+(i+1)*8,250-(HisF(i+1)/a)*150), &HFF0000
line (440+i*8,250-(HisK(i)/b)*150)-(440+(i+1)*8,250-(HisK(i+1)/b)*150), &H00FF00
next
Auswahl =""
Do while (Auswahl="")
Auswahl=inkey
loop
select case Auswahl
case "s"
ProgCode=2: Tower
case "h" '---- Hilfetext
line (186,386)-(1054,854), &HFFFFFF, BF:line (187,387)-(1054,854), &H202020, BF
line (187,387)-(1053,853), &H808080, BF:line (189,389)-(1051,851), &H202020, BF
line (190,390)-(1051,851), &HFFFFFF, BF:line (190,390)-(1050,850), &HC0C0FF, BF
draw string (200,400), "Steuerung vom TOWER:",0
draw string (200,418), "[Enter] =ein neues Flugzeug erscheint auf dem Radar. Mit [A]-[T] wird es ueber Funk angesprochen.",0
draw string (200,450), "Wenn es sich in der Luft befindet:",0
draw string (220,466), "[R] =Kursaenderung um 45 Grad nach rechts, [L] =Kursaenderung links, [C] =Come in! (Landeerlaubnis)",0
draw string (220,482), "Am Rand des Radarbildes fliegt es entweder in gewuenschte Richtung 'N,S,W,E...' (erfolgreiches",0
draw string (220,498), "Routing Destination), oder es kehrt um zur Radarmitte.",0
draw string (220,518), "Anflug zur Landung nur aus oestlicher Richtung kommend moeglich.",0
draw string (200,550), "Wenn es sich auf dem Rollfeld befindet:",0
draw string (220,566), "Es wird eine Kommandofolge eingegeben und mit [Enter] abgeschlossen. Diese Folge enthaelt die",0
draw string (220,582), "Rollfeldpositionen [a]-[s] und das Abschlusskommando [+] = Stop/Wait!",0
draw string (220,602), "[s] beinhaltet auch gleichzeitig den Startbefehl und das Flugzeug erscheint wieder auf dem Radar.",0
draw string (220,618), "Der [+]-Befehl kann auch als Notstopp verwendet werden, um Kollisionen zu verhindern.",0
draw string (200,650), "Die Feuerwehr (Kommandoadresse [U]) wird wie ein Flugzeug auf dem Rollfeld gesteuert. Sie beseitigt",0
draw string (200,666), "den Schaden bei Kollisionen auf dem Rollfeld und hebt den Status 'Mayday' bei Flugzeugen auf. Dazu",0
draw string (200,682), "muss sie an die jeweilige Position kommandiert werden.",0
draw string (200,714), "Das Tankfahrzeug (Kommandoadresse [V]) kann wie die Feuerwehr bewegt werden. Es hebt den Status",0
draw string (200,730), "'maintain' bei Flugzeugen auf.",0
draw string (200,762), "Mit [Tab] wechselt man zum CARGOMOVE-Bereich; mit [Esc] wird die Simulation beendet.",0
draw string (500,794), "[Leertaste] zum Weiterblaettern",&H0000FF
sleep
line (190,390)-(1050,850), &HC0C0FF, BF
draw string (200,400), "Steuerung im CARGOMOVE:",0
draw string (200,418), "Abfluggates mit [1]-[5] adressieren. Dann entweder Kennbuchstabe einer Airline [A]-[T] eingeben",0
draw string (200,434), "oder [Enter]. Die Kolli werden entsprechend des Airline-Buchstabens zum Gate geleitet. Mit [Enter]",0
draw string (200,450), "werden die Kolli in Warteposition auf das gegenueber liegende Import-Band gesetzt (Achtung: dies",0
draw string (200,466), "muss immer frei sein; bei Ankunft einer Maschine und beim Umsetzen)",0
draw string (200,498), "Ob ein Kollo an Board verladen wird, richtet sich nicht nach der Departure-Anzeige, sondern",0
draw string (200,514), "nach der Kollo-Kennzeichnung und der angedockten Maschine (siehe Heckflosse und Toranzeige).",0
draw string (200,546), "Shuttle-Stationen [6, 7, 8, 9, 0] zum innerbetrieblichen Transport.",0
draw string (200,578), "[Enter] =ein neues Kollo wird beim Export auf die Baender gesetzt. Alle Kolli mit 'X' werden beim",0
draw string (200,594), "Import automatisch ausgegliedert.",0
draw string (200,626), "Mit [?] koennen 5 Kolli eine neue Adresse bekommen. Wenn das betreffende blaue Licht erscheint,",0
draw string (200,642), "kann ein neuer Kennbuchstabe eingegeben werden [A]-[X].",0
draw string (200,674), "Mit [>] und [<] wird das Karusellband vor dem Lagerbereich gedreht.",0
draw string (200,706), "Adresse der Lagerstrassen [A]-[G]. Dann folgt eine zweite Eingabe:",0
draw string (220,722), "[Enter] = die Lagerstrasse wir 8 Sekunden auf 'gruen' geschaltet und nach oben entleert.",0
draw string (220,738), "[+] = ein Kollo wird vom Karusell in die Strasse eingelagert, die anderen ruecken hoch.",0
draw string (220,754), "[-] = ein Kollo wird aus dem lager auf das Karusellband gestellt.",0
draw string (200,786), "Mit [Tab] wechselt man zum TOWER-Bereich; mit [Esc] wird die Simulation beendet.",0
draw string (500,818), "[Leertaste] zum Beenden",&H0000FF
sleep
case "r" '---- Reset Daten
line (456,476)-(824,574), &HFFFFFF, BF:line (457,477)-(824,574), &H202020, BF
line (457,477)-(823,573), &H808080, BF:line (459,479)-(821,571), &H202020, BF
line (460,480)-(821,571), &HFFFFFF, BF:line (460,480)-(820,570), &HC0C0FF, BF
draw string (470,490), "Sollen alle Flugzeuge verschwinden,",0
draw string (470,506), "die Kolli verschwinden, die Zeit auf 0:0:0",0
draw string (470,522), "und alle Zaehler auf 0 gesetzt weden?",0
draw string (566,546), "[J / N]", &H0000FF
Auswahl =""
do while (Auswahl="")
Auswahl=inkey
loop
if Auswahl="j" then Ruecksetzen
case "p" '---- Parameter Wahrscheinlichkeit neu setzen
draw string (200,400), "Parameter zur Berechnung der WAHRSCHEINLICHKEIT:",0
draw string (224,416), "(alle Angaben in Prozent und ganzzahlig!)",0
'locate 30,30: print "Auftrag 'discharge': "&Pardis
'locate 31,30: input "neu: ";Pardis
sleep
'++++ Parameter
case "e"
ProgCode=0
end select
loop until (ProgCode=0)
'----------------------------------------------------------End-Verarbeitung-----
'+++ Datei speichern
END
'---------------------------------------------------------------------- SUB s---
SUB Ruecksetzen
Zeit=0: ZeitMin=0: AnzKollision =0: AnzRout =0: AnzStaLa =0: AnzDisp=0: AnzCM=0
Zeiger=0: KollStat=0: xKoll=100: yKoll=600
for i=0 to 19
Fstat(i)=0: Fx(i)=0: Fy(i)=0: Fdx(i)=0: Fdy(i)=0: Fziel(i)="": FCall(i)=""
next
for i=1 to 237: Pa(i)=99: next
for i=0 to 4: Gat(i)=i: GF(i)=99: next
End SUB
'-----------------------------------------------------------------Cargomove-----
SUB Cargomove
do while ProgCode=3
'++++ Bild erzeugen
'++++ Bild mit Shuttle ergänzen
'++++ Zeitzählung mit Statistik
bload "data/CargoMove.bmp"
Auswahl=""
Do while (Auswahl="") '+++++++vorläufig
Auswahl=inkey
loop
select case Auswahl
case "1" to "5"
'++++ Gate
case "6","7","8","9","0"
'++++ Shuttle
case "?"
'++++ mpacken
case ">"
'++++ links herum
case "<"
'++++ rechts herum
case "a" to "g"
'++++ Lager-Lane
case chr(13)
'++++ neue Palette
case chr(9) '---Tab
ProgCode=2
case chr(27) '---Esc
ProgCode=1
end select
'++++ Bewegung
loop
End SUB
'---------------------------------------------------------------------Tower-----
SUB Tower
do while ProgCode=2
'++++ Bild erzeugen
'++++ Zeitzählung mit Statistik
bload "data/Tower.bmp"
Auswahl=""
Do while (Auswahl="") '+++++++vorläufig
Auswahl=inkey
loop
select case Auswahl
case "a" to "t"
'++++ Flugfunk
case "u"
'++++ Feuerwehr
case "v"
'++++ Versorgung
case chr(13)
'++++ neuer Flieger
case chr(9) '---Tab
ProgCode=3: Cargomove
case chr(27) '---Esc
ProgCode=1
end select
'++++ Bewegung
loop
End SUB