| CompSci 590 Spring 2026 |
Software Development Studio |
In teams, write a program that implements three seemingly different applications that use a small programming language to operate one or more turtles to move or draw with. Each program should share a common interpreter based on the similar syntax that allows users to enter programs interactively to be evaluated and visualized in various ways.
The first application below is required and the team can chose to do two of the remaining three options.
Start early and simply, with strong tests in order to verify your understanding of the project's core features. Then refactor your code to help it serve as a foundation for the more diverse functionality expected.
The programming language, graphics visualization, and desktop or web display is your team's choice.
Use GIT to push your team's implementation to the main branch of the provided, shared, interpreter_teamNN repository hosted in the course's Gitlab group for each Phase:
print statements)PhaseN_CompletephaseN_log.txt so it is not recognized by your gitignore file.You are responsible for ensuring that all files are correctly pushed to the repository on time.
Although this is a team project, everyone has individual responsibilities to the team that can be summed up as follows:
Your team's project GIT repository should reflect this by with many small purposeful commits using commonly formatted commit messages from all team members rather than just one or two large "kitchen sink" commits and marathon merging or redesign sessions. Specifically, we will be looking for deliberate attempts to regularly:
Unfortunately conflicts are likely to occur, so please let the Teaching Team know as soon as possible — even if it has happened just once or twice since it is better to deal with the situation early rather than having a disaster at the end when little can be done to get back on track.
Turtle Graphics was invented as part of the Logo programming language designed to teach programming to children by allowing them to control a physical robot. Users could issue commands such as FORWARD 50 to make the robot actually move 50 steps or RIGHT 90 to make it turn ninety degrees. The turtle robot carried a pen to produce drawings on paper put down under the robot. The turtle, which has since moved on to the computer screen, has become Logo's most familiar feature. Additionally, it has helped people think differently about teaching geometry, social science, and especially programming.
Since Logo is used by children internationally, a feature of the syntax is that the language in which commands are given can be configured (i.e., FD represents the word Forward, which in Spanish is Avanzar, abbreviated as AVA). Your interpreters should support this flexibility as well (here are some example translations).
Most modern systems are configured using data files or command line arguments rather than hardcoding values into the source code. These values should have appropriate defaults (in case no file is provided) and be checked for validity (never trust user input). In addition to the application specific values, all program(s) should allow configuration of at least the following values:
The exact format and content of your configuration file should be determined by your team, but it must be a standard file type with a parser (rather than developing your own) such as:
You have the flexibility to create one program that handles all the applications or separate programs that handle a single application. In either case, they should reuse a common API for the backend interpreter. Your program(s) should not crash or
hang, no matter what input is given, by handling errors and providing a reasonable response to exceptional cases. Consider using Exceptions to communicate errors in a thoughtful, intentional, manner rather than returning null or other error prone values.
Most modern languages, and even some platforms, have a Turtle Graphics implementation, including being the core of the current modern children's programming environment Scratch:
An interactive User Interface for each application is not required, just the ability to display the results of running a program file.
Optionally, you can build a more complete UI that allows the user to:
All text displayed and styles (colors, font, borders, etc.) used in the User Interface must be customizable.
You should design your program design such that adding new features becomes easier (or refactor your code better to accommodate changes). Specifically, your design should be thoughtful and intentional: clearly avoiding duplicate code structures and making it easy to add more of these kinds of applications without changing the existing code.
The following Design Goals should help guide you:
null or other error prone valuesWorking together as a team, collaborate to create your planned functionality using the priorities decided on by your team to determine when the features should be implemented (expressed as Gitlab Issues).
An obvious ordering would be one application per phase. Our suggested ordering for your phases is: