BlitzBasic-Community-Tutorial/ Textadventure
Allgemein
BearbeitenDer Mini Textadventure besteht aus mehrenen Räumen. Jeder Raum hat eine Raumnummer und einem Namen.
Der Code
BearbeitenConst Nord=0 Const Sued=1 Const West=2 Const Ost =3 Const AdvKennung$="MiniAdvSpiel" Global RichtungsName$[3] RichtungsName[0]=" Norden" RichtungsName[1]=" Süden" RichtungsName[2]=" Westen" RichtungsName[3]=" Osten" Type RaumTyp Field Name$ Field Nr Field Richtung[3] End Type Type SpielerTyp Field Name$ Field Ort Field Leben End Type Type GegenstandTyp Field Name$ Field Nr Field Ort End Type Global Raum.RaumTyp Global Spieler.SpielerTyp Global Gegenstand.GegenstandTyp Const Gegenstand_Hat_Spieler=0 Const Keine_Tuer=0 ; Name$ Nr ,N ,S ,W ,O CreateRaum "Ziel" ,-1 , 0, 0, 0, 0 CreateRaum "Küche" , 4 , 0, 3, 0,-1 CreateRaum "Stube" , 3 , 4, 0, 0, 2 CreateRaum "BadeZimmer", 2 , 0, 0, 3, 1 CreateRaum "Keller" , 1 ,-2, 0, 2,-3 CreateRaum "Abgrund" ,-2 , 0, 0, 0, 0 CreateRaum "Teufel" ,-3 , 0, 0, 0, 0 CreateGegenstand "Schweizer Taschenmesser",1,Gegenstand_Hat_Spieler CreateGegenstand "Kochtopf" ,2,4 CreateGegenstand "Foto" ,3,3 SpielerName$=Input("Name: ") CreateSpieler SpielerName$,2,3 Graphics 640,480,0,2 Spiel Function Spiel() Repeat SpielerInfo Eingabe$=Input$() verb$=Mid$(Eingabe$,1,Instr(Eingabe$+" ", " ")-1) objekt$=Mid$(Eingabe$,Instr(Eingabe$+" ", " ")+1) Select Lower$(verb$) Case "n","8" SpielerGeheNach Nord Case "s","2" SpielerGeheNach Sued Case "w","4" SpielerGeheNach West Case "o","6" SpielerGeheNach Ost Case "gehe" Select Lower$(objekt$) Case "nord" SpielerGeheNach Nord Case "süd", "sued" SpielerGeheNach Sued Case "west" SpielerGeheNach West Case "ost" SpielerGeheNach Ost End Select Case "save","speichern","speicher" SpielSpeichern objekt$ Case "speichereals" If Len(objekt$)>0 Then SpielSpeichern objekt$ EndIf Case "load","laden","lade" SpielLaden objekt$ Case "nimm" Nimm objekt$ Case "leg" Leg objekt$ Case "inventar" inventar Case "end","ende" Case "help","hilfe","?" hilfe End Select Forever End Function Function Hilfe() Print "Mein Befehlswortschatz umfasst folgende Kommandos:" Print "gehe nord|süd|west|ost oder Abkürzung n|s|w|o" Print "nimm|leg <Gegenstand>" Print "inventar|hilfe" Print "speichereals|lade <dateiname.erw>" End Function Function SpielLaden(objekt$) If Len(objekt$)>0 Then If Instr(objekt$,".")>0 Then FileNr=ReadFile(objekt$) Else FileNr=ReadFile(objekt$+".dat") EndIf EndIf If FileNr=0 Then FileNr=ReadFile("Save.dat") EndIf If FileNr<>0 Then If Not Eof(FileNr) Then Kennung$=ReadLine(FileNr) EndIf If Kennung$=AdvKennung$ Then If Not Eof(FileNr) Then SpeicherArt$=Upper$(ReadLine(FileNr)) EndIf If SpeicherArt$="BIN" Or SpeicherArt$="ASC" Then For Raum =Each RaumTyp Delete Raum Next For Gegenstand=Each GegenstandTyp Delete Gegenstand Next For Spieler=Each SpielerTyp Delete Spieler Next RaumName$=ReadLine(FileNr) While Len(RaumName$)>0 Raum =New RaumTyp Raum\Name$ = RaumName$ Select SpeicherArt$ Case "BIN" Raum\Nr = ReadInt(FileNr) Raum\Richtung[0]= ReadInt(FileNr) Raum\Richtung[1]= ReadInt(FileNr) Raum\Richtung[2]= ReadInt(FileNr) Raum\Richtung[3]= ReadInt(FileNr) Case "ASC" Raum\Nr = ReadLine(FileNr) Raum\Richtung[0]= ReadLine(FileNr) Raum\Richtung[1]= ReadLine(FileNr) Raum\Richtung[2]= ReadLine(FileNr) Raum\Richtung[3]= ReadLine(FileNr) End Select RaumName$ = ReadLine(FileNr) Wend GegenstandName$=ReadLine(FileNr) While Len(GegenstandName$)>0 Gegenstand=New GegenstandTyp Gegenstand\Name$= GegenstandName$ Select SpeicherArt$ Case "BIN" Gegenstand\Nr = ReadInt(FileNr) Gegenstand\Ort = ReadInt(FileNr) Case "ASC" Gegenstand\Nr = ReadLine(FileNr) Gegenstand\Ort = ReadLine(FileNr) End Select GegenstandName$ = ReadLine(FileNr) Wend SpielerName$=ReadLine(FileNr) While Len(SpielerName$)>0 Spieler= New SpielerTyp Spieler\Name$=SpielerName$ Select SpeicherArt$ Case "BIN" Spieler\Ort = ReadInt(FileNr) Spieler\Leben= ReadInt(FileNr) Case "ASC" Spieler\Ort = ReadLine(FileNr) Spieler\Leben= ReadLine(FileNr) End Select SpielerName$ = ReadLine(FileNr) Wend Spieler=First SpielerTyp EndIf Cls Locate 0,0 Print "Spielstand geladen!" Print "" EndIf CloseFile FileNr EndIf End Function Function SpielSpeichern(objekt$) If Len(objekt$)>0 Then If Instr(objekt$,".")>0 Then FileNr=WriteFile(objekt$) Else FileNr=WriteFile(objekt$+".dat") EndIf EndIf If FileNr=0 Then FileNr=WriteFile("Save.dat") EndIf If FileNr<>0 Then WriteLine FileNr,AdvKennung$ WriteLine FileNr,"BIN" For Raum =Each RaumTyp WriteLine FileNr, Raum\Name$ WriteInt FileNr, Raum\Nr WriteInt FileNr, Raum\Richtung[0] WriteInt FileNr, Raum\Richtung[1] WriteInt FileNr, Raum\Richtung[2] WriteInt FileNr, Raum\Richtung[3] Next WriteLine FileNr,"" For Gegenstand=Each GegenstandTyp WriteLine FileNr, Gegenstand\Name$ WriteInt FileNr, Gegenstand\Nr WriteInt FileNr, Gegenstand\Ort Next WriteLine FileNr,"" For Spieler=Each SpielerTyp If Spieler\Name$="" Then WriteLine FileNr, "Spieler" Else WriteLine FileNr, Spieler\Name$ EndIf WriteInt FileNr, Spieler\Ort WriteInt FileNr, Spieler\Leben Next WriteLine FileNr,"" Spieler=First SpielerTyp CloseFile FileNr Print "Spielstand gespeichert!" Print "" EndIf End Function Function SpielerInfo() For Raum=Each RaumTyp If Raum\Nr=Spieler\Ort Then Print "Sie befinden sich im/in der "+Raum\Name$ Print "Mögliche Gehrichtungen:" For Richtung=0 To 3 If Raum\Richtung[Richtung]<>Keine_Tuer Then Print RichtungsName[Richtung] End If Next Print Print "Gegenstände in diesem Raum:"; For Gegenstand=Each GegenstandTyp If Spieler\Ort=Gegenstand\Ort Then Print " "+ Gegenstand\Name$ GegenstandZahl = GegenstandZahl+1 End If Next If GegenstandZahl = 0 Then Print " keine" End If End If Next End Function Function Nimm(objekt$) For Gegenstand=Each GegenstandTyp If Lower$(Gegenstand\Name$)=Lower$(objekt$) Then If Gegenstand\Ort=Spieler\Ort Then Gegenstand\Ort=Gegenstand_Hat_Spieler Print Gegenstand\Name$+ " aufgelesen" End If End If Next End Function Function Leg(objekt$) For Gegenstand=Each GegenstandTyp If Lower$(Gegenstand\Name$)=Lower$(objekt$) Then If Gegenstand\Ort=Gegenstand_Hat_Spieler Then Gegenstand\Ort=Spieler\Ort Print Gegenstand\Name$+ " abgelegt" End If End If Next End Function Function inventar() For Gegenstand=Each GegenstandTyp If Gegenstand_Hat_Spieler=Gegenstand\Ort Then Print " "+ Gegenstand\Name$ GegenstandZahl = GegenstandZahl+1 End If If GegenstandZahl = 0 Then Print " keine" End If Next End Function Function SpielerGeheNach(Richtung) For Raum=Each RaumTyp If Raum\Nr=Spieler\Ort Then If Raum\Richtung[Richtung]<>Keine_Tuer Then Spieler\Ort=Raum\Richtung[Richtung] End If End If Next End Function Function DeleteGegenstand(Name$) For Gegenstand=Each GegenstandTyp If Gegenstand\Name$=Name$ Then Delete Gegenstand Exit EndIf Next End Function Function CreateGegenstand(Name$,Nr,Ort) Gegenstand=New GegenstandTyp Gegenstand\Name$=Name$ Gegenstand\Nr =Nr Gegenstand\Ort =Ort End Function Function CreateSpieler(Name$,Ort,Leben) Spieler=New SpielerTyp Spieler\Name$=Name$ Spieler\Ort =Ort Spieler\Leben=Leben End Function Function CreateRaum(Name$,Nr,Richtung_Nord,Richtung_Sued,Richtung_West,Richtung_Ost) Raum=New RaumTyp Raum\Name$ =Name$ Raum\Nr =Nr Raum\Richtung[Nord] =Richtung_Nord Raum\Richtung[Sued] =Richtung_Sued Raum\Richtung[West] =Richtung_West Raum\Richtung[Ost ] =Richtung_Ost End Function