Due date:
For all sections
M, N, and O of ITEC 1630, the assignment must be submitted by Monday April 2 at
7pm.
Submission:
Prepare a single zip file containing
all the source files (.java files, NOT .class files) and the HTML file for running the
applet. Submit this file as an attachment to an email sent to: itec1630@atkinson.yorku.ca. Put in the subject line your section (M,
N, or O), name, student number, and the words "Assignment 3". Please
make sure that your section is entered correctly. For example, if your name is
Jane Doe, and your section is M, your subject line will be "M Jane Doe
999999999 Assignment 3".
Your section must be in capital case. Your submission will not reach your TA
and will therefore NOT be marked if a wrong section code is used in the subject
line. It is highly recommended that you CC yourself on this email. You can
email the program any time before the deadline. A printout of the source files
and HTML file with the following cover page:
/******************************************************************
ITEC 1630 Assignment 3
Family name:
Given name:
Student number:
Section (M, N, or O):
Marking Template: (-10 marks if this template is
not included)
__ 5 Marks – Style (variable naming,
indentation, & Layout)
__ 5 Marks – Comments
__ 15 Marks – Proper use of multithreading
(by inspection of source code)
__ 15 Marks – Planes appear, move
horizontally at a constant speed, and disappear
__ 15 Marks – Bullets appear, move vertically
at a constant speed, and disappear
__ 5 Marks – The gun appears
__ 5 Marks – Correct gun movement
(left/right)
__ 15 Marks – Correct behavior when bullets
hit planes
__ 5 Marks – Correct scoring
__ 5 Marks – Correct showing game over
message
__ 10 Marks – Artistic impression
__ 100 Marks – Total
According to this template the maximum mark you can
get for code that
does not compile is 25/100. If you do not provide a printout of
your
code including this template, the maximum mark is
75/100.
*******************************************************************/
is to be put in the
drop box on the 3rd floor of TEL building before the deadline.
Introduction
For
this assignment, you are required to write a game, where the player has to
navigate an anti-aircraft gun and fire bullets to shoot moving planes. The
player gets certain scores if a plane is shot down successfully. There are a
set number of bullets and planes. The game is over when there are either no
more bullets or no more planes left.
Your Task
Create
your own version of the game as an applet, by implementing the functionalities
described below. Your program must compile under Java 5.0, and run properly on
the computers in TEL2003 under Internet Explorer, Firefox, or AppletViewer.
Applet: Write an HTML file named A3.html, where the size of the
applet is specified. You should use the getWidth() and getHeight() methods of the Applet (or JApplet) class to determine the size of
the applet in your program. Set
the background color to something other than white.
Anti-aircraft Gun: The gun should be represented
by a filled rectangle, and appear at the bottom of the applet. The user of the program can use left
and right keys on the keyboard to control the movement of the gun. In order to learn how to program the
use of the arrow keys, study the program AD.java, which allows the user to move
a colored ball with the help of the arrow keys. Make sure the position of the gun is always within the
boundaries of the applet.
Bullets:
Bullets should
be represented by (small) filled circles. The user of the program can press the
space key to open fire. Each time
the space key is pressed, a bullet should appear in the applet (assuming that
there are still bullets left), moving vertically from the gun to the top of the
applet at a constant speed. The bullet should disappear once it gets to the top
of the applet.
Planes:
Planes are also
represented by filled circles.
Choose a different color than those for the gun and the bullets. At each time interval, a plane appears
from the left border of the applet at a random vertical position and moves
horizontally toward the right border of the applet at a constant speed. Note that there can be more than one
plane on the applet at the same time.
The plane disappears when it reaches the right border of the applet.
Hits: When a bullet hits a plane, both
of them should disappear, and the user scores 10. Display the current score,
along with the number of bullets left, in the applet status bar.
Game
Over: Since
there are a set number of bullets and planes, the game is over when either
bullets or planes run out. Update the status bar to indicate that game is over
and show the final score.
A
screenshot of the game (taken on a Mac) is here.
The parameters of the assignment are open, and you can play with different
parameter settings to make the game more interesting. The only restrictions are
the following: (1) the number of bullets should not be greater than 30, and (2)
the number of planes should not be greater than 20.
Tips
& Traps:
1.
By
default, the keyboard focus is not on the applet when your Webpage containing
the applet is loaded, and therefore the applet won’t respond to your keyboard
input. You have to set the keyboard focus on the applet manually by clicking on
it with your mouse.
2.
Recommended
structure of the program:
·
An
applet class (1) handling interactions with the user, (2) showing the different
objects (planes etc.) on the screen, (3) detecting the hits and updating the
score, (4) determining whether game is over.
You can handle the keyboard events here in this class. When the space key is
processed, create bullet threads accordingly. Other keystrokes can be passed to
a function in the Gun class for further processing (determining which key is
pressed in order to navigate the gun accordingly). Alternatively, you can
delegate the keyboard events handling entirely to the Gun class, similar to what’s done
in the sample program AD.java. However, the former approach is likely to simplify your job and
therefore recommended.
Use a Swing Timer to help create plane threads periodically. For information on Timers, please see the tutorial here
or Section 11.6 of the textbook.
·
A Plane class that extends the Thread class (or implements the Runnable interface, depending on your
implementation). A plane’s position and velocity can be tracked by its x and y coordinates. The plane’s y
coordinate does not change because it moves horizontally. Its velocity in the x direction can be tracked by
having another variable representing the speed (think: use sleep() to control the speed). Try starting with speed = 5 pixels per sleep. You may
adjust them later to make your game more playable. Update the position of the
plane in the run() method.
·
A Bullet class that extends the Thread class (or implements the Runnable interface, depending on your
implementation). Similar to a plane, a bullet’s position and velocity can be
tracked by its x and y coordinates.
Use sleep() to control the bullet’s speed.
·
A Gun class responsible for the
movement of the gun.
3.
Since
there can be multiple planes on the screen at the same time, it is recommended
to use an array in the applet class to keep track of them. You can initialize
the array with the size equal to the maximum number of planes (which is a
parameter of the game). Keep a counter of the number of plane threads generated
so far. The game is over when the
number of plane threads generated exceeds the maximum number of planes. Note
that when a plane reaches the right border, it disappears and the corresponding
thread should stop. The same for the bullets.
4.
A bullet
(represented by a circle) hits a plane (also represented by a circle) when the
distance between their centers is less than the sum of their radii. Hint: The
distance between points (x1, y1) and (x2, y2) is
given by the square root of (x1-x2)2 + (y1-y2)2.
5.
Thread
synchronization (locking) is not required in this assignment.
6.
To simplify
your task, it is OK to use the deprecated method stop() of the Thread class to stop a
thread.