Here is a simple game played with a pack of cards, usually by 2 or more players. Initially 'n' number of cards are distributed to all players. In each round, a player is given a chance to select a single card from his own set of cards. The player with maximum card number wins the round and gets a point. At last, player with most number of points wins the game. Friends, its time to play around in Java with cards. Happy Gaming!
Game.java
public interface Game
{
void playGame(int numberOfPlayers);
void displayWinners();
}
CARD.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CARD implements Comparable<CARD>
{
private CARD()
{
}
public enum CARDNUMBER
{
TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), TEN(10), JACK(11), QUEEN(12), KING(13), ACE(
14);
private int ord;
private CARDNUMBER(int i)
{
this.ord = i;
}
/**
* Returns the ordinal position of the enum
*
* @return int ord
*/
public int getOrd()
{
return ord;
}
}
public enum CARDTYPE
{
CLUB, DIAMOND, HEARTS, SPADE;
}
private CARDNUMBER cdNumber;
private CARDTYPE cdType;
public CARDNUMBER getCdNumber()
{
return cdNumber;
}
public CARDTYPE getCdType()
{
return cdType;
}
public static List<CARD> getPackOfCards()
{
List<CARD> crdLst = new ArrayList<CARD>();
for (CARDTYPE types : CARDTYPE.values())
{
for (CARDNUMBER cNums : CARDNUMBER.values())
{
CARD cd = new CARD();
cd.cdNumber = cNums;
cd.cdType = types;
crdLst.add(cd);
}
}
return crdLst;
}
public static void shuffleCards(List<CARD> cards)
{
Collections.shuffle(cards);
}
@Override
public int compareTo(CARD o)
{
if (this.getCdNumber() == o.getCdNumber())
{
return 0;
}
else if (this.getCdNumber().getOrd() > o.getCdNumber().getOrd())
{
return 1;
}
else
return -1;
}
@Override
public String toString()
{
return "CARD [cdNumber=" + cdNumber + ", cdType=" + cdType + "]";
}
}
Player.java
public class Player implements Comparable<Player>
{
/**
* @param id
*/
public Player(int id)
{
this.playerId = id;
}
private int playerId;
private String playerName;
private int points;
private String result;
public int getPlayerId()
{
return playerId;
}
public void setPlayerId(int playerId)
{
this.playerId = playerId;
}
public String getPlayerName()
{
return playerName;
}
public void setPlayerName(String playerName)
{
this.playerName = playerName;
}
public int getPoints()
{
return points;
}
public void setPoints(int points)
{
this.points = points;
}
public String getResult()
{
return result;
}
public void setResult(String result)
{
this.result = result;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + playerId;
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Player other = (Player) obj;
if (playerId != other.playerId)
return false;
return true;
}
@Override
public int compareTo(Player o)
{
if (this.getPoints() == o.getPoints())
{
return 0;
}
else if (this.getPoints() > o.getPoints())
{
return 1;
}
else
return -1;
}
}
CardGame.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class CardGame implements Game
{
private List<CARD> cards;
private List<Player> players = new ArrayList<Player>();
private Map<Player, List<CARD>> cardsPlayerMap = new HashMap<Player, List<CARD>>();
private int currentPlayerIdx = 0;
private static final int numberOfCardsPerPlayer = 4;
private int numberOfPlayers = 2;
public int getNumberOfPlayers()
{
return numberOfPlayers;
}
public List<Player> getPlayers()
{
return players;
}
public CardGame()
{
cards = CARD.getPackOfCards();
}
public void distributeCardsForPlayers(List<Player> plys)
{
this.players = plys;
CARD.shuffleCards(cards);
if (cardsPlayerMap.size() == 0)
cardsPlayerMap.clear();
int m = 0;
for (Player pl : players)
{
pl.setPoints(0);
List<CARD> cds = new ArrayList<CARD>();
int cardLimit = m + numberOfCardsPerPlayer;
for (int i = m; i < cardLimit; i++)
{
cds.add(cards.get(i));
}
m = cardLimit;
cardsPlayerMap.put(pl, cds);
}
}
public void playGame(int numberOfPlayers)
{
this.numberOfPlayers = numberOfPlayers;
createMultipleUser(numberOfPlayers);
int i = 0;
System.out.println("Game Started..... ");
List<CARD> selCards = new ArrayList<CARD>();
CARD maxCard = null;
Player maxPlayer = new Player(0);
distributeCardsForPlayers(players);
for (int j = 0; j < numberOfCardsPerPlayer; j++)
{
int s = 0;
do
{
Player player = getNextPlayer();
System.out.println("1. display Cards available \n2. Stop Game");
System.out.println("Chance for Player..." + player.getPlayerId());
System.out.print("Please provide your option : ");
Scanner in = new Scanner(System.in);
i = in.nextInt();
switch (i)
{
case 1:
displayCardsForPlayer(player);
System.out.println("Select your card number :");
in = new Scanner(System.in);
int m = in.nextInt();
CARD c = cardsPlayerMap.get(player).get(m - 1);
System.out.println("Card Selected -> " + c.toString());
cardsPlayerMap.get(player).remove(m - 1);
if (maxCard == null)
{
maxCard = c;
maxPlayer = player;
}
else
{
if (maxCard.compareTo(c) < 0)
{
maxCard = c;
maxPlayer = player;
}
}
selCards.add(c);
break;
case 2:
return;
}
System.out.println();
s++;
} while (s < players.size());
if (maxPlayer.getPlayerId() > 0)
maxPlayer.setPoints((maxPlayer.getPoints()) + 1);
maxCard = null;
maxPlayer = null;
displayScores();
}
}
private void displayScores()
{
for (Player pl : players)
{
System.out.println("Player " + pl.getPlayerId() + " Score -> " + pl.getPoints());
}
}
private void displayCardsForPlayer(Player pl)
{
int cards = cardsPlayerMap.get(pl).size();
for (int i = 0; i < cards;)
{
System.out.print((++i) + " ");
}
}
public void displayWinners()
{
Collections.sort(players);
int maxPoints = 0;
Map<String, List<Player>> playerPointsMap = new TreeMap<String, List<Player>>();
for (Player p : players)
{
maxPoints = p.getPoints();
if (playerPointsMap.get(maxPoints + "") != null)
{
List<Player> lst = playerPointsMap.get(maxPoints + "");
lst.add(p);
playerPointsMap.put(maxPoints + "", lst);
}
else
{
List<Player> lst = new ArrayList<Player>();
lst.add(p);
playerPointsMap.put(maxPoints + "", lst);
}
}
String pts = new Integer(players.get(players.size() - 1).getPoints()).toString();
if (playerPointsMap.get(pts) != null && playerPointsMap.get(pts).size() > 1)
{
System.out.println("Its a draw among the following players ");
for (Player p : players)
{
System.out.println("Player -> " + p.getPlayerId());
}
}
else if (playerPointsMap.get(pts) != null)
{
System.out.println("And the winner is :");
System.out.println("Player -> " + playerPointsMap.get(pts).get(0).getPlayerId());
}
}
private void createMultipleUser(int j)
{
if (players.size() != 0)
{
players.clear();
}
for (int i = 0; i < j; i++)
{
int id = i + 1;
Player usr = new Player(id);
players.add(usr);
}
distributeCardsForPlayers(players);
}
private Player getNextPlayer()
{
Player p = null;
if (currentPlayerIdx == players.size())
{
currentPlayerIdx = 1;
p = players.get(0);
}
else
{
p = players.get(currentPlayerIdx);
currentPlayerIdx++;
}
return p;
}
}
CardGameDemo.java
import java.util.Scanner;
public class CardGameDemo
{
public CardGameDemo()
{
}
/**
* @param args
*/
public static void main(String[] args)
{
CardGame sl = new CardGame();
System.out.println("Card Game \n Player Options");
System.out.println("1. Start Game \n \n2. 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:
System.out.println("Provide the Number of Players( should be greater than 1 and less than 4) : ");
in = new Scanner(System.in);
i = in.nextInt();
sl.playGame(i);
sl.displayWinners();
break;
case 2:
System.exit(0);
}
System.out.println();
System.out.println("Card Game \n Select User Options");
System.out.println("1. Start Game \n2. Exit Game");
System.out.print("Please provide your option : ");
}
}
}
Output:
Player Options
1. Start Game
2. Exit Game
Please provide your option : 1
Provide the Number of Players( should be greater than 1 and less than 4) :
2
Game Started.....
1. display Cards available
2. Stop Game
Chance for Player...1
Please provide your option : 1
1 2 3 4 Select your card number :
1
Card Selected -> CARD [cdNumber=JACK, cdType=DIAMOND]
1. display Cards available
2. Stop Game
Chance for Player...2
Please provide your option : 1
1 2 3 4 Select your card number :
1
Card Selected -> CARD [cdNumber=NINE, cdType=SPADE]
Player 1 Score -> 1
Player 2 Score -> 0
1. display Cards available
2. Stop Game
Chance for Player...1
Please provide your option : 1
1 2 3 Select your card number :
1
Card Selected -> CARD [cdNumber=SIX, cdType=CLUB]
1. display Cards available
2. Stop Game
Chance for Player...2
Please provide your option : 1
1 2 3 Select your card number :
1
Card Selected -> CARD [cdNumber=KING, cdType=DIAMOND]
Player 1 Score -> 1
Player 2 Score -> 1
1. display Cards available
2. Stop Game
Chance for Player...1
Please provide your option : 1
1 2 Select your card number :
1
Card Selected -> CARD [cdNumber=SIX, cdType=DIAMOND]
1. display Cards available
2. Stop Game
Chance for Player...2
Please provide your option : 1
1 2 Select your card number :
1
Card Selected -> CARD [cdNumber=ACE, cdType=CLUB]
Player 1 Score -> 1
Player 2 Score -> 2
1. display Cards available
2. Stop Game
Chance for Player...1
Please provide your option : 1
1 Select your card number :
1
Card Selected -> CARD [cdNumber=SEVEN, cdType=HEARTS]
1. display Cards available
2. Stop Game
Chance for Player...2
Please provide your option : 1
1 Select your card number :
1
Card Selected -> CARD [cdNumber=TEN, cdType=DIAMOND]
Player 1 Score -> 1
Player 2 Score -> 3
And the winner is :
Player -> 2
Card Game
Select User Options
1. Start Game
2. Exit Game
Please provide your option : 2