Peter Mowry
Main Resume Projects Contact Links


/*
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
http://www.rit.edu/~jpw9607/isobomb2/index.htm - project home page
http://www.indiegames.com/ - 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 Home Page
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).

----------------------

Xundar Home Page
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).

----------------------

The A-Team SE-1 project checkers team web page -  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).


Checkers.jar 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 at the DetailedDesign/javadoc 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.

db2java.jar
dbj2java.bat 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.