Texas Hold’em

This is a program I wrote with a partner as part of my Senior Capstone at Pacific Lutheran University.  It roughly emulates the game Texas Hold’em with 1-3 computer players.

Background:

We wanted to choose a challenging project that would sufficiently test our programming skills.  My partner was a Math/Computer Science double major and needed something to satisfy both majors, so we decided he would handle the artificial intelligence of the computer players and the randomization of the shuffle / dealing of cards.  That left me to program the structure of the game and the graphical interface.

We originally wanted it to be a networked game with individual table and a lobby so you could play with friends on campus and socialize.  However we quickly found out after our first code review that we bit off more than we could chew, especially when we found out that the school network blocked most ports; I couldn’t even get an “echo” demo running (type something on one computer and have it appear on another).

We were also told by our advisor at the time not to be writing any code the first semester, that it should be all design.  We later discovered from our instructor that he meant to say “don’t use any of the code you write in the first semester in the final project since that  code is likely hastily written as proof-of-concepts.”

As a result, we only had 1 semester to code, test, and demo our program for the final presentation. Therefor, the overall interface for the program, while functional, is a little…disjoint, not smooth flowing.  Likewise, there wasn’t as much randomness / bluffing / risk-taking in the artificial intelligence as we hoped for, but functionally, we met our requirements of a 2-4 player game with artificial intelligence that’s capable of playing the game autonomously.

TexasHoldem – Download program source.  Main class is TexasHoldem

Multiple Computer Remote Control

This is a program I wrote in the Summer of 2009 while working for the Steilacoom Historical School District.  The purpose of this program was to speed up the process of installing Windows Updates (before we had a WSUS Server), or to install a program on a computer lab that required interaction.  The program was successful (with a few minor drawbacks), and reduced the time it took to install updates or programs by about 75% (from 4-6 hours, to just over an hour).

Background:

Often, summertime is when we update computers.  In 2009, in order to update a computer lab, I had two options:

  • Go around to each computer and manually run windows update, or
  • Create a new Symantec Ghost image, and ghost the entire computer lab

Running windows update manually on each computer took more work, but it was faster, even though I could only run it on about 6 computers at a time before the bandwidth capped out for the ~700 MB of updates. Building a new image involved less work, but took more time since afterwards, each computer had to be renamed and re-joined to the domain.

I wondered what would happen if…I could get the windows update running on all of the computers at the EXACT same time.  I thought they would all get a portion of the bandwidth, but it would be a lot slower.  Turns out, I was both wrong and right.  They all got some bandwidth, but all the computers were downloading at the same speed as the original 6 were.

Features:

  • Cross-platform
  • Number of possible connected computers limited only by hardware
  • Full-sized, scroll-able (if needed) preview
  • Small program size
  • Windows:  System tray icon to easily see if running
  • Command-line argument for server location

Drawbacks: (due to lack of time to fix / implement changes)

  • If one client disconnects, they all disconnect
  • Occasionally, single-click sent twice (mouse-down + mouse-release, and mouse-clicked)
  • Preview powered by screenshots, not native graphic updates (more bandwidth)
    • However, preview only updates on mouse movement or keystrokes
  • No way to determine if all windows are aligned properly, must visually look at each computer to make sure all windows are in the same location

Files:

RCClient – Code used for the client
RCServer – Code used for the server

System Tray Icon

Image used for system tray icon in Windows.