In this assignment, you will write a toy program that allows the user to draw some dots on the screen and save their progress!
Create a file called
yourname-saveprogress.rkt. Implement the
big-bang program described below, and save your work. Upload to Google Classroom.
Write a world program that works as follows:
When the program starts up, an empty screen appears. The user can click or drag the mouse to add small dots to the screen.
There are two keyboard commands the user can invoke:
Pressing S (for “save”) causes the current state—that is, the current list of positions—to be saved to a file called
drawing.csv. The file format is up to you, but I recommend a CSV, as discussed in class.
Pressing L (for “load”) loads the drawing in
drawing.csv and sets the current world state to equal that list of positions.
This assignment requires you to pull together a few things we’ve covered only briefly in class. Here are some reminders.
The teachpack. Remember to include the
Doing multiple things. You may find it helpful to use a feature called
begin. It allows you to do multiple things in one function, for example, writing data to a file and computing a new worldstate. It works like this:
1 2 3 4 5
(begin thing1 thing2 ... thingN)
This code will evaluate
thing2, and so on, all the way down the list. But only the last thing,
thingN, is actually returned.
The reason this is useful is because you can use it with the
write-file function, to write data to a file and then do something else. For example, here is a
tock function that writes its current worldstate out to a file, then increases the worldstate by 1:
1 2 3 4
(define (tock ws) (begin (write-file "how-many-tocks.txt" (number->string ws)) (+ 1 ws)))
The begin form will first evaluate the
write-file expression, then the
(+ 1 ws) expression, finally returning the result of the addition.
Writing to files. In case you need a reminder of how
write-file function to write a string to a file. Running
(write-file "some-file.txt" "some file contents")
writes the text
some file contents to the file
some-file.txt already exists, its contents are completely erased and overwritten with the new contents.
If it does not yet exist, a new file
some-file.txt is created and filled with the desired contents.
In the contents string, every time
"\n" appears, it is converted into a newline (like pressing Enter) in the file.
Reading from files. Use the
read-csv-file function to read the contents of a CSV file. It returns a list of lists of strings. If the CSV file looks like this:
1 2 3
7,10 20,100 65,32
read-csv-file will return
1 2 3 4
(list (list "7" "10") (list "20" "100") (list "65" "32"))
Note that you may have to use
string->number to convert these strings to numbers before using them.