Note: This exercise is based on a practice programming problem used at the ACM Southeast Regional programming contest a few years ago.
Bingo is a popular game played on a 5 by 5 grid, called a card. Normally we associate each column of the card with the letters B-I-N-G-O from left to right. Each square on the grid has a number in it. As numbers are selected, they are marked off the card. When a line of five squares, horizontal, vertical or diagonal, is marked out, the card is a winner. When a player gets a winning card, he or she shouts BINGO!
A sample bingo card is shown below:
B |
I |
N |
G |
O |
12 |
28 |
31 |
49 |
66 |
3 |
26 |
45 |
53 |
75 |
10 |
17 |
33 |
59 |
67 |
7 |
19 |
42 |
55 |
74 |
2 |
23 |
37 |
46 |
70 |
If the numbers 3, 45, 53, 75, and 26 are picked, then there will be a horizontal bingo on the second row.
The five entries in a column are random integers in the range selected from the ranges indicated below:
The goal of this assignment is to design and implement a Java program to play a game of bingo.
BingoCard
ADT (e.g., Java
class) to represent a bingo card. The class should include
appropriate internal state and operations to manipulate that state
during a bingo game. By default, a BingoCard
should be
initialized to a valid set of random values. (You may provide the
ability to initialize the card to specific values if you wish.)
You will, of course, need operations to mark the card appropriately when numbers are called, determine whether the card is a winner, to "print" the card (e.g., return the card as a string so that it can be printed), and so forth.
GameCards
ADT (class) to
represent a collection of bingo cards being played at the same time.
This class should create the number of desired cards and then accept a
sequence of random values in the range 1 to 75 that are played on the
cards. It should detect a winner and make that information available
through an appropriate feature of its interface. It should also be
possible to print the winning card(s) and/or the entire collection.
This is not a particularly difficult assignment. My purposes are:
Note that I do want the classes and methods specified using
preconditions, postconditions, and invariants. You might consider
using my Assert
class (or something similar of your own) to check for
preconditions, etc.. You might want to use Javadoc to document the
code.
If any of you are looking for more of a challenge, you might think
about developing the program, in particular the BingoCard
and GameCards
classes, as an "application framework" for
a whole class of Bingo-like games. By application framework, I mean a
set of abstract base classes, interfaces, and concrete library classes
that can be extended, implemented, or used to provide different
specific games. The set of classes making up the framework represent
the common aspects of the family of programs. The extensions
represent the variable aspects of the family. Here are some
ideas--perhaps all cannot coexist within the same design.
You might want to investigate the Template Method and Strategy design patterns for ideas on how to implement this (and other of the possible enhancements).
BingoCard
class but
should be a separate class that gets its information from a
BingoCard
instance. You would probably need to be able
to selectively choose cards to display, since all in a
GameCards
class will not likely fit on a screen at once.
If you do this, please try to stay with standard Java graphics.
Finally, if you have a programming problem you would like to tackle, then let me know. I could perhaps substitute it for this one, but more likely I might consider it for future individual or group programming exercises.
UP to CSci 691 Assignments page?