Object oriented programs divide major responsibilities into classes. Each class is responsible for 1 part, or a set of related parts, of the overall program.
A program’s user interface is part of the overall program. It can be written using 1 or more classes with instance methods and instance variables, just like the rest of the program.
Blackjack UI
Consider the user interface for a simplified version of Blackjack. The mechanics of the game are already implemented in a Blackjack
class. The Blackjack
class is a client of (uses) other classes such as Card
and Hand
.
Example program run
Money: $1,000.00
Bet: $100
Dealer: [10C]
Player: [10D, 8H]
Hit? (y/n): n
Dealer: [10C, 7S]
Player: [10D, 8H]
Result: win
Money: $1,100.00
Play again (y/n): n
This example shows the output in US dollars. The code below uses the computer’s settings to determine the currency.
BlackjackUI
class
The BlackjackUI
class is responsible for handling interactions with the user. This includes:
- accepting and validating input
- running the methods of
Blackjack
in the correct order - producing formatted output
The Class writing order should be followed, as with any other class.
Public method headers
/**
* Constructs a blackjack game with $1,000 in player bankroll
*/
public BlackjackUI()
{ /* to be implemented */ }
/**
* Plays a single hand of blackjack
*/
public void playHand()
{ /* to be implemented */ }
/**
* Plays blackjack hands until the user chooses to quit
*/
public void playHandsUntilQuit()
{ /* to be implemented */ }
The public methods of BlackjackUI
correspond to the functionality it offers to client classes (classes that use the BlackjackUI
class).
Instance variables
private Blackjack bj;
private Scanner fromKeyboard;
private NumberFormat nf;
The instance variables of BlackjackUI
exist to support its public methods.
Implementing Blackjack is the responsiblity of the Blackjack
class. BlackjackUI
stores a reference to an object of type Blackjack
.
BlackjackUI
stores a reference to a Scanner
object to accept input from the user.
BlackjackUI
stores a reference to NumberFormat
object to produce formatted output of currency.
Selected implementation code
public void playHand()
{
bj.placeInitialBetAndDealCards(getValidBet());
printHands();
playPlayersHand();
bj.playDealersHand();
printHands();
displayResult();
bj.resolveBetsAndReset();
}
The playHand
method calls a combination of Blackjack
and BlackjackUI
methods. The Blackjack
methods are prefixed by bj.
because they are run on the object of type Blackjack
. The BlackjackUI
methods have no prefix because they are run on the implicit parameter (the same BlackjackUI
object on which playHand
was run).
It is possible to prefix each call to a BlackjackUI
instance method with this.
. Prefixing the method calls with this.
would not change the behavior.
The BlackjackUI
methods are private because they are intended for use only by other methods of BlackjackUI
. Implementations of these methods can be found in the Java files near the bottom of this page.
public void playHandsUntilQuit()
{
System.out.println("Money: " + nf.format(bj.getPlayersMoney()));
boolean playAgain = true;
while(playAgain)
{
playHand();
System.out.println("\nMoney: " + nf.format(bj.getPlayersMoney()));
if(bj.getPlayersMoney() > 0)
{
System.out.print("Play again (y/n): ");
playAgain = fromKeyboard.next().toLowerCase().startsWith("y");
}
else
playAgain = false;
}
}
The playHandsUntilQuit
method calls the playHand
method to handle playing a single hand. playHandsUntilQuit
uses the NumberFormat
object to produce formatted output of currency.
Completed code
The Blackjack
class is a stub. The implementation is designed to facilitate demonstration of the UI. The implementation code does not match, or even resemble, what would be used for an actual Blackjack game. All method documentation has been removed to avoid confusion about what each method would do if actually implemented, vs what each method does in the stub.
The Blackjack Lab requires coding both the game mechanics and a text based user interface. Test code is provided, including for the user interface.
Help & comments
Get help from AP CS Tutor Brandon Horn