Notes for part III, improving the design using
Download
Report
Transcript Notes for part III, improving the design using
AP Computer Science
Thirteens
• Uses a 10-card board. Ace, 2, … , 10, jack, queen
corresponding to the point values of 1, 2, …, 10,
11, 12.
• Pairs of cards whose point values add up to 13
are selected and removed.
• Kings are selected and removed singly.
• Chances of winning are claimed to be about 1
out of 2.
Tens
• Uses a 13-card board.
• Pairs of cards whose point values add to 10 are
selected and removed
• Quartets (groups of 4) of kings, queens, jacks,
and tens, all of the same rank (for example, J, J, J,
and J).
• Chances of winning are claimed to be about 1 in
8 games.
All Boards
• need a deck
• deal from the deck in the same way
Where should we declare them?
Only the ElevensBoard needs
• containsJQK
• containsPairSum11
But what about
• isLegal
• anotherPlayIsPossible
• All Boards need them but they don`t have the same
behaviour
When
a method needs to be declared but
not defined we use the keyword abstract
This also means the class itself needs to be
declared abstract
Abstract Base Classes can never be initiated
• AbstractClass example = new AbstractClass();
Instead
they can refer to a subclass which is
not abstract
• AbstractClass example = new SubClass();
• Sub classes can still be abstract
Let`s
have a look at the abstract base
class Board in the skeleton project.
Board myBoard = new ElevensBoard();
Methods implemented in ElevensBoard
will
be called over those in Board
If no method is implemented in
ElevensBoard then it will default to Board
myBoard.isLegal(list)
• Calls the ElevensBoard class
myBoard.deal(int)
• Calls the Board class
Poly = many
morph = shape
Interfaces
are Abstract Base Classes with
(usually) all abstract methods
• Declaration, not implementation
Abstract
Base Classes can share methods
and instance variables through
inheritance
The
skeleton project now contains the
Board class and a refactored version of
the ElevensBoard
Complete the skeleton code using the
new and improved design
Add
a class for both the TensBoard and
ThirteensBoard games
• You can copy and paste the code from your
completed ElevensBoard as a starting point
Implement
the methods necessary to play
these alterations to Elevens
To run the games in the GUI you will need to
look at the ElevensGUIRunner class and
decide which (minor) changes to make for
• ThirteensGUIRunner
• TensGUIRunner
This
is a challenging question to answer
mathematically
Instead, we can run a large number of
simulations on the Elevens game and see
what the outcome would have been for
each
This
class will manage the simulation for
you, however there are a few additional
methods we need in our ElevensBoard
• playIfPossible
• A couple helper methods:
playPairSum11IfPossible
playJQKIfPossible
Rather than ask if the board contains a pair sum
of 11 and then hunting it down again in the
playPairSum11IfPossible method, we need to
alter our design.
Change the name of containsPairSum11 to
findPairSum11.
• The new method will return a list with the indexes where
an 11 pair was found
• If no 11 pair was found it will return an empty list
This allows us to call replaceSelectedCards
immediately from the findPairSum11 method
A similar change is needed for containsJQK
findJQK
Change
containsPairSum11 to
findPairSum11
Change containsJQK to findJQK
Update isLegal and anotherPlayIsPossible to
use findPairSum11 and findJQK
Add the playPairSum11IfPossible and
playJQKIfPossible helper (private) methods
Add the playIfPossible method to the
ElevensBoard
• This calls on the helper methods
playPairSum11IfPossible and playJQKIfPossible
Examine
the code in the
ElevensSimulation.java and
ElevensBoard.java files
Alter the code to change
I_AM_DEBUGGIN and GAMES_TO_PLAY
to see how the simulation process works.
So what percentage of the time would you
expect to win at Elevens?