Програмирам игра на карти на по-ниско. Целта е да познаете дали втората карта ще бъде по-голяма или по-малка от първата. Програмата работи добре с изключение на един проблем. В играта играчът започва с 5 кредита. Всяко предположение той печели един кредит до 10 или ако не е познал, губи 1 кредит, до 0. При 0 или 10 той трябва да получи Вие печелите! или Губиш! съобщение, което той прави, но проблемът е, че програмата така или иначе прави едно допълнително теглене след това.
Първо използвах цикъл while, след това опитах цикъл do while, но проблемът е същият.
Ето основния метод:
public static void main(String[] args)
{
HigherLower h = new HigherLower();
boolean higher; // higher = true; lower = false
Draw draw = new Draw(); Deck deck = new Deck();
Card card1; Card card2;
int credits = 5;
boolean playing = true;
while(playing)
{
if(credits == 0)
{
System.out.println("\nYou lose !");
playing = false;
}
else if(credits == 10)
{
System.out.println("\nYou win !");
playing = false;
}
System.out.println("\n\n\n\n NEW DRAW : ");
card1 = draw.drawCard(deck);
System.out.print(card1.getName());
boolean choice = h.getRightInput();
card2 = draw.drawCard(deck);
if((card2.getValue() > card1.getValue() && choice == true)
|| (card2.getValue() < card1.getValue() && choice == false))
{
credits++;
System.out.printf("Second card is %s", card2.getName());
System.out.printf("\n\nYou guessed right ! "
+ "Now you have %d credits", credits);
}
else
{
credits--;
System.out.printf("Second card is %s", card2.getName());
System.out.printf("\n\nYou guessed wrong ! "
+ "Now you have %d credits", credits);
}
}
}
Ето и другите класове, просто ще ги натрупам един до друг:
public class Card
{
String name;
int value;
Card(String name, int value)
{
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public class Deck
{
Card Joker = new Card("Joker", 1);
Card Two = new Card("2", 2);
Card Three = new Card("3", 3);
Card Four = new Card("4", 4);
Card Five = new Card("5", 5);
Card Six = new Card("6", 6);
Card Seven = new Card("7", 7);
Card Eight = new Card("8", 8);
Card Nine = new Card("9", 9);
Card Ten = new Card("10", 10);
Card Jack = new Card("J", 11);
Card Queen = new Card("Q", 12);
Card King = new Card("K", 13);
Card Ace = new Card("A", 14);
Card[] deck = new Card[]{Joker, Two, Three, Four, Five,
Six, Seven, Eight, Nine, Ten,
Jack, Queen, King, Ace};
}
import java.util.Random;
public class Draw
{
Random random = new Random();
public Card drawCard(Deck deck)
{
int maxNumber = deck.deck.length ;
int draw = random.nextInt(maxNumber);
Card drawedCard = deck.deck[draw];
return drawedCard;
}
}
public class HigherLower
{
Scanner sc = new Scanner(System.in);
public boolean getRightInput()
{
while(true)
{
System.out.println("\n (H)igher or (L)ower ? ");
String s = sc.next();
char c = s.charAt(0);
if(c == 'H' || c == 'h')
{
return true;
}
else if(c == 'L' || c == 'l')
{
return false;
}
else
{
System.out.println("Give valid input ! H or L");
}
}
}
}