Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Airport - unvollständiges Spielprogramm

Uploader:MitgliedGeorge
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