EECS Projects

Courses: EECS 183, EECS 280, EECS 281, EECS 492

Professors: William Arthur, James Juett, David Paoletti, Alexander Rodriguez

Teammates: Zeyu Shi, Arvind Emmanuel, Rundong Hu, Hanmin Xiang

Languages: C++17, Python 3, Arduino C++

Tools: NumPy, OpenAI Gymnasium, Adafruit RGBmatrixPanel

On the first day of becoming a Michigan wolverine, I made up my mind to take a Computer Science minor due to the popularity of coding at that time. Through these 4 years of journey, I realized that what carried me through some relatively harder classes (like EECS 281) is actually the passion I built up along the way. Learning coding is similarly interesting as learning about cities. Specifically, functions are like infrastructure, debugging is like diagnosing urban dysfunctions, frameworks are like masterplanned developments, while fluency in both means the same.

Space Invaders | EECS 183


Course: Elementary Programming Concepts

Language: Arduino C++

Hardware: Arduino Uno, 16×32 RGB LED Matrix, Potentiometer, Push Button

Libraries: Adafruit RGBmatrixPanel, Adafruit GFX

This is the very beginning of the journey, everything was a breeze until the final project dropped. We naturally gravitated toward the fun option, which is building a Space Invador game from scratch using Arduino C++. We had a lot of fun testing the code, debugging all sorts of weird bugs, and of course, playing it.





Euchre Simulator | EECS 280


Course: Programming and Introductory Data Structures

Language: C++11

Concepts: Object Oriented Programming, Inheritance, Polymorphism, Abstract Classes, STL

Euchre is one of these games that is way more fun than it has any right to be. You play it four people, two against two with your partner sitting across from you, and you use a tiny deck (24 cards) only the 9s on up to the Aces. Each round, one suit gets crowned "trump," which basically means those cards beat everything else. The strongest card is the Jack of trump (right bower), and the other Jack of the same color is the second strongest (left bower). Each hand is a quick race to win the most tricks, and the best part is playing off your partner by paying attention to each other and bluffing a little bit. This project turns this Midwestern classic to an equally enjoyable digital version in your palms. Disclaimer: Code is rewritten from C++ to JavaScript partially assisted by generative AI (Claude Opus 4.8) to better display it on the front end.


How to Play

You are South. Your partner is North. First team to 10 points wins. For each hand, click Order Up to make the upcard's suit trump, or Pass. In round 2 you name a suit directly. During play, click a card and you must follow the led suit if you can. Win 3 or more tricks to score and win all 5 for a march (2 pts). Getting euchred (ordered up but losing the majority) costs your team 2 points to the opponents.


You + Partner: 0
Opponents: 0
Trump:
Tricks this hand: — / —
Dealer:
Partner (North)
Opponent (West)
North
West
East
South (You)
Opponent (East)
You (South)
Welcome to Euchre! Click New Hand to deal.



Traveling Pokémon Problem | EECS 281


Course: Data Structures and Algorithms

Language: C++17

Algorithms: Prim's MST, Furthest-Insertion TSP, Branch-and-Bound Optimal TSP

Despite being probably the hardest class in the sequence with runtime benchmarked projects and exams of handwritten LeetCode questions, this class gave me a breadth of knowledge in some fundamental data structures and algorithms. This project is an implementation of various algorithms toward solving the famous Traveling Salesman Problem. Disclaimer: Code is rewritten from C++ to JavaScript partially assisted by generative AI (Claude Opus 4.8) to better display it on the front end.


Interactive Demo

Click anywhere on the canvas to place location points, then run an algorithm. Each button animates the path as it's built: MST grows the minimum spanning tree edge-by-edge via Prim's algorithm; FastTSP draws the furthest-insertion heuristic tour; OptTSP finds the exact shortest tour via branch-and-bound (limited to ≤ 12 points).


MST FastTSP OptTSP

Click the canvas to place points, then run an algorithm.




MountainCar Reinforcement Learning | EECS 492


Course: Introduction to Artificial Intelligence

Language: Python 3

Libraries: NumPy, OpenAI Gymnasium, Matplotlib

Algorithms: Q-Learning (model-free), Value Iteration (model-based)

Touching upon the upper level basics of how AI works, this class is a lightweight and fun introduction to popular AI concepts and methodologies (I once took EECS 445 and quitted halfway because that was too much math for me), and a great way to wrap up my CS Minor journey. the MountainCar project is an introduction of using the OpenAI Gym to perform Q-learning and value iteration to learn about their effects and trade-offs. Due to front end restrictions of model usage, the following demo demonstrates Q-learning, which is model free, on training a small car to climb to the top of the mountain. Disclaimer: Code is rewritten from Python to JavaScript partially assisted by generative AI (Claude Opus 4.8) to better display it on the front end.


Interactive Demo

Click Train to run Q-learning for 5,000 episodes entirely in your browser. The agent starts knowing nothing and gradually discovers that it must reverse to build enough momentum. Adjust the learning rate and discount factor before training. Once training finishes, click Watch Agent to animate the learned policy.


0.9
0.95

Click Train to begin.