Luet oppimateriaalin englanninkielistä versiota. Mainitsit kuitenkin taustakyselyssä
osaavasi suomea. Siksi suosittelemme, että käytät suomenkielistä versiota, joka on
testatumpi ja hieman laajempi ja muutenkin mukava.
Suomenkielinen materiaali kyllä esittelee englanninkielisetkin termit. Myös
suomenkielisessä materiaalissa käytetään ohjelmien koodissa englanninkielisiä
nimiä kurssin alkupään johdantoesimerkkejä lukuunottamatta.
Voit vaihtaa kieltä A+:n valikon yläreunassa olevasta painikkeesta. Tai tästä:
About This Page
Questions Answered: Can I apply what I’ve learned on a larger
Topics: A particular simulator app. There are no new topics per
se, but we will discuss a program that is more complex than any
of the previous ones.
What Will I Do? Program.
Rough Estimate of Workload:? A couple of hours?
Points Available: B50.
Related Modules: Robots (new).
Our virtual robots live in a grid. The robots take turns to act.
Robot actions largely involve moving and turning.
Much of Week 8 revolves around a programming assignment in which you construct a robot
simulator. In this simulator, a “robot world” is essentially a grid where “robots”
of very little brain conduct their virtual existence.
The assignment has been broken down in nine parts. The first two are in this chapter;
the rest are in Chapters 8.2 and 8.3.
Before we get started in earnest, let’s form an overview of the program that you’ll be
The Robots module contains two packages. The classes in o1.robots constitute the
robot simulator’s internal model; o1.robots.gui provides a user interface. The user
interface is ready for use as given and we won’t discuss it further here.
We’ll build the simulator on the same Grid class that you used in Chapters 7.4 and 7.5.
The following table briefly describes each of the simulator’s main components. Below the
table, you’ll find a diagram of the components’ relationships.
Before you go on
Try to get a general sense of the Robots program by reading the description
above and the Scaladocs. Browse the source code, too.
For this question, assume that the program has already been implemented
and works as specified. Also assume that we’ve created a robot world
and a variable testWorld that refers to it. Moreover, we’ve created
two robots and added them to the world. Neither of the two robots has
yet had a turn to act. We now execute the following lines of code:
testWorld.addRobot(GridPos(1, 1), North) // let's say this square is previously empty
Which of the robots has the next turn to act?
Read the claims below and select all the correct ones.
Note: below, the expression “each object knows” means “each object
has stored in its instance variables or can trivially determine with
a simple method call”. This is not a trick question. Its only purpose
is to encourage you to study the Scaladocs and learn about the given
You’ve been given a whole bunch of code, much of which works in principle, but the
program is not ready to run. IntelliJ spews a stream of errors.
RobotWorld has been only partially implemented. Fix it:
Hint: subtasks in addRobot
Show the hintHide the hint
The method should:
1) create a robot;
2) add it to the end of the robot list;
3) add it in the appropriate square within the robot world; and
4) return a reference to the added robot.
Tools for each subtask:
1) create a new RobotBody object;
2) update the list in this.robots;
3) pick the right square and call that square’s addRobot method; and
4) return a reference to the RobotBody object that you created.
Hint: picking the appropriate square in addRobot
A RobotWorld is a Grid.
Grids have an elementAt method for accessing a single element
(square) of the grid.
Use that method to pick the appropriate square. Then call the
square’s robot-adding method.
Submit your solution to Parts 1 and 2. The assignment continues in upcoming chapters.
A+ presents the exercise submission form here.
Please note that this section must be completed individually.
Even if you worked on this chapter with a pair, each of you should submit the form separately.
Time spent: (*) Required
Please estimate the total number of minutes you spent on this chapter (reading, assignments,
etc.). You don’t have to be exact, but if you can produce an estimate to within 15 minutes or
half an hour, that would be great.
Written comment or question:
You aren’t required to give written feedback. Nevertheless, please
do ask something, give feedback, or reflect on your learning!
(However, the right place to ask urgent questions about programs
that you’re currently working on isn’t this form but Piazza or the
lab sessions. We can’t guarantee that anyone will even see anything
you type here before the weekly deadline.)
Thousands of students have given feedback that has contributed to this ebook’s design.
The ebook’s chapters, programming assignments, and weekly bulletins have been written in
Finnish and translated into English by Juha Sorva.
The appendices (glossary, Scala reference,
FAQ, etc.) are by Juha Sorva unless otherwise specified on the page.
The automatic assessment of the assignments has been developed by: (in alphabetical order)
Riku Autio, Nikolas Drosdek, Joonatan Honkamaa, Jaakko Kantojärvi, Niklas Kröger, Teemu
Lehtinen, Strasdosky Otewa, Timi Seppälä, Teemu Sirkiä, and Aleksi Vartiainen.
The illustrations at the top of each chapter, and the similar drawings elsewhere in the
ebook, are the work of Christina Lassheikki.
The animations that detail the execution Scala programs have been designed by Juha
Sorva and Teemu Sirkiä. Teemu Sirkiä and Riku Autio did the technical implementation,
relying on Teemu’s Jsvee and Kelmu toolkits.
The other diagrams and interactive presentations in the ebook are by Juha Sorva.
The O1Library software
has been developed by Aleksi Lukkarinen and Juha Sorva. Several of its key components
are built upon Aleksi’s SMCL
The pedagogy of using O1Library for simple graphical programming (such as Pic) is
inspired by the textbooks How to Design Programs by Flatt, Felleisen, Findler, and
Krishnamurthi and Picturing Programs by Stephen Bloch.
The course platform A+ was originally created at Aalto’s LeTech
research group as a student project. The open-source project
is now shepherded by the Computer Science department’s edu-tech team and hosted by the department’s IT
Markku Riekkinen is the current lead developer; dozens of Aalto students and others have also contributed.
The A+ Courses plugin,
which supports A+ and O1 in IntelliJ IDEA, is another open-source project. It was created by Nikolai
Denissov, Olli Kiljunen, and Nikolas Drosdek with input from Juha Sorva, Otto
Seppälä, Arto Hellas, and others.
For O1’s current teaching staff, please see Chapter 1.1.
Additional credits appear at the ends of some chapters.