Transcript
CS193E Winter 2008
Final Project Proposal Dempsey/Marcos
CS193E: Final Project Proposal Due Date Your final project proposal is due no later than 11:59pm, February 20. Please send your proposals via email to
[email protected]. Overview It’s that time of the quarter where you should think about what you’ll be doing for your final project. As we explained at the beginning of the class, you get to pick what you want to do for your final project. We’ll give you some ideas and suggestions, but it’s your choice — so get those creative juices flowing and think up something new, fun and challenging to make! Is there a utility that you’ve always wanted but nobody ever wrote? Maybe a new kind of game that leverages the amazing Quartz graphics engine or some kind of application that takes advantage of the internet? Think of all the building blocks in Cocoa and Mac OS X Tiger or Leopard and go wild! Details This week, you need to come up with a proposal for what you’ll do for your final project. We’d like to see: • a brief description (about two paragraphs or so) of what the project will be • a bullet list of what the features are • what we can expect to be able to do with it. In terms of scope, we’re expecting a level of complexity similar to what we’ve done with the Personal Timeline application. Over the course of the past weeks we’ve developed a pretty fullyfeatured application; now that you have that basis, doing something of the same scale in about 3 weeks is reasonable. Assessment Criteria Here is a list of things we will look for when grading you on your final project. 1. Use of design patterns covered in class — for example, MVC, document architecture (if appropriate), and so on. 2. Application polish! (We would much rather see a polished smaller app than a larger unfinished app. Pick something you can complete in 3 weeks.) 3. Robustness, a.k.a. “don’t crash” — this goes along with #2. 4. Correctness. We will look at your code. Don’t leak memory, don’t have uncaught exceptions, don’t have blocks of duplicated code (factor!). 5. Use of “novel” technologies covered (or not) in class. But again remember #2. 6. General cool factor. This is your chance to show off and shine — impress us!
Project Ideas Here are some ideas for final project ideas to get you started. These are just our thoughts; you should feel free to come up with something completely different or modify any of these suggestions in any way you’d like.
Page 1 of 5
CS193E Winter 2008
Final Project Proposal Dempsey/Marcos
Personal Timeline application extensions •Add a way to share a timeline document with users on the network (like a shared calendar). •Add categories, alarms, etc. •Make the application scriptable using AppleScript. Write a cool game •Use an existing game as a starting point or make up a completely new kind of game. •It could be a standalone game, or something with a network component. Leverage Tiger •Quartz Composer, Core Data, Core Image/Video, Sync Services — what more could you want? End-user applications & utilities • Create a snowflake editor — allow the user to draw and edit a sequence of lines and curves to form one-sixth of a snowflake, and display the full snowflake. Saving and loading snowflakes would be cool, as would a screensaver which “snowed” a set of saved snowflakes. • Create a voting machine which presents multiple sets of candidates and tallies votes and gives running totals. The user interface should be intuitive, simple, and elegant, to avoid confusing any important segment of the voting public. Make sure you have a “hidden” preference which guarantees the candidate of your choice will win, of course. • Build a “pentomino playground” — an app which lets you move pentominos around and form interesting shapes. Or, just as cool, build a “pentomino puzzle solver”. See http:// www.theory.csc.uvic.ca/~cos/inf/misc/PentInfo.html for more information about pentominos. • Build a multiple pasteboard manager, to let you view, inspect, organize, and save multiple items on the pasteboard. Or build a pasteboard viewer, which dynamically shows all of the content on all of the pasteboards, and graphically displays any type it understands. • If you have some understanding of physics, build a simulation of the classic lottery machine, where bouncing numbered balls are propelled upward by air and eventually land in a slot to form the winning lottery number. • Building on the TreeGenerator app, create an app which graphically displays the parse tree of mathematical expression. You could have a way to edit either the expression directly or the tree, and have each display the result. It would also be interesting to have a way to evaluate nodes of the parse tree numerically, so that you could collapse nodes up the tree to evaluate the full expression. • Write an application to play Boggle™, either in a solo mode with one player or networked against other players. (If you’re unfamiliar with Boggle™, you can learn more at http:// en.wikipedia.org/wiki/Boggle.) • People love to send iCards but using the browser can be frustrating. Create a full-fledged client application that lets you pick one of your photos, add some text, pick addresses from your address book and send an iCard. • Create SuperTextEdit, a text editor that adds support for wrapping text around graphics, multiple columns, tables, and so on. • Write a better web browser using Safari’s WebKit. • Using a web API (like Amazon.com’s or Google’s), do some interesting searching with a good client-based GUI. Or use the new RSS capabilities in Tiger to do something cool.
Page 2 of 5
CS193E Winter 2008
Final Project Proposal Dempsey/Marcos
• Create an application to do “text effects” (like WordArt, styles, shapes, text on a path, etc.). • Do something neat with Quicktime or OpenGL (perhaps using QTKit or NSOpenGLView). Developer tools • A property list (e.g., XML) editor. (The Mac OS X Property List Editor leaves a lot to be desired – fill in the gaps!) • A “defaults” editor: a nice GUI front-end for manipulating application preferences. • A class hierarchy diagram generator (à la OmniGraffle) that lets you hyperlink to documentation, header files, create subclasses, and so forth. • Do something interesting with the Objective C runtime data (for example, an object browser, Java-style archiving, etc.) • A code snippet generator to automatically create and copy things to the clipboard like setters/getters or commonly used blocks of code (like enumerators, for/while loops, and so on). Projects from past years Here are some project proposals from past years, to give you a sense of the type of proposal we’re looking for, and maybe to stimulate some additional ideas. PList Editor I plan on building a new and improved property list editor. The current Apple software is missing several basic features, including find and replace functionality, and has an inefficient and mousebased user interface. A search through VersionTracker shows a couple of general XML editors, but all of them are built in Java, have relatively clunky interfaces, and certainly are not optimized for editing plists. The app will provide two different views for the data: one "interface" view similar to (though improved from) Apple's, and a formatted raw view of the XML with syntax coloring. DateKeeper A simple Cocoa application for tracking dates and reminders. Using OS X Services, the software allows flexible collection of users' reminder data from a variety of application contexts, including web pages, email, and instant message windows. The application itself allows manipulation and management of calendar based data. The software also includes an interface to various Unix tools to facilitate automatic, system-wide reminders. iTask The goal of this project is to develop a fast, lightweight, intuitive to-do list manager. Users will be able to quickly pop up an unobtrusive list of their current tasks; these can optionally be assigned a priority number, and their progess can also be tracked via a sliding scale. Possible features include automatic syncing with iCal, and use of an SMS web service to send alerts to your textenabled cell phone. Super AddressBook A remake of the OS X Address Book application featuring: a more Finder-like interface, support for actual subgroups, smart groups like iTunes has, and rendezvous contact sharing. Reversi My goal is to build a Reversi (Othello) chess game, which is a chess game on a 8x8 chess board on which each side is trying to put a piece in an empty square to change the opponent's trapped pieces to his own color. My focus will be on building good user interface. It will have many similar
Page 3 of 5
CS193E Winter 2008
Final Project Proposal Dempsey/Marcos
features similar to the assignments (eg. save, undo, redo...) The following are some other features that I plan to implement: • For each step, the user clicks on the empty square where he wants to put the piece, then the whole chess board should get updated. • A score table to update the score of each side. • The user is only allowed to put the chess in empty squares where at least one opponent's piece gets trapped. To make it clear, these legal squares should show different color. • In some cases, the user may have no legal square to put the piece, the program should detect that and show an alert msg. • After the game, there should be a table to show the top 10 players in the history. The table gets updated if the user has higher score. This table should store in the disk permanently. Chu Chu Rocket My project will be a game that is similar to Sega's Chu Chu Rocket, in which a bunch of mice and cats are traveling around on a chessboard-like surface. They blindly travel in a straight line until hitting any walls or the re-directing arrow pads that you (and your opponents) move around the field. The goal is to direct the mice into your rocket and away from your opponentsrockets, while doing the opposite with the cats (because the cats eat the mice, of course!). Some of the features implemented will be: Game display graphics and UI/interface, very simple AI, Game logic/object model, hopefully sound and network play. Japanese Language Trainer Japanese language learning aide - a more advanced, extended version of a freeware program called Kotoba. It will utilize Mac OS X's built-in unicode support to allow users to input groups of characters and be quizzed on them. It will, of course, have an algorithm that makes characters you don't know pop up more often than characters you do. Thanks to unicode, it's not Japanesespecific, and could be just as easily used for Chinese or pretty much anything else. iCard DeLuxe The goal of my final project is to have a standalone application that lets users create personalized email postcards without using one of the restrictive web interfaces. The postcards consist of any kind of picture that the user can choose from her own portfolio and a personalized text message. Inserting the image to be used by dragging it into an image well would be the preferred method, since this would lend itself to integrate nicely into other applications, such as iPhoto. To make the application even more user friendly, one would like to have the ability to choose the recipient's email address and name from the sender's address book (Apple's AB app, that is). Also, it'd be nice if the user not only could take advantage of the built-in text formatting options, but could also determine where the text should appear relative to the picture. This could be done either interactively or in a pre-canned form. Free floating text above the image is also an option I am considering. Last, but not least, one could think about giving the user the chance to select in what format the postcard should be created. Possible options could be PDF, JPEG, TIFF, GIF, etc. The Ambiguously Generic Game You are a
, and your has crashed into a . You are of course hopelessly lost and disoriented. In order to find your way home, you will have to hundreds of s. Maybe thousands. Along the way, you will encounter a race of s. These s desperately need your help, as only you can save them from the . Of course, many powerups can be found on the to help increase your from wimpy to l337. Good luck, wayward !
Page 4 of 5
CS193E Winter 2008
Final Project Proposal Dempsey/Marcos
3D Pong I plan to make a networked 3D Pong game based on a Flash game I've played on the Internet. The basic layout of the game is as follows... There are two players (paddles) positioned on opposite ends of a rectangular tunnel. The ball travels back and forth through the tunnel, gaining speed as it bounces off walls and paddles, until it passes one of the player's paddles for a score. Each player's view is just behind their paddle, facing down the tunnel at the other player. The paddle is controlled by moving the mouse. The main game 'world' will be rendered with OpenGL. There will be a world editor that can be used to place various obstacles in the Pong tunnel, which can then be moved, resized, copied/pasted, colored, and made to be translucent. To place the obstacles, the user will be able to move the camera through a 3D view of the tunnel. All changes made in the editor can be saved/loaded as a Pong world file. Dancing Robot Typing Tutor This application will be a tool to help children and other interested individuals improve their typing skills. Users of all skill levels will be able to use this program. Users can practice typing single letters, words, or full sentences depending on their preference. Users would have to type the text in a certain amount time to make the robot dance. As long as the user types in the correct text in the allotted amount of time, the dancing robot will keep moving. With each error, the robot would trip or fall or have a part of his body fall off. The goal is to finish typing the text with as few errors as possible and the robot still intact. Mini Risk I plan to make a "mini" version of the classic game Risk - A game where players can battle for world domination. • Gameplay feature list: • Multiplayer support (at least 2 player - local) • Player profiles (for fun personalization or, maybe, network play) • Save/Load game • Drag/Drop of units (to add to regions and move around board) • Visual/Sound Effects (for basic UI elements and game event) Scrapbook Maker I will be creating a scrapbook maker. It allows the user to create a multi-page 'book' to showcase pictures in a creative way. Each page may contain pictures, other images, audio, and text. The user can also specify backgrounds, borders, and draw shapes. All are customizable with inspectors. There will also be a slideshow mode for showing off the finished product. Overall, the scrapbook maker is intended to be a quick way to create a scrapbook without ever having to pick up scissors or construction paper. Zoetrope Based on our beloved Draw program, Zoetrope lets you create frames, set the number of frames per second, and watch your creations in motion! Includes more drawing options and the ability to save individual frames as images, and save your movie clip (quicktime).
Page 5 of 5