Skip to content
Snippets Groups Projects
Commit 555b20bf authored by iliya's avatar iliya
Browse files

feat: ngl, im a madlad

parent f5c91158
No related branches found
No related tags found
No related merge requests found
package hepia;
import java.util.ArrayList;
import java.util.List;
/**
* AIPlayer
*/
public class AIPlayer implements IPlayer {
private int bet;
private Hand hand;
private List<Hand> splittedHand;
private double balance;
private boolean hasInsurance;
private int insuranceBet;
private boolean hasDoubledBet;
@Override
public boolean hasSplitHand() {
if (splittedHand != null) {
return true;
}
return false;
}
@Override
public void splitHand() {
splittedHand = new ArrayList<>();
for (int i = 0; i < hand.size(); i++) {
splittedHand.add(new Hand(this.hand.getCardFromHand(i)));
}
this.bet *= 2;
}
@Override
public List<Hand> getSplittedHand() {
return splittedHand;
}
@Override
public boolean hasDoubledBet() {
return hasDoubledBet;
......@@ -52,6 +81,7 @@ public class AIPlayer implements IPlayer {
return this.balance;
}
@Override
public void setHand(Hand hand) {
this.hand = hand;
}
......
package hepia;
import java.util.List;
/**
* CroupierPlayer
*/
......@@ -8,6 +10,20 @@ public class CroupierPlayer implements IPlayer {
private Hand hand;
private double balance;
@Override
public boolean hasSplitHand() {
return false;
}
@Override
public void splitHand() {
}
@Override
public List<Hand> getSplittedHand() {
return null;
}
@Override
public boolean hasDoubledBet() {
return false;
......@@ -33,6 +49,7 @@ public class CroupierPlayer implements IPlayer {
return this.balance;
}
@Override
public void setHand(Hand hand) {
this.hand = hand;
}
......
......@@ -111,6 +111,82 @@ public class GameManager {
}
public void askPlayerForInsurance(HumanPlayer player) {
String input = "";
boolean inputCorrect = false;
do {
System.out.println();
System.out.println("Would you like to draw an insurance ? [y/n] ");
input = scanner.next();
switch (input) {
case "y":
inputCorrect = true;
player.setHasInsurance(true);
break;
case "n":
inputCorrect = true;
player.setHasInsurance(false);
break;
default:
break;
}
} while (!inputCorrect);
}
public void askPlayerForDoubleBet(HumanPlayer player) {
String input = "";
boolean inputCorrect = false;
do {
System.out.println();
System.out.println("Would you like to double your bet ? [y/n] ");
input = scanner.next();
switch (input) {
case "y":
inputCorrect = true;
player.setDoubledBet(true);
break;
case "n":
inputCorrect = true;
player.setDoubledBet(false);
break;
default:
break;
}
} while (!inputCorrect);
}
public boolean askPlayerForSplittingPair(IPlayer player) {
String input = "";
boolean inputCorrect = false;
do {
System.out.println();
System.out.println("Would you like to split your hand ? [y/n] ");
input = scanner.next();
switch (input) {
case "y":
inputCorrect = true;
player.splitHand();
return true;
case "n":
inputCorrect = true;
return false;
default:
break;
}
} while (!inputCorrect);
return false;
}
private boolean drawCardOrStop(HumanPlayer hp) {
String input = "";
boolean cardWasDrawn = false;
......@@ -233,64 +309,43 @@ public class GameManager {
private void round() {
// Humans' turns
for (HumanPlayer player : this.humanPlayers) {
System.out.println();
System.out.println(player);
boolean turnContinues = true;
// Ask player if he would like an insurance if the first card drawn
// by the Croupier is an ace
if (player.getHand().isPair()) {
askPlayerForSplittingPair(player);
}
for (Card card : this.croupier.getHand()) {
if (card.getRankName().equals("As")) {
String input = "";
boolean inputCorrect = false;
do {
System.out.println();
System.out.println("Would you like to draw an insurance ? [y/n] ");
input = scanner.next();
switch (input) {
case "y":
inputCorrect = true;
player.setHasInsurance(true);
break;
case "n":
inputCorrect = true;
player.setHasInsurance(false);
break;
default:
break;
}
} while (!inputCorrect);
askPlayerForInsurance(player);
}
}
String input = "";
boolean inputCorrect = false;
do {
System.out.println();
System.out.println("Would you like to double your bet ? [y/n] ");
if (player.hasSplitHand()) {
for (int i = 0; i < player.getSplittedHand().size(); i++) {
System.out.println("======= Player's n°" + (i + 1) + " hand =======");
while (turnContinues) {
player.setHand(player.getSplittedHand().get(i));
displayPlayerHand(player);
input = scanner.next();
turnContinues = drawCardOrStop(player);
switch (input) {
case "y":
inputCorrect = true;
player.setDoubledBet(true);
break;
case "n":
inputCorrect = true;
player.setDoubledBet(false);
break;
default:
if (player.getHand().computeHandValue() >= 21) {
if (player.getHand().computeHandValue() > 21) {
this.bustedPlayers.add(player);
}
break;
}
} while (!inputCorrect);
}
turnContinues = true;
}
} else {
askPlayerForDoubleBet(player);
while (turnContinues) {
displayPlayerHand(player);
turnContinues = drawCardOrStop(player);
if (player.getHand().computeHandValue() >= 21) {
......@@ -301,6 +356,7 @@ public class GameManager {
}
}
}
}
// Croupier's turn
System.out.println(this.croupier);
......@@ -419,10 +475,23 @@ public class GameManager {
System.out.println("=========== Results ============");
computeGainsLosses();
int player_counter = 0;
for (IPlayer player : this.players) {
System.out.println();
System.out.println("======= Player " + (player_counter + 1) + " =======");
if (player.hasSplitHand()) {
for (int i = 0; i < player.getSplittedHand().size(); i++) {
System.out.println("======= Player's n°" + (i + 1) + " hand =======");
player.setHand(player.getSplittedHand().get(i));
System.out.println(player.toString());
}
} else {
System.out.println(player.toString());
}
player_counter++;
}
}
}
}
......@@ -10,6 +10,14 @@ import java.util.List;
public class Hand implements Comparable<Hand>, Iterable<Card> {
private List<Card> hand;
public boolean isPair() {
if (this.hand.size() == 2) {
return (this.hand.get(0).getWeight() == this.hand.get(1).getWeight())
&& !this.hand.get(0).getRankName().equals("As");
}
return false;
}
public Hand(int nbCards) {
this.hand = new ArrayList<>(nbCards);
}
......@@ -19,6 +27,10 @@ public class Hand implements Comparable<Hand>, Iterable<Card> {
this.hand.add(card);
}
public Card getCardFromHand(int idx) {
return this.hand.get(idx);
}
public void addToHand(Card card) {
this.hand.add(card);
}
......
package hepia;
import java.util.ArrayList;
import java.util.List;
/**
* HumanPlayer
*/
public class HumanPlayer implements IPlayer {
private int bet;
private Hand hand;
private List<Hand> splittedHand;
private double balance;
private boolean hasInsurance;
private int insuranceBet;
private boolean hasDoubledBet;
@Override
public boolean hasSplitHand() {
if (splittedHand != null) {
return true;
}
return false;
}
@Override
public void splitHand() {
splittedHand = new ArrayList<>();
for (int i = 0; i < hand.size(); i++) {
splittedHand.add(new Hand(this.hand.getCardFromHand(i)));
}
this.bet *= 2;
}
@Override
public List<Hand> getSplittedHand() {
return splittedHand;
}
@Override
public boolean hasDoubledBet() {
return hasDoubledBet;
......@@ -52,6 +81,7 @@ public class HumanPlayer implements IPlayer {
return this.balance;
}
@Override
public void setHand(Hand hand) {
this.hand = hand;
}
......@@ -95,5 +125,4 @@ public class HumanPlayer implements IPlayer {
return str;
}
}
package hepia;
import java.util.List;
public interface IPlayer {
void placeBet(int valueOfBet);
boolean hasSplitHand();
boolean hasInsurance();
List<Hand> getSplittedHand();
void splitHand();
boolean hasDoubledBet();
int getInsuranceBet();
......@@ -17,6 +25,8 @@ public interface IPlayer {
Hand getHand();
public void setHand(Hand hand);
void receiveHand(Hand hand);
@Override
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment