CS 145 Lab 3 – Methods
Welcome to lab 3!
If you have checkpoints from the last lab to show your instructor or TA, do so immediately. No credit will be given if you have not already completed the work, nor will credit be given after the first 10 minutes of this lab.
Work with a partner that you have not worked with before.
Our goal today is to learn more about methods, which let us extract a sequence of code into a self-contained and reusable “recipe.” Methods have some very nice properties:
- They give us a chance to ascribe meaningful names to possibly elaborate sequences of code. The names help us and the readers of our code understand what it does.
- They simplify the code that calls them. We say that methods abstract away low-level details and enable to us write programs at a much higher level of thinking.
- They can be tested independently of the code that calls them.
Checkpoint 1
Person A types.
Play Lightbot. Complete the first two worlds: Basics and Procedures.
Show your completed world 2 screen to your instructor or TA. If you are completing this outside of lab, take a screenshot.
Checkpoint 2
Person B types. Open your IntelliJ project and create a package named labs.lab03
.
Java includes a pretty fun class named Robot
that lets you programmatically hijack the mouse, grab screenshots, and issue keypresses. You can use Robot
to interact with the computer as a human would, generating user input that affects any program.
In this checkpoint, you’ll use this class to control a drawing program. Follow these steps to get it up and running.
- Create a class named
Square
with amain
method. - Open up a paint program or find one online. Select a drawing tool like the paintbrush or pencil.
- Tile your windows so that both IntelliJ and the paint program are visible, with the paint program on the left—nearer the origin of your display. Two-monitor extended desktops make this pretty easy! Bear in mind that the origin of your display is the top-left corner, with the y-axis pointing down. This is flipped from your graphing calculator.
- In the
main
method of yourSquare
class, construct an instance of theRobot
class. We have been constructing instances for a while now with code like this:You construct an instance ofScanner in = new Scanner(System.in); Random generator = new Random();
Robot
in a similar way. Be sure to pick a meaningful name. - You’ll see some red in IntelliJ when you try to make an instance. Hover over the red and you’ll learn that the code can throw something called an exception. Click the quick fix to add a
throws
clause to yourmain
method. - Write a method named
drawDot
to draw a single dot by clicking the mouse at a location on the screen. Accept three parameters: aRobot
and twoint
s, one for anx
pixel coordinate and one fory
. Use the methods ofRobot
to simulate a mouse click (which is a press followed by a release) at the given location. Check out the documentation to see what methods are available. Use the left mouse button, which is button 1. Note, however, that you cannot pass a 1 as a parameter. Read the documentation to see what parameters are legal. - Include a slight delay after pressing and releasing so that slow humans like us can see what the
Robot
is doing as your program executes.Robot
has a method for this. - Test your
drawDot
method by calling it frommain
. Pass as actual parameters three values: theRobot
you made in step 4 and the location of a pixel somewhere in the drawing canvas of your paint program. You should see the cursor move and a dot appear on the canvas. Do not continue until you see this single dot in your paint program. - Write a method named
drawLineWithFiveDots
. Accept five parameters: aRobot
, anx
location, ay
location, anint
nameddeltaX
, and anint
nameddeltaY
. It draws a first dot at (x
,y
), a second dot at (x + deltaX
,y + deltaY
), a third dot at (x + 2 * deltaX
,y + 2 * deltaY
), and so on. Use only five statements to accomplish this—five calls todrawDot
. - Test your
drawLineWithFiveDots
method by calling it from yourmain
method. Have it draw a horizontal line. (What isdeltaY
in a horizontal line?) You should see five splotches of color in the paint program. - Write a method named
drawSquare
. Accept aRobot
as the sole parameter. Have it draw a square using just four calls todrawLineWithFiveDots
, and nothing else. Call it frommain
. The end result should look something like this, though your brush style and color may differ:
Be sure to commit and push your work to GitLab after every coding session.