Card Shark
This game is based loosely on the Money round of a TV Game show. A card is turned over, and you gamble whether the next card is higher or lower (a tie loses).
- Make a project with the Card, Deck, Player, and SinglePlayer classes.
- Make a subclass of Player and overload the
guessand themakeBetmethods to improve the default strategy - Run the Muliplayer with your new subclass to try it out agains the default Player class
- When you are ready, compete against your group members' Player in Multiplayer or Tourney.
- Combine forces and see if you can make a subclass of Player called
GroupX(with X as your group's name) to run a Tourney against the other groups
When you think you have a good subclass of Player, it can be used with Multiplayer and Tourney to compete with other students' subclasses.
Player.java
public class Player implements Comparable<Player>
{
private String name;
private int money;
private int points;
public Player()
{
super("player");
}
public Player(String name)
{
this.setName(name);
setMoney(100);
}
// Make an algorithm of when to predict higher or lower -
public String guess(Card showing){
if (Math.random() > .5)
return "higher";
return "lower";
}
// Make an algorithm for how much to bet....
public int makeBet(Card card)
{
if (getMoney()<50)
return money;
return 50;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public int randInt(int a, int b)
{
int min=Math.min(a, b);
int max=Math.max(a, b);
return min+(int)((max-min+1)*Math.random());
}
public int compareTo(Player other)
{
return this.getMoney()-((Player)(other)).getMoney();
}
public void addPoints(int i) {
points+=i;
}
public int getPoints()
{
return points;
}
}
Card.java
public class Card
{
private int value; //1 to 13
private String suit; // S,H,D, or C
public Card(int value, String suit){
this.value=value;
this.suit=suit.toUpperCase();
}
public String toString(){
if (value==1)
return "A"+suit;
if (value>10)
return "JQK".substring(value-11, value-10)+suit;
return value+suit;
}
public int getValue()
{
return value;
}
public String getSuit()
{
return suit;
}
}
Deck.java
public class Deck
{
private Card[] deck;
public Deck()
{
deck = new Card[52];
int i=0;
for (int s=0; s<4; s++)
for (int v=1; v<=13; v++)
{
deck[i]=new Card(v,"SHDC".substring(s, s+1));
i++;
}
for (int j=0; j<900; j++)
{
int a=rand();
int b=rand();
Card temp=deck[a];
deck[a]=deck[b];
deck[b]=temp;
}
}
public int rand()
{
return (int)(52*Math.random());
}
public Card getCard(int i)
{
return deck[i];
}
}
SinglePlayer.java
public class SinglePlayer {
public static void main(String[] args) {
Player p=new Player("Player 1");
Deck d = new Deck();
int turn=1;
while(turn <= 10 && p.getMoney()>0)
{
Card card=d.getCard(turn-1);
Card next=d.getCard(turn);
int diff = next.getValue()-card.getValue();
int bet=p.makeBet(card);
String guess = p.guess(card);
System.out.print("Turn "+turn+": "+card+" - ");
System.out.print(p.getName()+" has "+p.getMoney()+" bets "+bet+" guesses "+guess);
System.out.print("- next card is "+next+" ");
if (guess.equals("higher") && diff>0 ||
guess.equals("lower") && diff<0 )
{
System.out.println(" WIN!");
p.setMoney(p.getMoney()+bet);
}else {
System.out.println(" LOSE!");
p.setMoney(p.getMoney()-bet);
}
turn++;
}
System.out.println(p.getName()+" ends with "+p.getMoney());
}
}
Multiplayer.java
import java.util.ArrayList;
import java.util.Collections;
public class Multiplayer
{
public static boolean notAllBroke(ArrayList<Player> p)
{
for (int i=0; i< p.size(); i++)
if (p.get(i).getMoney()>0)
return true;
return false;
}
public static void main(String[] args) {
ArrayList<Player> players = new ArrayList<Player>();
players.add(new Player("Player 1"));
players.add(new Player("Player 2"));
players.add(new Player("Player 3"));
//players.add(new RiskyPlayer("Risky"));
Deck d = new Deck();
int turn=1;
while(turn <= 10 && notAllBroke(players))
{
Card card=d.getCard(turn-1);
Card next=d.getCard(turn);
int diff = next.getValue()-card.getValue();
System.out.print("Turn "+turn+": ");
for (Player p:players)
{
if (p.getMoney()>0)
{
int bet=p.makeBet(card);
String guess = p.guess(card);
if (guess.equals("higher") && diff>0 ||
guess.equals("lower") && diff<0 )
{
System.out.print(p.getName()+" wins "+bet+" ");
p.setMoney(p.getMoney()+bet);
}else {
System.out.print(p.getName()+" loses "+bet+" ");
p.setMoney(p.getMoney()-bet);
}
}
}
System.out.println();
turn++;
}
Collections.sort(players);
for (Player p:players)
System.out.println(p.getName()+" ends with $"+p.getMoney());
}
}
Tourney.java
import java.util.ArrayList;
import java.util.Collections;
public class Tourney
{
public static boolean notAllBroke(ArrayList<Player> p)
{
for (int i=0; i< p.size(); i++)
if (p.get(i).getMoney()>0)
return true;
return false;
}
public static void main(String[] args) {
ArrayList<Player> players = new ArrayList<Player>();
players.add(new Player("Player 1"));
//players.add(new RiskyPlayer("RiskyPlayer"));
players.add(new Player("Player 3"));
for(int games=0; games<10000; games++)
{
Deck d = new Deck();
int turn=1;
while(turn <= 10 && notAllBroke(players))
{
Card card=d.getCard(turn-1);
Card next=d.getCard(turn);
int diff = next.getValue()-card.getValue();
for (Player p:players)
{
if(p.getMoney()>0)
{
int bet=p.makeBet(card);
String guess = p.guess(card);
if (guess.equals("higher") && diff>0 ||
guess.equals("lower") && diff<0 )
{
p.setMoney(p.getMoney()+bet);
}else {
p.setMoney(p.getMoney()-bet);
}
}
}
turn++;
}
// win is 2 points, tie is 1 point
Collections.sort(players);
int max=players.get(0).getMoney();
if (players.get(1).getMoney()<max)
players.get(0).addPoints(2);
else
{
int i=0;
while (i<players.size() && players.get(i).getMoney()==max)
{
players.get(i).addPoints(1);
i++;
}
}
for (Player p:players)
{
System.out.print(p.getName()+" - "+p.getPoints()+" ");
p.setMoney(100);
}
System.out.println();
}
}
}
