My name is Greg Pergrossi and this is a collection of my work.

Tetris AI

Sitting in my High School dorm room, I became inspired to program a bot to play tetris for me. Somewhere around that time, Tetris Friends had become popular on Facebook and I wasn't very good at it. I ended up playing a lot, trying to figure out what exactly ideal play would look like. What interested me was finding a good enough description that a computer could play using my heuristics. The Tetris bot I created ended up being pretty good (see link). I set it up on Tetris Friends where it climbed the leaderboards to near the top. I'm sure there are better bots out there, but not many of them can read a board and make moves in real time. I had experience working with screen reading from a couple other bot projects I made for other games, but Tetris was probably the most difficult from an AI design standpoint. In the future, I'd love to make my bot learn by itself and perhaps discover some strategies I didn't come up with on my own.

Minecraft Generator

Between 2012 and 2013, I programmed a custom Minecraft terrain generator. It integrated with a modified version of the Minecraft server program known as CraftBukkit. The API allowed modders to plug in a generator class that would provide information about which blocks to generate in any given chunk. AeroGen mod, as I have named it, was rather popular, earning more than 8,000 downloads on the original host site and a few thousand more on others.

Tile Garden
February 2016
I was in my Aesthetics class and the profesor had showed us some of Sol LeWitt's art. One of the pieces was a drawing produced by drawing a grid and then making random 90 degree circular arcs across each box. I was later working on some old code for a circuit editor that happened to have some dummy code for drawing tiles - most of the work to that point was getting the interface working. With some modification I recreated LeWitt's description. I then - don't ask why - put it into paint to see how a flood fill would work. Connected sections varied in size greatly and it was pretty cool. A few bored doodles later and I had the idea for my own variation of the art piece. While working on getting this site running, I decided to play with some javascript. Before long, I had "Tile Garden".
OpenGL Projects
Since 2010
When I started programming I was very young. My inspiration came from the few video games I got to play on the family computer back then. My brother introduced me to a program called "Learn to Program BASIC" by Interplay. It succeeded in teaching me a form of BASIC and got me into coding. When the 1000 line limit started looking small, I moved to DarkBASIC from The Game Creators. DarkBASIC provided a simple and powerful set of graphics commands for both 2D and 3D. I made a collection of games in DarkBASIC because it was such an easy way to develop. When I learned Java in 2008, I really wanted to get back to graphics, but the Java2D AWT package was only good for 2D. I began learning OpenGL in 2010 after hearing about the Light-Weight Java Game Library (LWJGL) because it was used by Minecraft. Many of my projects were small things I posted to Google+ (link for example), but I have learned a good enough amount to make and use shaders and create some simple 3D graphics on Android.
Balls of War
A long time ago I created a simulation starring a bunch of circles that shoot at each other. A small amount of AI and a huge amount of bullets turned out to be a captivating visual performance. I kept adding features to it and the code went through a few version changes (ground up rewrites, including a change of programming language). The recording in the link is version 3. There is a fourth version that got started with more team creation details and a better interface, but it got derailed by other projects. Maybe I'll finish it up and release a polished version with optimized bullet collisions and some more complex AI.
School Projects
Since 2012
I've done a number of coding projects for classes. Not all of them were interesting or even fun, but some of them I really enjoyed. I enjoyed writing a dynamic memory allocator for my Systems Programming class (A prereq for Operating Systems). That class also had us make a Poker hand scoring program that I thought turned out well. I'm proud of mine for its code organization (See Github CS351 lab 2). Later, I became a teacher's assistant and coded a sudoku solver so that I could explain it to students (also a fun project). Even my ECE classes have created some interesting work. For my "Microcomputers" class, we learned about the MC68000 microprocessor as a case study. The final project was to code a command line REPL in Assembly. I also coded an entire circuit simulator in C++ for "Object Oriented Computer Simulation".
These projects fun because they were substantial. I was really able to get into them and be immersed in a layered problem. I enjoy writing code on multiple levels of abstraction. I also enjoy designing elegant interfaces between classes and then optimizing the most crucial low-level components. The best example of optimization I've done would be the Sudoku lab, which initially took 30+ seconds and was reduced to < 1 second for a test-case of difficult puzzles.
Spring 2015
Illinois Tech (IIT) has a program of Interprofessional Projects that get students working with businesses, researches, and investors to create something that goes beyond their school work. In Spring 2015 I took an IPRO involving virtual reality and immersive displays. The project was to build a "CAVE" or "Simularium" that could display 3D content on a life-size, surrounding screen. It was a lot of fun working on that project because the team had such a variety of knowledge and skills. Everyone could contribute in their own way. For me the work was software and getting something to display on screen during the official presentation. I got into Unity3D for this project and also learned a good deal about 3D technologies and projection. The picture on the left shows the three rear projectors being mapped to the curvature of the screen.
Coming Soon
Under Construction
  • TS3ph Power Grid Simulation (Research) - summer research project using Matlab and Python
  • More detailed school work - high school work and separate projects
  • More detailed OpenGL projects (There are so many)
  • DarkBASIC projects - hopefully I can find a way to present them, since they're so old.
  • Individual project pages with code snippets and commentary
  • More concise summaries on this page