"All work and No Play makes Jack a dull boy". Yes friends its time to stop programming and have fun, lets play a game with java. Hope you would have heard about the Snake and Ladder game.
Its just a turn-based board game with numbers from 1 to 100. Some numbers may have ladders pointing up to a greater number and some numbers may have snake pointing to lower number.
A player should roll the dice(1 to 6) and based on the dice output should move his pointer to the particular number on the board. Each player's aim is to reach the end of the board(100). Snakes are road blockers which will drop the users pointer to a lower number. Ladder is the stepping stone to reach greater height(number). It can be played as a single or multiple user game.
The following is the java code for a simple simulation of snake and ladder game.
SLGame Class
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package in.techdive.java;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
public class SLGame
{
int boardArray[] = new int[100];
int snakePointers[][] = null;
int ladderPointers[][] = null;
int snakePointersSize = 0;
Map<String, User> userList = new HashMap<String, User>();
int ladderPointersSize = 0;
int currentUserIndex = 0;
boolean multiUser = false;
public SLGame()
{
loadGameBoard();
}
public void loadGameBoard()
{
for (int i = 0; i < 100; i++)
{
boardArray[i] = i + 1;
}
Properties prop = new Properties();
try
{
prop.load(getClass().getClassLoader().getResourceAsStream("game.properties"));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
snakePointersSize = Integer.parseInt(prop.getProperty("snake.pointers.total"));
ladderPointersSize = Integer.parseInt(prop.getProperty("ladder.pointers.total"));
snakePointers = new int[snakePointersSize][2];
ladderPointers = new int[ladderPointersSize][2];
for (int i = 0; i < snakePointersSize; i++)
{
String a[] = prop.getProperty("snake.pointers." + (i + 1)).split(",");
snakePointers[i][0] = Integer.parseInt(a[0]);
snakePointers[i][1] = Integer.parseInt(a[1]);
}
for (int i = 0; i < ladderPointersSize; i++)
{
String a[] = prop.getProperty("ladder.pointers." + (i + 1)).split(",");
ladderPointers[i][0] = Integer.parseInt(a[0]);
ladderPointers[i][1] = Integer.parseInt(a[1]);
}
}
public void displayGameBoard()
{
System.out.println();
for (int i = 99; i >= 0; i--)
{
if (i == 99)
{
System.out.print(" ");
}
System.out.print(boardArray[i]);
System.out.print(" ");
if (i != 99 && (i) % 10 == 0)
{
int f = i - 10;
for (int k = f; k < i; k++)
{
if (k == f)
{
System.out.println();
System.out.print(" ");
}
if (boardArray[k] / 10 == 0)
{
System.out.print(" ");
System.out.print(boardArray[k]);
}
else
{
System.out.print(boardArray[k]);
}
System.out.print(" ");
}
i = f;
System.out.println();
System.out.print(" ");
}
}
displaySLPointers();
}
public void displaySLPointers()
{
System.out.println();
System.out.print("Snake Pointers ");
for (int i = 0; i < snakePointers.length; i++)
{
System.out.print("[" + snakePointers[i][0] + "->" + snakePointers[i][1] + "] ");
}
System.out.println();
System.out.print("Ladder Pointers ");
for (int i = 0; i < ladderPointers.length; i++)
{
System.out.print("[" + ladderPointers[i][0] + "->" + ladderPointers[i][1] + "] ");
}
System.out.println();
}
public void createSingleUser()
{
userList.clear();
int id = 1;
User usr = new User(id);
userList.put("user" + id, usr);
System.out.println("user" + id + " created successfully");
}
public void createMultipleUser()
{
userList.clear();
multiUser = true;
for (int i = 0; i < 2; i++)
{
int id = i + 1;
User usr = new User(id);
userList.put("user" + id, usr);
System.out.println("user" + id + " created successfully");
}
}
public int rollDice()
{
Random rn = new Random();
int op = rn.nextInt(5) + 1;
System.out.println("Dice Value is...." + op);
return op;
}
public void playGame()
{
int i = 0;
System.out.println("Game Started..... ");
do
{
String curName = getCurrentUserName();
System.out
.println("1. Roll Dice \n2. Show Positions \n3. Display Board \n4. Stop Game");
System.out.println("Chance for User..." + curName);
System.out.print("Please provide your option : ");
Scanner in = new Scanner(System.in);
i = in.nextInt();
switch (i)
{
case 1:
int curPos = this.updateUserPositions(curName);
if (curPos >= 100)
{
System.out
.println(curName + " has successfully won the game. \n Game exit");
return;
}
break;
case 2:
this.displayUserPositions();
if (multiUser == true)
currentUserIndex = (currentUserIndex == 2) ? 1 : 0;
break;
case 3:
this.displayGameBoard();
if (multiUser == true)
currentUserIndex = (currentUserIndex == 2) ? 1 : 0;
break;
case 4:
return;
}
System.out.println();
} while (i != 0);
}
public int updateUserPositions(String name)
{
Set keyset = userList.keySet();
if (keyset.contains(name))
{
User ur = userList.get(name);
ur.setCurrentPosition(checkSLPointersForCurPos(ur.getCurrentPosition()
+ this.rollDice()));
System.out.println(name + " current position is " + ur.getCurrentPosition());
return ur.getCurrentPosition();
}
return 0;
}
public void displayUserPositions()
{
Set keyset = userList.keySet();
Iterator it = keyset.iterator();
while (it.hasNext())
{
String key = (String) it.next();
User us = userList.get(key);
System.out.println(key + "current position is...." + us.getCurrentPosition());
}
}
public String getCurrentUserName()
{
if (currentUserIndex == 0)
{
currentUserIndex++;
return "user" + (currentUserIndex);
}
else if (currentUserIndex == 1)
{
if (multiUser == false)
return "user" + currentUserIndex;
else
currentUserIndex++;
return "user" + currentUserIndex;
}
else
{
currentUserIndex--;
return "user" + (currentUserIndex);
}
}
public int checkSLPointersForCurPos(int curPos)
{
for (int i = 0; i < snakePointers.length; i++)
{
if (snakePointers[i][0] == curPos)
{
System.out.println("OOPs!! you have been dropped down by Snake...");
return snakePointers[i][1];
}
}
for (int i = 0; i < ladderPointers.length; i++)
{
if (ladderPointers[i][0] == curPos)
{
System.out.println("Wow!! you have climbed up the ladder...");
return ladderPointers[i][1];
}
}
return curPos;
}
public static void main(String[] args)
{
SLGame sl = new SLGame();
System.out.println("Snake & Ladder Game \n User Options");
System.out.println("1. Start Game \n2. "
+ "Sinlge Player \n3. Multi Players(only 2) \n4. Exit Game");
System.out.print("Please provide your option : ");
int i = 1;
while (i != 0)
{
Scanner in = new Scanner(System.in);
i = in.nextInt();
switch (i)
{
case 1:
if (sl.userList.size() == 0)
{
System.out.println("Please create users and play the game..");
break;
}
else
{
sl.playGame();
}
break;
case 2:
sl.createSingleUser();
break;
case 3:
sl.createMultipleUser();
break;
case 4:
System.exit(0);
}
System.out.println();
System.out.println("Snake & Ladder Game \n Select User Options");
System.out.println("1. Start Game \n2. "
+ "Sinlge Player \n3. Multi Players(only 2) \n4. Exit Game");
System.out.print("Please provide your option : ");
}
}
}
User.java
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package in.techdive.java
public class User
{
int id;
int currentPosition = 0;
public int getCurrentPosition()
{
return currentPosition;
}
public void setCurrentPosition(int currentPosition)
{
this.currentPosition = currentPosition;
}
public User(int uId)
{
id = uId;
}
}
game.properties
snake.pointers.1=98,21
snake.pointers.2=72,34
snake.pointers.3=57,25
snake.pointers.4=49,17
ladder.pointers.total=4
ladder.pointers.1=11,28
ladder.pointers.2=36,62
ladder.pointers.3=24,49
ladder.pointers.4=51,87
Here is the sample output
Output:
User Options
1. Start Game
2. Single Player
3. Multi Players(only 2)
4. Exit Game
Please provide your option : 1
Please create users and play the game..
Snake & Ladder Game
Select User Options
1. Start Game
2. Single Player
3. Multi Players(only 2)
4. Exit Game
Please provide your option : 2
user1 created successfully
Snake & Ladder Game
Select User Options
1. Start Game
2. Single Player
3. Multi Players(only 2)
4. Exit Game
Please provide your option : 1
Game Started.....
1. Roll Dice
2. Show Positions
3. Display Board
4. Stop Game
Chance for User...user1
Please provide your option : 1
Dice Value is....2
user1 current position is 2
1. Roll Dice
2. Show Positions
3. Display Board
4. Stop Game
Chance for User...user1
Please provide your option : 1
Dice Value is....1
user1 current position is 3
1. Roll Dice
2. Show Positions
3. Display Board
4. Stop Game
Chance for User...user1
Please provide your option : 3
100 99 98 97 96 95 94 93 92 91
81 82 83 84 85 86 87 88 89 90
80 79 78 77 76 75 74 73 72 71
61 62 63 64 65 66 67 68 69 70
60 59 58 57 56 55 54 53 52 51
41 42 43 44 45 46 47 48 49 50
40 39 38 37 36 35 34 33 32 31
21 22 23 24 25 26 27 28 29 30
20 19 18 17 16 15 14 13 12 11
1 2 3 4 5 6 7 8 9 10
Snake Pointers [98->21] [72->34] [57->25] [49->17]
Ladder Pointers [11->28] [36->62] [24->49] [51->87]
1. Roll Dice
2. Show Positions
3. Display Board
4. Stop Game
Chance for User...user1
Happy Gaming!