< BlitzBasic-Community-Tutorial
Allgemein
Der Mini Textadventure besteht aus mehrenen Räumen. Jeder Raum hat eine Raumnummer und einem Namen.
Der Code
Const 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
This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.