Small Basic Game Programming - Text adventure

Once I have answered a question in Small Basic Forum by Jeffrey SWHS about Text Adventure Game.  At that time, I made a sample text adventure program.  That program (FCD758-0) is not completed.  But I will explain about the program this time.  And until the next time I'd like to refine and upgrade this text adventure.

Opening

This is the game opening.  To game control, many Goto statements are used.  And for choosing an alternative, subroutine Choose is called.  This makes the code simple.

  1.stage_0: 
  2.TextWindow.Writeline("You're at a fork in the road.") 
  3.TextWindow.Writeline("Which way do you go? ") 
  4.choices="LEFT,RIGHT,STAY" 
  5.Choose() 
  6.If id = 1 Then 
  7.  Goto stage_1_1 
  8.ElseIf id = 2 Then 
  9.  Goto stage_1_2 
 10.ElseIf id = 3 Then 
 11.  Goto stage_1_3 
 12.Else 
 13.  TextWindow.WriteLine("Invalid choise.") 
 14.  Goto stage_0 
 15.EndIf 

First Stage

The first stage branches three by the selection.  There are no code for second and third selection, so these two goes to the end.

 17.stage_1_1: 
 18.TextWindow.Writeline("Good choice, you find some money. :)") 
 19.TextWindow.Writeline("Have a nice day.") 
 20.Goto end 
 21.stage_1_2: 
 22.  
 23.stage_1_3: 

End of Game

This is the end of game, only writing a new line at this time.

 25.end: 
 26.TextWindow.Writeline("") 
 27.' end of program 

Subroutine to Choose Alternative

This subroutine returns a number (id) selected from given choices that is described as comma separated value.

 29.Sub Choose 
 30.  ' param choices - e.g. "A,B,C" 
 31.  ' return id - e.g. 1 for A 
 32.  ' work a,c,choice,i,len,n,p,u - will be broken 
 33.  
 34.  ' Make array of choice  
 35.  len = Text.GetLength(choices) 
 36.  p = 1 
 37.  i = 0 
 38.  While p <= len 
 39.    c = Text.GetIndexOf(Text.GetSubTextToEnd(choices,p), ",") 
 40.    If c = 0 Then 
 41.      c = len + 1 
 42.    Else 
 43.      c = c + p - 1 
 44.    EndIf 
 45.    i = i + 1 
 46.    choice[i] = Text.GetSubText(choices, p, c - p) 
 47.    p = c + 1 
 48.  EndWhile 
 49.  ' Dispaly choices  
 50.  n = i 
 51.  For i = 1 To n 
 52.    TextWindow.Write(choice[i]) 
 53.    If i < n - 1 Then 
 54.      TextWindow.Write(" ") 
 55.    ElseIf i = n - 1 Then 
 56.      TextWindow.Write(" or ") 
 57.    EndIf 
 58.  EndFor 
 59.  TextWindow.WriteLine("") 
 60.  ' Input 
 61.  a = TextWindow.Read() 
 62.  ' Convert to upper case 
 63.  u = Text.ConvertToUpperCase(a) 
 64.  ' Search id of choces 
 65.  id = n 
 66.  While choice[id] <> u And 0 < id 
 67.    id = id - 1 
 68.  EndWhile 
 69.EndSub 

Most significant point of this sample is using a subroutine Choice.  So main routine becomes simple.  But, there are many Goto statements.  And if we complete this game with this manner, there will be many TextWindow.WriteLine() operations and Goto statements in the code.  So, the next week I will show simpler sample.