Suggested projects
(from more than 10 years ago: Spring 1998)
You can select from this list. Or you can propose your own (subject to
approval).
Note - some of these projects (especially netchess and netboard)
have been accomplished many times before by prior CS 50 groups. We hope
any future (Spring 2005 and later) groups who attempt these projects will also
devise novel features for them.
- wsh this project would implement a web-shell.
Everything on the web is point-and-click. It is friendly and useful
and all that. But people who want more, who want to automate their
access cannot use scripts (ever try to get a whole set of Java programs
from one of the repositories like Gamelan?) What is needed is some way
to script the operations. Just like in a shell in Unix.
wsh should consider an HTML file as a directory and
allow users to cd into it, list its contents (that is, all
the links contained in it), copy a subset of the contents and so on.
Some use cases include "ls *.ps", "foreach x (*.ps) cp $x
/fs/cs-fac/acha/; gzip --best /fs/cs-fac/acha/$x end", "gv
paper.ps", "xv foo.jpg". These use cases must be supported. Other
use cases are possible and I have some suggestions for the group
that is willing to take this up. This would be a really cool
hack. If this works reasonably well, it is likely to be
widely used.
- netchess provides chessboards for two people to
play across the network. The program should include the rules to
play chess. Illegal moves should be flagged and disallowed. the
program should maintain a chess-style clock. It does not need any
chess smarts. Legality of moves should be checked at both
ends (when the person making the move attempts to make an illegal
move and before displaying at the remote end). It should also
keep a record of the moves in any one of the accepted
record-keeping styles and should display it along-side. Would be
nice if the users could suspend and resume games.
- netcheckers provides checkers boards for two people
to play across the network. The program should include the rules
to play checkers. Illegal moves should be flagged and
disallowed. It does not need any checkers smarts. Legality of
moves should be checked at both ends. Would be nice if the users
could suspend and resume games.
- netgo provides Go board for two people to play
across the network. For those who haven't heard of it, Go is a
game of strategy that is much harder than Chess. Deep Blue has
defeated Kasparov by sheer computing power (and some smart
tuning for his playing style). Trying to do the same for Go is,
as yet out,of the question. The number of possible moves is
much larger. netgo should include the rules to
play Go. Illegal moves should be flagged and disallowed. It does
not need any Go smarts. Legality of moves should be checked at
both ends. Would be nice if the users could suspend and resume
games.
- netboard a whiteboard for online discussions.
netboard would allow participants on different
machines to write as well as draw simple figures on a shared
"board". It should allow at least three participants. Should
allow at least lines, circles, squares and rectangles. Should
allow deletions. Assume a cooperative discussion (no floor
control needed).
- Missile Command Game
Build the game with two/three Anti-ICBM bases. Protect your bases from
incoming missles, bombs, and other assorted destructive
devices. Allow different skill levels (adjusts speed, types of
incoming objects, number of protective missiles). Save high
scores. Would be nice to allow two players on different machines
allowing each to launch offensive raids and defensive missiles.
- net-battleship program to play battleships across the
network. As with other games, the program should know battleships
rules but does not need any battleship-smarts. Illegal moves
should be flagged and disallowed. Legality of
moves should be checked at both ends. Would be nice if the users
could suspend and resume games.
- newsreader A usenet NNTP news client.
Should allow the user to read news. Should allow the user to use
a profile file, select group, get headers, skip articles and post
followup articles. Kill files and other advanced features are
optional.
- net-turnin
In this project, you should design and implement a server that
allows students to electronically turn in their homeworks using
only a web browser. The one used for many CS courses at UCSB
now (as of Spring 2005) uses an old, non-standard API, and it
is not very flexible. Additional user features (for both students
and instructors) would be nice, and would be necessary to make
the complexity of this project acceptable for a CS 50 project.
- help line request manager
for the use of operators who man help
lines. Requests have categories. Requests are queued in the
appropriate category. Each request has multiple states --
open/analyzed/pending/waiting-for-info/completed. Each category has
people who are assigned to handle these requests. Requests are
automatically assigned to people. Should have provision for
different levels of effort and this should be dynamically
changeable. Would be nice if current level of load was taken in to
account. Assume everyone is working as well as they can :)
- netvote A poll-taking program. Asks a long
sequence of questions. Keeps track of results. Tabulates results
on demand. Allows users to extract results in different ways --
what percentage of the participants above 35 and making FOO
$/year and registered democrats think clinton is lying in this
week's scandal. what fraction of them voted for him in 1992 and 1996? :)
- CAD House Builder this project consists of
a small Computer Assisted Design system for planning
houses, floor plans, and constructions. It should include a graphic
editor that allows the user to layout perimeters, place external
and internal walls, windows, doors, fireplaces and possible
staircases. Multiple floors are optional. Rooms once designed may
be named. Notes may be added to any part of the design. After
initial floor plan design, the user should be presented with a
palette of objects to placed in rooms. These objects will include
standard furniture objects. The user should be allowed to place
items within rooms. Standard functions should include save a
plan, load a plan (possibly print).
- visorg program to visualize and navigate the
structure of an organization. Each level is a graph with a node for
every entity at that level. Entities at higher levels in the
organization can be clicked on to expose the next level.
- FSM simulator and debugger simulates a finite-state
machine.
the program should allow the user to define, browse and edit the
finite-state machine. It should allow the simulation to be run to
completion, single-stepped, run fast, run slow. It should also be
possible to stop the machine during execution and inspect its
state. If this program works well, it may be used for course
illustrations in this and other universities.
- Pushdown automaton simulator and debugger simulates a
pushdown automaton. The program should allow the user to define,
browse and
edit the control finite-state machine.
Assume a single-headed automaton with a single stack.
The simulator should allow the simulation to be run to
completion, single-stepped, run fast, run slow. It should also be
possible to stop the machine during execution and inspect its
state. If this program works well, it may be used for course
illustrations in this and other universities.
- Turing Machine simulator and debugger simulates a Turing
machine. The program should allow the user to define, browse and
edit the finite-state machine. It should also allow users to initialize
and edit the tape.
Assume a single-headed Turing machine with a single one-sided tape.
The simulator should allow the simulation to be run to
completion, single-stepped, run fast, run slow. It should also be
possible to stop the machine during execution and inspect its
state. If this program works well, it may be used for course
illustrations in this and other universities.
- Traffic Simulator
In this project you will design and implement a traffic
simulation. You should simulate cars driving on roads, trains on
train tracks, and perhaps even pedestrians on crosswalks. A
variety of vehicles, such as buses, motorcycles, bicycles, or UPS
trucks, may be used in the simulation, each displaying slightly
different behavior. There should be many streets in the
simulation, and the intersection of streets should contain
traffic lights, stop signs, or nothing at all. The user should
be able to control the flow of traffic in some way. Consider the
following as suggestions. The user may be able to select the time
of day (rush hour, e.g.). The user may be able to control when
vehicles are added to the streets. The user may be able to
"drive" a particular vehicle. Last, the user may be able to
control the changing of traffic signals. Valuable information to
provide to the user would be the speed of a vehicle, the average
number of vehicles waiting at an intersection, or the average
time it takes to get from point A to point B. The simulation
should be displayed graphically on the screen.
Updated 3/16/05 by C. Michael Costanzo
CS50 homepage