# Small Basic Game Programming – Sugoroku like game

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.

Comments (3)
1. I had to look up Sugoroku…

=^)

2. rahuly1039 says:

Sorry I saw this article only now. Thanks for making an article out of the question in such detail. It's great for learning  how to put programming concepts into practical use ðŸ™‚

3. Thank you for your comment, rahuly1039.

Skip to main content