Computer Science 252
Problem Solving with Java
Fall 2013, The College of Saint Rose
Basketball2 Demo
A working demo of Basketball2 will appear below. Click inside the applet to interact with it.
Basketball2 BlueJ Project
Click here to download a BlueJ project for Basketball2.
Basketball2 Source Code
The Java source code for Basketball2 is below. Click on a file name to download it.
import objectdraw.*; import java.awt.*; /* * A simple basketball program. It adds 2 points to * a displayed score whenever the ball is dragged into * the oval (hoop). * * Jim Teresco, Siena College, CSIS 120, Spring 2011 * The College of Saint Rose, Fall 2013 * Based on example from Williams College, CSCI 134 * * $Id: Basketball2.java 2218 2013-10-18 14:06:39Z terescoj $ */ public class Basketball2 extends WindowController { // Location of the display private static final double DISPLAY_FROM_TOP = 0.5; // display is half way down private static final int DISPLAY_SIZE = 16; // in points // Location and dimensions of the hoop private static final double HOOP_FROM_TOP = 0.25; private static final int HOOP_WIDTH = 100; private static final int HOOP_HEIGHT = 60; // Initial location and dimensions of the ball private static final double BALL_FROM_TOP = 0.75; private static final int BALL_SIZE = 40; private static final Color BALL_COLOR = new Color(250, 115, 10); // instance variables // court elements private FramedOval hoop; private FilledOval ball; private Text scoreboard; // keep track of whether we are dragging the ball private boolean ballGrabbed; // last mouse position for dragging private Location lastMouse; // current score private int score; public void begin() { // draw the court // create scoreboard, adjust font size, center it scoreboard = new Text("Drag the ball to the hoop to score points!", 0, DISPLAY_FROM_TOP * canvas.getHeight(), canvas); scoreboard.setFontSize(DISPLAY_SIZE); scoreboard.moveTo(canvas.getWidth()/2 - scoreboard.getWidth()/2, DISPLAY_FROM_TOP * canvas.getHeight() - scoreboard.getHeight()/2); // draw the hoop hoop = new FramedOval(canvas.getWidth()/2 - HOOP_WIDTH/2, canvas.getHeight() * HOOP_FROM_TOP - HOOP_HEIGHT/2, HOOP_WIDTH, HOOP_HEIGHT, canvas); // draw the ball ball = new FilledOval(canvas.getWidth()/2 - BALL_SIZE/2, canvas.getHeight() * BALL_FROM_TOP - BALL_SIZE/2, BALL_SIZE, BALL_SIZE, canvas); ball.setColor(BALL_COLOR); // initialize score to 0 score = 0; } public void onMousePress(Location point) { // check if we pressed the mouse on the ball if (ball.contains(point)) { // if so, set up for dragging the ball ballGrabbed = true; lastMouse = point; } } public void onMouseDrag(Location point) { // check if we are dragging the ball if (ballGrabbed) { // if so, update position to current ball.move(point.getX() - lastMouse.getX(), point.getY() - lastMouse.getY()); lastMouse = point; } } public void onMouseRelease(Location point) { // check if we are dragging the ball if (ballGrabbed) { // if so, date position to current ball.move(point.getX() - lastMouse.getX(), point.getY() - lastMouse.getY()); // check if the ball is in the hoop if (hoop.contains(point)) { score = score + 2; scoreboard.setText("Basket! Your score is " + score); } else { scoreboard.setText("You missed! Your score is " + score); } scoreboard.moveTo(canvas.getWidth()/2 - scoreboard.getWidth()/2, DISPLAY_FROM_TOP * canvas.getHeight() - scoreboard.getHeight()/2); } ballGrabbed = false; ball.moveTo(canvas.getWidth()/2 - BALL_SIZE/2, canvas.getHeight() * BALL_FROM_TOP - BALL_SIZE/2); // move hoop to new position in case canvas was resized hoop.moveTo((canvas.getWidth()- HOOP_WIDTH)/2, canvas.getHeight()*HOOP_FROM_TOP - HOOP_HEIGHT/2); } }