The Annual Computer Poker Competition Poker Gui Client provides a graphical user interface with which people may play poker games against automated agents. It is still under development, but currently supports two-player limit and no-limit Texas Hold'em, and has the potential to support three-player as well.
This application is built on Ruby and Rails, and a running instance is currently hosted by the University of Alberta's Computer Poker Research Group here.
- GitHub - Code
- Documentation - Documentation
Much of this application's functionality comes from component gems that began as part of this project and subsequently branched away to become stand-alone projects:
- ACPC Dealer - Wraps the ACPC Dealer Server in a handy gem with a convenient runner class, and a script for compiling and running the dealer and example players.
- ACPC Dealer Data - Utilities for extracting information from ACPC Dealer Server logs. Used for mostly for testing.
- ACPC Poker Basic Proxy - Utilities for communicating with the ACPC Dealer Server.
- ACPC Poker Match State - Provides a manager for the state of a poker match.
- ACPC Poker Player Proxy - Provides a full proxy through which a match of poker may be played with the ACPC Dealer Server. Match states sent by the dealer are retrieved automatically whenever they are available, and are interpreted and managed for the user.
- ACPC Poker Types - Fundamental poker types like
Card
,Player
,GameDefinition
, andMatchState
.
-
A compatible *NIX-based operating system. Has been successfully installed on Ubuntu 10.04.4 LTS, 11.04, 12.04, and Mac OS X Lion. Windows is not supported (in this case, it is recommended to run a compatible operating system as a virtual machine in VMWare Player or VirtualBox.
-
Ruby 1.9.3 - This can be installed in different ways, but a good choice is RVM. Or you can follow these instructions to install via a different method.
-
Git - While this should only be required if you want to install Ruby via RVM, installing Git also makes working with this repository easier, so it is recommended. Follow these instructions to do so.
-
Bundler - Bundler is a Ruby gem that manages a project's gem dependencies. It requires zlib, which can be installed through RVM by running
rvm pkg install zlib
Once Ruby is installed, installing Bundler should only be a matter of running
gem install bundler
- A non-LLVM version of GCC - This may require some extra steps on OSX as some versions of XCode no longer include such compilers. There are many discussions on solutions for this on stack overflow.
Download the code, which can be done by running
git clone git://github.com/dmorrill10/acpc_poker_gui_client.git
Next, download a MongoDB version compatible with your system, unpack the compressed file to <project root>/vendor
, and rename the resulting directory to mongoDB
.
then, in the project's root directory, run
bundle install
rake install
This should install most of the application's dependencies, except Apache, including gems and Beanstalkd, and will complete the MongoDB setup.
The Beanstalkd background process server is used to host background processes. Background processes are required so that game state can persist beyond a single HTTP request.
MongoDB is used as the database back-end.
A Thin server installed via gem serves the application locally in development mode.
An Apache server hosts the application proper in production mode. This is currently done with Apache-Rails integration through Phusion Passenger. As Apache is only used in production, it is not required to deploy this application on a local development server.
Deploying the application in development mode on a Thin server is simply a matter of running
rake start_dev_server
in the project's root directory.
Similarly, to deploy in production mode (given that Apache and Phusion Passenger are properly configured), run:
rake start_prod_server
Updating this application can be done by running
rake update
in the project's root directory, which will pull the newest down code from the repository and install any missing gems.
These tasks can be done separately too (as can all rake tasks, see Rakefile for more details), with Git and Bundler commands.
This project includes custom generators:
- poker_bot
- scss_class
For execution details, run
rails g <generator name> --help
For more information, see this tutorial on Rails generators.
See the issue tracker for currently known issues, or to log new ones.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Copyright © 2012 by the Computer Poker Research Group, University of Alberta. See LICENSE for details.
- Annual Computer Poker Competition
- Beanstalkd - The background process server used by this project.
- Coffescript - JavaScript in a candy coating. Used by default as of Rails 3.1 and used in this project's views.
- Gem Bundler - Gem dependency management tool used by this project.
- GitHub - Host for this project's code.
- Git - Version control system used by this project.
- God process monitoring - Used to manage background processes in production.
- Haml - The template language used by this project's views.
- Markdown - The formatting syntax used to write most of this project's non-code documentation.
- MongoDB - The database back-end for this project.
- Phusion Passenger - Enables integration between Rails and Apache in production.
- Programming Ruby - a tutorial on Ruby programming.
- RDoc - The formatting syntax used to write some of this project's non-code documentation, when Markdown is not enough.
- RVM - Ruby installation and version manager.
- Railscasts - Ruby on Rails video tutorials.
- Rake - Ruby build program.
- Ruby on Rails - Web application framework used by this project.
- RubyDoc.info - Documentation hosting site used by this project.
- SASS - Styling language extension of CSS used by default as of Rails 3.1 and is used in this project.
- Stalker gem - Ruby Beanstalkd interface.
- The Apache Project - The production web server used by this project.
- The Computer Poker Research Group
- The Ruby Programming Language - The foundational language of this project.
- UAlberta hosted GUI client - A running deployment of this project that allows users to compete against some of the Computer Poker Research Group's recent agents.
- University of Alberta - Host institution to the Computer Poker Research Group.
- YARD - The documentation tool used by this project, which also defines tags used by in-code documentation.