EasyGame – A Board Game Framework
The boardgames framework was one of the biggest projects of the 2nd year at ENSICAEN. (Junior year of Master Degree)
The goal was to program a framework which allowed a developer to create a board game as easily as possible. The client wanted to have a network implementation, a game manager and two games : Uno and Sheep war.
We were in a team of 4 persons and I was the team manager. The time allocated to us was only of 8 weeks. Thus, this project was really ambitious for the time given. To begin this project in good conditions, we decided to use a version manager (Git), a task organizer (Trello) and an IRC chat to stay in touch during holidays and weekends (Also a bot to save the pull requests when the integrator was not here).
Week after week
For the first two weeks, we focused ourselves on the UML modelisation of the framework. For this, we tried to develop a first game, “Tic tac toe”, to see what would be required in the framework, and which part would have to be developed by the user. With this, we started developing the primitive classes of the framework like Player, Board, Entity. Then, we tried to develop another game named “Othello” to see if our UML modelisation allowed for the implementation of any board game. At this stage, we had a first basic framework to develop some easy board games.
The next two weeks were focused on the implementation of the network features. We thought about it a lot and and validated the final version just at the beginning of the 3rd week. We had two possibilities at this moment, implement a complex network system which would only send a list of actions between the client and the server or implement an easy network system which consisted to send the current gamestate to the client, then the client would send back the modified gamestate and so on. We chose the second one, the simplest one, because of the time remaining for the project. The problem with the second one is that the clients couldn’t interact during a turn that wasn’t theirs. However, for some board games, this kind of interactions can be required. Fortunately, there are in most cases ways around this problem. So, at the middle of the 5th week, we had the network implemented. We adapted our two first games, “tic tac toe” and “othello” in a network version and it worked well. We were proud of it. At this points, we started being very confident in our ability to finish the project in time.
Between the week 5 and the week 7, we needed to add some features to the framework. At first, a plug-in feature. On the left side of the screen, you can create and add plug-ins for your game. An example for the Uno is the button to switch the color of a “+4 Cards/ Switch Color” card. In the Sheep War game, we have some plug-ins to rotate a card, to flip a card and one to indicate the player’s color. Secondly, we added the support for artificial intelligences. And thirdly, we continued to develop the game manager and adapting the first version with the network implementation. At the end of the 7th week, the game manager was able to download games from a server hosted by one of us, to update the games, to add a game and to launch the games with players who are either local, distant or an artificial intelligence. We also added a little feature which allowed the programmer to change the order in which the player play. In the side of the framework, the Sheep war and the Uno were programmed with the framework. The sheep war was longer than the Uno to program correctly because of the cards and the number of rules to compute the score. The Uno was programmed in 4h and 2h added for the graphic side. Thus, the required goal “Develop a framework to program board games as easily as possible ” was reached.
During the last week, the major part of the work was cleaning the code up. We also developed an AI for Uno and an AI for Sheep war. We improved the design of the game manager and the UI in a game. And one of the best test of our framework was to adapt a chess game from a previous project of one of my teammates to EasyGame. He succeeded in adapting it in only 5-6h. After many researches on a solution for the remaining bugs, we were out of time for some of them. We currently have an occasional bug on the display of the player list during a game. Sometimes, for no reason, the window does not want to resize when the waiting for the players ends. At last, the socket server sometimes stays open, blocking the port. These bugs are not really significant and do not prevent the player from playing the game correctly.
So, we are here, at the end of the project, with a release candidate version of our framework, a game manager and five games. And my team manager cap is now on the ground. We were proud of what we were able to create in such a short period (8 weeks). The key of the project was to implement the network as early as possible. Without it, it would have been hard for us because the network part is the heart of the project. Without it, we can have neither a perfect game manager, nor the satisfaction of the client. We succeeded in splitting the framework development in a lot of tasks to have the maximum of productivity each time. Each one had a task and each one succeeded in completing it, even though when said person did not have the required competence at the beginning. We learned a lot about Java, about its libraries and about how to organize a group to develop as quickly as possible and as well as possible at the same time a software/framework/etc.
To me, this project was one of the best project I’ve worked on. Moreover, I was the team manager, so I was able to discover what it is like to be a team manager, how to organize the team, how to motivate the team, how to manage the issues between member and even manage the two other guys who were with us at the beginning of the project. It is not an easy role. You are always everywhere in the project and you need to interact with the client to satisfy him as best as you can. You do not count the number of hours you spend and you always have to be confident and happy. I liked this role, and I was also able to develop many things on the project like the two games (Uno and Sheep war). But in this position, you know that you will program less than the developers and spend more time managing, discussing, interacting about the project and with the client. This is really different from being a developer. The pressure is on your shoulders, and you choose the amount of pressure you put on the shoulders of your team.
You can find .ZIP file below. The contents of the archive is :
– The framework
– The game manager
– Docs (Javadoc, developer guide, UML and a ANT script to build your game)
– Games (Chess, Sheep war, Uno, Othello, Tic tac toe)
Enjoy it! I hope you will find it really interesting and amazing, as we think!
Thanks to Jérémy Anger, Steven Le Rouzic, Guillaume Kotulski to be my teammate during this project!