Summary

This fun little project was part of a contest to program the game Ladders and Snakes using Excel. The game is also known as Chutes and Ladders (I guess the more child friendly version for those afraid of snakes). The object was to implement a multi-player game that could have children and/or BOTs players. The game is totally self-contained in Excel with external image files.
Implementation
The game was programmed using Visual Basic for Application (VBA). Images were collected for the board, game pieces, and die sides (6). The board image was sized such that each game square match the worksheet cell size. So each game piece location was a cell.
There are a number of board images available, so I also included an up/down worksheet that identified the starting and ending board position for squares with a ladder or snake. Board positions were 1 (beginning) to 100 (end). Each board position (1-100) was converted into an Excel row and column location using a function. A defined type was used to manage the data. The following code translated the board location into an Excel row and column. Note the use of the offsetcell variable. This allowed the board square (upper left) to be placed in any symmetrical row/column (e.g. B2/2) to allow for game image boarders.
' type for player's piece row and column
Private Type rowcol
row As Integer
column As Integer
End Type
' convert board square to Excel row/col
Private Function getrowcol(space As Integer) As rowcol ' for position return cell location
offsetcell = 1 ' row and column offset from A1 based on board picture and location
Select Case space
Case 1 To 10
getrowcol.row = 10 + offsetcell
getrowcol.column = (space - 1) Mod 10 + 1 + offsetcell
Case 11 To 20
getrowcol.row = 9 + offsetcell
getrowcol.column = 10 - ((space - 1) Mod 10) + offsetcell
Case 21 To 30
getrowcol.row = 8 + offsetcell
getrowcol.column = (space - 1) Mod 10 + 1 + offsetcell
Case 31 To 40
getrowcol.row = 7 + offsetcell
getrowcol.column = 10 - ((space - 1) Mod 10) + offsetcell
Case 41 To 50
getrowcol.row = 6 + offsetcell
getrowcol.column = (space - 1) Mod 10 + 1 + offsetcell
Case 51 To 60
getrowcol.row = 5 + offsetcell
getrowcol.column = 10 - ((space - 1) Mod 10) + offsetcell
Case 61 To 70
getrowcol.row = 4 + offsetcell
getrowcol.column = (space - 1) Mod 10 + 1 + offsetcell
Case 71 To 80
getrowcol.row = 3 + offsetcell
getrowcol.column = 10 - ((space - 1) Mod 10) + offsetcell
Case 81 To 90
getrowcol.row = 2 + offsetcell
getrowcol.column = (space - 1) Mod 10 + 1 + offsetcell
Case 91 To 100
getrowcol.row = 1 + offsetcell
getrowcol.column = 10 - ((space - 1) Mod 10) + offsetcell
End Select
End Function
Each time a player finished their turn a check was performed to see if board square they occupied was a ladder (up) or a snake (down). If the board position changed the player’s position, a new board square was returned. The up/down worksheet list was in sorted, ascending order.
Private Function checkladder(space As Integer) As Integer ' check postion for change
checkladder = space ' due to ladder or snake
' use worksheet from-to
' supports changing the board easily
Set ws = ThisWorkbook.Sheets("UpDown")
' search from for this position
i = 2
Do While (ws.Cells(i, 1) <> "") ' end of list
If ws.Cells(i, 1) = space Then ' match
checkladder = ws.Cells(i, 2) ' return to
Exit Do ' found exit
End If
If ws.Cells(i, 1) > space Then ' values are greater
Exit Do ' so exit early
End If
i = i + 1
Loop
End Function
A defined type was also implemented for the player. Items to track included their name, where they are on the board, their piece image, if the player is a BOT, and where in the cell to place their piece image (pixel offset).
' player type
Private Type player
name As String ' name
position As Integer ' position 1 - 100
color As String ' player piece image file
BOT As Boolean ' is BOT
cellxoffset As Integer ' x position in cell
cellyoffset As Integer ' y position in cell
End Type
Die rolling was done using random numbers and the die image rotated during the roll. Game piece movement also showed moving the player’s game piece through each board square including any ladder or snake movement.
Play continue sequentially between players until some reached the end and won the game. When this happen a winner’s banner was displayed.
Overall this was a fun project. I hadn’t manipulated images on an Excel worksheet before, so it was worth the effort.