Small Basic Game Programming - Sugoroku like game
Published Feb 12 2019 03:19 PM 311 Views
Iron Contributor
First published on MSDN on Aug 04, 2014

Authored by Nonki Takahashi


This program is also from an article in Small Basic Forum Help with Small Basic program posted by Rahul Yedida .  The question was "I am trying to make a Monopoly game in Small Basic TextWindow. I have declared the 2d arrays for the squares, chance and community chest. What should my game loop be like?"  So I made a sample program for that.


Latest program is published as DFZ772-0 .  But this program doesn't work in browser.  So, please import in Small Basic IDE.  This program is not completed but has comments instead.


Main Loop


Main is structured with double loop.  The outer loop is to repeat game.  The inner loop is for each player's move.



1. ' Monopoly Like Game 0.2a

2. ' Program ID DFZ772-0

3. nextGame = "True"

4. ' Declare arrays for the squares, chance and community chest

5. InitBoard ( )

6. While nextGame

7. ' Prepare the game

8. playerPos [ 1 ] = 1 ' start position for player 1

9. playerPos [ 2 ] = 1 ' start position for player 2

10. DrawBoard ( )

11. ' Start the game

12. continue = "True"

13. While continue

14. ' Play by player 1

15. player = 1

16. Play ( )

17. If continue Then

18. ' Play by player 2

19. player = 2

20. Play ( )

21. EndIf

22. EndWhile

23. ' Game ending

24. ' Ask next game

25. EndWhile


Board Initialization


This subroutine initializes the game board.  And calculates column and row positions of all squares.



27. Sub InitBoard

28. colMax = 11

29. rowMax = 11

30. playerColor [ 1 ] = "Yellow"

31. playerColor [ 2 ] = "Cyan"

32. posMax = ( colMax + rowMax - 2 ) * 2

33. For i = 1 To posMax

34. If ( 1 < = i ) And ( i < rowMax ) Then

35. colPos [ i ] = 1

36. rowPos [ i ] = rowMax + 1 - i

37. ElseIf ( rowMax < = i ) And ( i < = rowMax + colMax - 2 ) Then

38. colPos [ i ] = i - rowMax + 1

39. rowPos [ i ] = 1

40. ElseIf ( colMax + rowMax - 1 < = i ) And ( i < = 2 * rowMax + colMax - 2 ) Then

41. colPos [ i ] = colMax

42. rowPos [ i ] = i - rowMax - colMax + 2

43. ElseIf ( 2 * colMax + rowMax - 1 < = i ) And ( i < = posMax ) Then

44. colPos [ i ] = posMax - i + 2

45. rowPos [ i ] = rowMax

46. EndIf

47. EndFor

48. EndSub


Drawing a Board


This subroutine draws all squares.



50. Sub DrawBoard

51. For pos = 1 To posMax

52. DrawSquare ( )

53. EndFor

54. EndSub


Drawing a Square


This subroutine draws a square.  For drawing any place In TextWindow, you can use TextWindow.CursorLeft and TextWindow.CursorTop.



56. Sub DrawSquare

57. ' param pos

58. col = colPos [ pos ]

59. row = rowPos [ pos ]

60. left = ( col - 1 ) * 7

61. top = ( row - 1 ) * 2

62. ' Draw top row

63. TextWindow . CursorLeft = left

64. TextWindow . CursorTop = top

65. TextWindow . Write ( "+------+" )

66. top = top + 1

67. ' Draw center row

68. TextWindow . CursorLeft = left

69. TextWindow . CursorTop = top

70. TextWindow . Write ( "|" )

71. If pos = 1 Then

72. TextWindow . Write ( "GO" )

73. Else

74. If pos < 10 Then

75. TextWindow . Write ( " " )

76. EndIf

77. TextWindow . Write ( pos )

78. EndIf

79. TextWindow . ForegroundColor = playerColor [ 1 ]

80. TextWindow . Write ( " " ) ' reserved for player 1

81. If playerPos [ 1 ] = pos Then

82. TextWindow . Write ( "o" )

83. Else

84. TextWindow . Write ( " " )

85. EndIf

86. TextWindow . ForegroundColor = playerColor [ 2 ]

87. TextWindow . Write ( " " ) ' reserved for player 2

88. If playerPos [ 2 ] = pos Then

89. TextWindow . Write ( "o" )

90. Else

91. TextWindow . Write ( " " )

92. EndIf

93. TextWindow . ForegroundColor = "Gray"

94. TextWindow . Write ( "|" )

95. top = top + 1

96. ' Draw bottom row

97. TextWindow . CursorLeft = left

98. TextWindow . CursorTop = top

99. TextWindow . Write ( "+------+" )

100. top = top + 1

101. EndSub


A Move for a Player


This subroutine plays a move for a player.  It rolls a dice and moves a piece as the same as the dice number.  In nature, there are some events at a square but this time only comments are there.



103. Sub Play

104. ' Input some key to roll the dice

105. TextWindow . CursorLeft = 0

106. TextWindow . CursorTop = rowMax * 2 + 1

107. TextWindow . ForegroundColor = playerColor [ player ]

108. TextWindow . Write ( "Player " + player + " --> " )

109. TextWindow . ForegroundColor = "Gray"

110. TextWindow . Write ( "Press enter..." )

111. TextWindow . Read ( )

112. TextWindow . CursorLeft = 13

113. TextWindow . CursorTop = TextWindow . CursorTop - 1

114. ' Role the dice

115. d = Math . GetRandomNumber ( 6 )

116. TextWindow . ForegroundColor = playerColor [ player ]

117. TextWindow . WriteLine ( d + " " )

118. TextWindow . ForegroundColor = "Gray"

119. For i = 1 To d

120. MoveToNext ( )

121. DrawBoard ( )

122. Sound . PlayClickAndWait ( )

123. EndFor

124. ' Show the player's tactics

125. ' If the new position is owned by the other player

126. ' Try to deduct the rent

127. ' If player has no rent

128. ' Sell one of his properties

129. ' Calculate the remainder

130. ' Judge of game end

131. EndSub


A Move for a Piece in a Board


The position of a piece is expressed as an array playerPos.



133. Sub MoveToNext

134. p = playerPos [ player ]

135. p = p + 1

136. If p > posMax Then

137. p = 1

138. EndIf

139. playerPos [ player ] = p

140. EndSub


The important point of today's program is using TextWindow.CursorLeft and TextWindow.CursorTop for movement.  But this program doesn't work well in browser.  Please import into Small Basic IDE and run.


With the manner above, you can create TextWindow games such like shooting or scrolling games.


Next week, I'm going to try games with GraphicsWindow.  See you next week.

Version history
Last update:
‎Feb 12 2019 03:19 PM
Updated by: