Software projects - individual and on team.
I strongly advise looking at my "Major Game Projects". They each have their own web pages.
I also advise reading at least some of "Good Software Projects" descriptions and links for some other significant software development projects.
"Slightly Interesting Software Projects" might be skimmed.
"Older Software Projects" just mentions some of my early CS projects.
Major Game Projects - Mega Monkey Mayhem, Xundar, Super IsoBomb:
Mega Monkey Mayhem
http://egsrit.rit.edu/isobomb2/ - demo installations
- project home page
- this project is for submission to the IGF at GDC Student Showcase
I will post more information and a separate page for this project when it is completed
Xundar - 3D Engine and Game -
created a 3D game engine with DirectX hardware acceleration in C++. Also some windows programming and use of fmod sound system.
Technical features include: outdoor random terrain generation, indoor map file generated areas, 1st & 3rd person movement cameras,
culling and optimization methods, collision detection, 2D elements (font engine, HUD), textures, lighting, custom imported models, animation,
custom sound effects and music, various indoor item types with interactivity, and other special effects. “Xundar” is a playable single player game.
Follow link for more (screenshots, credits, news, etc).
Super IsoBomb Home Page
“Super IsoBomb 3D” (Team Project): Windows, C++, DirectX. Network protocol design and implementation (using RakNet API) added IP multiplayer to split screen local version.
Graphics engine began as a 2D isometric view. Current project is to reengineer graphics engine into 3D views that look similar to 2D isometric view.
New engine will include cel-shading, skeletal animation, optimizations, and game logic improvements, and new content.
Follow link for more
Tilemap Editor - C# and .NET -
Windows Form tile map editor used to create map files for “Xundar” dungeons and “Super IsoBomb” maps. (See "Xundar" and "Super IsoBomb").
Done in addition to weekly CS labs based on C# and the .NET framework and patterns.
Good Software Projects:
Computer Graphics 2 Project Images -
Ray Tracer: OpenGL, C++. Implemented simple Ray Tracer
(spheres and checkerboard floor with lighting, reflection, refraction, shadows).
Applied Tone Reproduction post-processing to resulting images.
Used Pixar Renderman to create some images (specified geometry and applied shaders using .rib files):
Database Bookstore Front End -
Campus bookstore database front end (3 person project).
Full database application project from initial stages of design to complete implementation.
A php-based web UI interacts with a PostgreSQL DBMS using SQL.
Computer Graphics 1 -
Executables for my 4 individual CG-1 projects. Includes Unix and Windows executables; and readme files.
Project-4 requires a ppm folder, and the texture files found inside it. Written in C and OpenGL. All executables
require OpenGL, GLU, and GLUT.
Water Island RPG - Foundations of 2D Graphics Programming -
Emphasis on games programming (especially 2D graphics programming issues found in games)
with DirectX- 2D graphics game engine with written with Direct3D.
The focus of the course is the 3 person team project. This link is to my on-line journal
(which is part of what differentiates grades per individual within a team).
Drawing Editor (Team Project): This is the main project for a class on design patterns
(Engineering of Software Subsystems). It is an object based drawing editor and its primary
purpose is the application of design patterns and principles we learn about in the course.
The project was received in three “phases” of requirements – applying patterns well makes the updates easier.
The final version allowed the drawing of various objects (lines, ovals, polygons, rectangles, etc). Each closed object
can be given a line width/color and fill color. Each open object can be given a leading or trailing arrow. Current pictures
(or object states) can be saved to and loaded from files. Objects can also be grouped, ungrouped, brought forward/backward,
copied, and pasted.
Note that in the project turned in, the round rectangle and the arc were not included. This is because they were not required,
and they currently work somewhat unexpectedly.
Finally, the link leads to a directory with the .gif files and the self-executing "DrawObj.jar", which contains the java executable code.
It was built for the Java SKD 1.3 (so it should work if you have a recent version of Java and put the .gif files in the same directory as the .jar).
SE-1 project checkers team web
- I was the team leader of this six person group. This link holds a
copy of our team web page with many documents we produced for the project
other than the final product, including nine different sections.
It's a lot
of stuff to look through, but it's worth it to at least see the main index
page and to open a few of the more interesting sections.
The course included a lecture introducing many SE concepts and a big group project. The project included the many stages of development, from Planning
and Requirements to Design to Development to Testing. Some of the types of
documents include: Use Cases, Requirements, Planning, Class Diagrams, Sequence
Diagrams, State Diagrams, User Interface Design, Javadocs, Presentation, etc.
All documents are either formatted to be viewed as .html (web), .doc (Word),
or .ppt (Power Point).
SE-1 Checkers.jar -
Assuming you have a stable version of the JDK 1.3 or higher, download and
double-click this file to run it. Currently, you also need to have an
"images" subdirectory in the folder that contains Checkers.jar with the propery images.
This "images" folder can be found here: zip file with "images" subdirectory
or the individual unzipped files
This is final product of the checkers game. It is written in java.
Note, this design of the Kernel is very reusable. The CheckersStyleGame
class works independently of the GUI and the specific rules of the Board.
For example, a ChessBoard class that holds the status of a chess board
and its rules and a chess board text command-line interface could use rest
of the system as is. That extreme low coupling was my idea. Look
if you wish to reveal more specfics.
Future Plans: I think it would be fun to improve and expand this
project based on it's reusable design (in my spare time). At some
point, I may put up improved version of this game, including: minor bug fixes
if I find any bugs, improved usability, improved graphics, and most importantly
- more game types (chess being the main one currently planned).
Slightly Intersting Software Projects:
Verification and Validation Final Reports - Software Verification & Validation -
Verification and Validation was all about testing software. I read papers on testing, did labs
on testing (such as testing text-to-speech and voice recognition engines), etc. This zip file includes 3 pdf files:
the report, the metrics, and the test cases.
We also had a group testing project. This project was to test the project of a group from another course in stages.
My group had 5 people; four of us were testers and one was a team member of the design team in the other course.
He was mainly in the group for communication and to deliver the phases to us 4 testers. The final deliverable for this project was this report.
My team's testing consisted primarily of the following types of tested: dynamic black box testing (creation and exuction of test cases
and some ad hoc), static white box testing (code and design reviews), and some automated (both module and block box) testing.
Again, my project was testing this product (not writing it). We communicated to the developers through the bug reporting tool, Bugzilla
(developed by the makers of the Mozilla web browser). In the second phase, we used "Jemmy" to write automated tests for our phase-1 test cases.
What my team and I tested was a museum database system. We did this through two stages. The first stage had
all local functionality. The second stage included a web component, using JavaBeans. The design team also wrote a final 3rd phase,
but my team only tested the first two. These two links is to the phase 2 executable jar, and a batch file to run it.
Scientific Programming -
Implementations of various methods for various calculations. Error analysis, Matrix operations, simultaneous linear equations,
solutions of nonlinear equations, interpolation, numerical integration, differential equations. Used C.
Projects generally focused on aspects past pure functionality - mainly accuracy and efficiency.
Projects were libraries and simple text output, and thus not posted.
Assembly - final lab - 68K Assembly labs - There were 6 labs. Each one mostly built on the previous lab.
This link is to my text file code for the final lab in the course. Each lab also required a write-up which was
a significant part of the grade.
This lab 6 basically does two opposite things. One is to enqueue characters inputed with the keyboard (through the "ACIA"),
until a carriage return was entered. Next, the bytes could be dequeued one at a time to the PIA (which included a series of 8 LEDs)
one byte at a time, by flipping a switch.
The i/o queue could also go the other way. That is, bytes could be enqueued one at a time through the PIA
(8 switches made a byte, and a 9th switch to enqueue) into a queue in memory. This was done until a carriage return was received.
Then the bytes could be dequeued to the ACIA (which outputed the bytes in ASCII to the monitor).
Note: The lab can be run through a 68k simulator, but in the simulator, ACIA and PIA output would simply be changes in memory.
I ran it in lab, using a 68k board that attaches to a PC in lab to load the text files, and to i/o with the ACIA.
PLC - Lisp -
Programming Language Concepts - Lisp is a precursor to Scheme. It's a functional language.
Lisp is interprative, and a Lisp program is just the aggregation of a bunch of functions.
To iterate through something in Lisp, you typically use recursion. For example, my sub-splice function.
PLC - Prolog -
Programming Language Concepts - Prolog is even crazier than Lisp. Prolog is also interpative. Prolog is Declariative (or Logical).
This individual lab/project included the following things:
parse tree grammar problem, median in a list, and three word problems in which Prolog is programmed to be queried on relations.
For example, in problem 9.28 (see link), Prolog could be queried for "marathon( R )." This would return a list of all the possible combinations
of runners based on the relation definitions I programmed.
Older Software Projects:
Operating System Simulation and Compiler (Team Project): The “Smada” simulation includes
a file system and a simulation that runs “Smada” machine level language files. The “SmadaC”
compiler converts high level language “SmadaC” code into low level code that the simulation
can run. Written for UNIX in C++.
Heating Simulation Jar -
cs3 project2 - heating sim - This is a heating simulation written in CS3.
This was an individual project, for which I designed the system based of
required functionality. When the system is running, it
simulates the specified time passing every second, based on physics
equations. The GUI's pretty ugly, but the heating simulation works.
This project was also graded on functionality and coding style/efficiency
(not on the the look of the GUI), and I got a good grade for it. The system (based
around the HeatingSim class) could be reused with a better GUI.
Bank Simulation - UNIX -
cs4 project1 - bank simulation - The purpose of this system is to estimate how efficient
a "single queue/multiple server" model works for a banking simulation. In
the given scenario, a bank wants to know if it is worth changing their current
"multiple queue/multiple server" system. This system was written in
C++. You give the system a number of tellers, a random seed, an customer
arrival rate, average customer service time, and a total simulation time.
Then, it outputs the servicing results of each simulated minute, and
gives you averages. You input a random seed, instead of basing it off
time, so that the CS department can "diff" the output; fun thing about the
CS projects: if you didn't meet the minimum functionality requirements (generally
based off output "diff"-ing), you automatically failed the course.
This version was compiled for Unix. After it is started, it takes input
from standard input and outputs to standard output.
Roads Shortest Path (Individual Project): This program reads from a text
file of highways from city A to city B with a route name and a number of miles.
From this, the program computes the shortest path from a desired origin city to
a desired destination city.
GPA Storage (Team Project): My last year in high school, I was on a team that wrote
a program four our guidance office to take in student’s and store their grades in
a spreadsheet. It allowed adding students, deleting students, editing students,
and GPA computations. Written in VC++.
High School Projects:
Back in high school, I worked on a small team that made a GPA program for our
school. Individually, I also made a Yatzi game, a Tic-Tac-Toe 1-player
vs AI game, and a primitive first-person maze game that read text file maps.
These were all in C++. None of them are written very well (in
terms of object-oriented design and commenting) and mostly had horrible GUIs
- back then I was new to C++ and object-oriented programming.