Tag Archives: Games

Multiplayer TicTacToe

Project  Link on Github

This project was undertaken as part of my Distributed Systems class in college. The goal of the project was to create a game of TicTacToe that could be played on two different platforms and played cross platform. This project was completed with another person in my class. I wrote the java client for the game while he wrote an android app to play the game. We wrote the server code in python together and used mysql for our database.

The first step was to create the individual clients to play the game locally. I had to create a java client using the swing library for graphics. This wasn’t too hard task as I had experience with the library in previous projects. I had to have a game screen which could be used to play games, a lobby screen used to join games and a login/register screen to log in to the system.


We then had to create the server code. We wrote python scripts and hosted them using XAMPP on one of our laptops. The python scripts were written for each part of the system, to login users, register users, join games, create games, update games and get leaderboard statistics. Each script interacted with the database using mysql and sent the result back to the client using json. We then had a json parser to get the results in the client and check and use each part.


games  users


The clients are able to play cross platform as they both access the server in the same way. This means a user can play on either platform and play opponents on either platform. Game states are updated on the server and update all the clients connected to a game. All the code can be seen on github as well as more screen shots and the full report of the project at this link




Tagged , , , ,

Grifball Manager

I really enjoy the sports management genre to play and likewise I’m really interested in creating games in this genre too. I expanded on things I learned from my Hurling Management game here. The game is based on the game mode Grifball from the Halo series. The goal is simple to get the ball (bomb) into the enemies goal. You can kill your enemies and they will respawn and the game is played in teams. I added a few things to improve the management side of things of the game. For example substitutions can be made in between rounds.

The game simulates rounds of grifball with each team trying to get the ball into the goal. Each tick is 3 seconds and simulates the actions of each player in the game. Players can move in 4 directions, attempt to kill another player if they are in range or do something with the ball if they have possession of it. Their actions are decided by the positions and the roles given to them by the manager. Each of these made it more likely or less likely for them to take certain actions in the game. For example an Attacker set to Berserker is going to try kill everything on the map and does not care about the ball and a Full Defender will hang back even when the ball goes up to be ready on defence if the ball is turned over.

Positions – Role 1 – Role 2 – Role 3

Attacker – Normal – Berserker – Scoring

Scorer – Normal – Full – Playmaker

Defender – Normal – Full – Dynamic




Decision making is done using arrays to store the probabilities of actions and then running random numbers to get the outcome. This is done for each player and they are all updated for each tick. The round will simulate and then give a result to the player at the end. They can then make tactical changes depending on how it went, either by changing positions, mentality or by subbing in new players for the next round. It keeps going until one team wins 4 rounds.




I have also added a simple tournament mode that can have 4 teams play a 2 round knockout tournament. The teams can be selected and the CPU matches will simulate while the player can play his/her own matches. Single matches can also be played in two player mode where the second team can also be user controlled by someone else. Both players set up their tactics independently and start the match to see who wins.

The code can be found on github



Tagged , , , , ,

Hurling Simulation Update and Great Game

After running a plenty of simulation and tweaking numbers I am quite happy with the outputs that the engine generates now. I have moved from generic tests to making some actual teams based on the county teams. The way teams are read into the program has been altered. Now there are two files, one which holds the full roster/panel for a team and the other which names the team to actually play the game. The former holds the ratings for each player and eventually stats when they get stored. The latter simply states the number, position and name of the player with the tactic and free taker at the top.
Sample roster and teamsheet
Eoin Murphy,18,1,1,1
Paul Murphy,1,17,2,2
JJ Delaney,1,19,3,1
Jackie Tyrrell,1,18,3,2

1,GK,Eoin Murphy
2,FB,Paul Murphy
3,FB,JJ Delaney
4,FB,Jackie Tyrrell

Two changes to the calculations behind the scenes were the addition of Home Bonus and greater emphasis on passing. In most sports there is some home field advantage and this is no different. The first team is designated as the Home team and they get a bonus to their total probability of having an event. The passing is based on the midfield stat of players. It was always factored into the total but now the total takes in double the midfield rating. This is to factor in that a better midfield and passing team would have more possession of the ball. This change has improved numbers a lot I feel and makes sense logically too.

Below I have pasted in a game I simulated today for the Hurling League Final between Kilkenny and Tipperary. It turned into a great game and shows off what a full game simulated is like.

MIN 0) Michael Fennelly finds himself unmarked and slots the ball between the posts.
0-1 TO 0-0
MIN 1) Eoin Murphy misses the catch but Cillian Buckley helps him out and scores a point from the loose ball.
0-2 TO 0-0
MIN 2) Cillian Buckley finds himself unmarked and slots the ball between the posts.
0-3 TO 0-0
MIN 5) Cillian Buckley is dragged down and Eoin Larkin converts the free.
0-4 TO 0-0
MIN 6) Noel McGrath finds himself unmarked and slots the ball between the posts.
0-4 TO 0-1
MIN) 9 Shane McGrath is about to shoot but JJ Delaney gets in the way and makes the block.
MIN) 12 JJ Delaney makes a great block stopping a sure point.
MIN 14) The ball is sent over the bar by Lar Corbett.
0-4 TO 0-2
MIN) 17 Aidan Fogarty is about to shoot but Paul Curran gets in the way and makes the block.
MIN 18) Seamus Callanan finds himself unmarked and slots the ball between the posts.
0-4 TO 0-3
MIN 19) Cillian Buckley catches the pass from Jackie Tyrrell, gets past his man and adds another point.
0-5 TO 0-3
MIN 21) Richie Hogan catches the pass from Colin Fennelly, gets past his man and adds another point.
0-6 TO 0-3
MIN 22) A good passing move ends with Lar Corbett and he scores a point for the team.
0-6 TO 0-4
MIN 23) And its a point from Cillian Buckley.
0-7 TO 0-4
MIN 24) Richie Hogan takes his point.
0-8 TO 0-4
MIN 25) Eoin Kelly scores a free from a tough angle.
0-8 TO 0-5
MIN 26) The loose ball is picked up by Shane McGrath who picks out Lar Corbett and its stuck over the bar.
0-8 TO 0-6
MIN 27) Richie Hogan makes a great catch and scores a point on the turn.
0-9 TO 0-6
MIN 32) A good passing move ends with Patrick Maher and he scores a point for the team.
0-9 TO 0-7
MIN 34) Michael Fennelly took a nasty blow across his arm but Eoin Larkin scores the free.
0-10 TO 0-7
MIN 37) The loose ball is picked up by Conor O'Mahony who picks out Noel McGrath and its stuck over the bar.
0-10 TO 0-8
MIN 38) A loose sliotar is picked up by Shane Bourke and he puts it over the bar.
0-10 TO 0-9
MIN 39) The loose ball is picked up by Seamus Callanan who picks out Shane Bourke and its stuck over the bar.
0-10 TO 0-10
MIN) 41 A close call but Brendan Maher clears the ball away.
MIN 43) A soft free is given by the ref and Eoin Kelly scores it.
0-10 TO 0-11
MIN 44) The ref blows his whistle and Eoin Kelly scores the free from the 65.
0-10 TO 0-12
MIN 45) Conor O'Brien won the ball from his man and set up Shane Bourke for the good score.
0-10 TO 0-13
MIN 46) Lester Ryan won the ball from his man and set up Michael Fennelly for the good score.
0-11 TO 0-13
MIN 48) A soft free is given by the ref and Eoin Larkin scores it.
0-12 TO 0-13
MIN 49) Eoin Larkin makes a great catch and scores a point on the turn.
0-13 TO 0-13
MIN 50) A good passing move ends with Colin Fennelly and he scores a point for the team.
0-14 TO 0-13
MIN) 52 A clearance is caught by JJ Delaney and he sends it right back.
MIN 54) Brendan Maher passes the ball to Lar Corbett and its hit between the posts.
0-14 TO 0-14
MIN 55) Michael Rice takes his point and the goals will come.
0-15 TO 0-14
MIN 56) A soft free is given by the ref and Eoin Kelly scores it.
0-15 TO 0-15
MIN 60) Somehow Lester Ryan comes out with the ball and scores a nice point.
0-16 TO 0-15
MIN 62) A good passing move ends with Brendan Maher and he scores a point for the team.
0-16 TO 0-16
MIN 63) Patrick Maher makes a great catch and scores a point on the turn.
0-16 TO 0-17
MIN 64) The loose ball is picked up by Padriac Maher who picks out Seamus Callanan and its stuck over the bar.
0-16 TO 0-18
MIN 65) Paul Murphy passes the ball to Cillian Buckley and its hit between the posts.
0-17 TO 0-18
MIN) 66 A clearance is caught by Cillian Buckley and he sends it right back.
MIN 67) Darren Gleeson hits the ball to the unmarked Noel McGrath on the sideline, who sends it over the bar.
0-17 TO 0-19
MIN 70) The ball is picked up by the sideline by Michael Rice he solos past two men and hits it past the goalie.
1-17 TO 0-19
FINAL SCORE: 1-17 TO 0-19
1 Eoin Murphy: 0-0
2 Paul Murphy: 0-0
3 JJ Delaney: 0-0
4 Jackie Tyrrell: 0-0
5 Tommy Walsh: 0-0
6 Brian Hogan: 0-0
7 Kieran Joyce: 0-0
8 Lester Ryan: 0-1
9 Michael Fennelly: 0-2
10 Cillian Buckley: 0-5
11 Michael Rice: 1-1
12 Eoin Larkin: 0-4
13 Colin Fennelly: 0-1
14 Richie Hogan: 0-3
15 Aidan Fogarty: 0-0
1 Darren Gleeson: 0-0
2 Michael Cahill: 0-0
3 Conor O'Mahony: 0-0
4 Paul Curran: 0-0
5 Kieran Bergin: 0-0
6 Padriac Maher: 0-0
7 Conor O'Brien: 0-0
8 Brendan Maher: 0-1
9 Shane McGrath: 0-0
10 Eoin Kelly: 0-4
11 Lar Corbett: 0-4
12 Patrick Maher: 0-2
13 Shane Bourke: 0-3
14 Seamus Callanan: 0-2
15 Noel McGrath: 0-3

Tagged , , ,

Hurling and Update


I realised after my two posts so far about my match engine that a lot of people are unaware of what hurling is. Unless you are from Ireland you probably dont know what it is. Well its a sport that comes from Ireland and is probably one of the oldest sports in the world. Its a field sport of two teams each with 15 players. You win by outscoring your opponent. Scoring is done by putting the ball over the goals but between the two side posts which is one point or into the goals which is a goal but considered 3 points. The game is played with a wooden stick and small ball. You control the ball and hit the ball using the stick. You can also hold the ball in your hand but for a limited amount of time.

There is one goalie on each team and then every other player matches up to an opponent and you mark him for the match (or until some change happens). There are 6 defenders, two midfielders and 6 forwards. Tackling is done by shouldering your opponent or sticking your hurley in the way to knock the ball loose. Its a very physical sport and a very fast sport. A match is made up of two halves each 30 or 35 minutes long. A team can use three subs in a match to replace players on the field already. The field is quite long at 135-145m.

Thats a quick overview of the sport and I encourage you to find out more or watch videos if you are interested as it is one of the best sports in the world. I may be biased but the amount of speed, skill, strength and everything that goes into the game makes it one of the most enjoyable to watch and play.

A small update on the engine now. I am currently running a lot of simulations with varying teams to try and see how the results are turning out. The numbers seem good enough so far but Ill continue to tweak them to try improve accuracy. I have written a small program that will read in reports and then output stats such as average goals, points, wins per team to csv files. These are very handy for checking the numbers.

Tagged , , ,

Hurling Simulation Engine Update

I have continued work on my Hurling match engine over the last few days and have made some good progress. I have added more factors in to affect the overall simulation of events in a match. A teams attack and opponents defence now play a factor into scoring points and goals. Teams can also perform defensive plays which are affected by their defence. A goalie gets factored into the goal probability now.

teamOneTotalProb = 1.8 + ((teamOneAtk - teamTwoDef)/100) + ((teamOneAtk - teamTwoDef - teamTwo.getGoalKeeper())/100) + (teamOneDef/1000)
+ teamOnePointMod + teamOneGoalMod + teamOneDefMod - (2 * teamTwoDefMod);
teamOnePoint = 0.8 + ((teamOneAtk - teamTwoDef)/100) + teamOnePointMod - teamTwoDefMod;
teamOneGoal = teamOnePoint + 0.04 + ((teamOneAtk - teamTwoDef - teamTwo.getGoalKeeper())/100) + teamOneGoalMod - teamTwoDefMod;
teamOneDefence = teamOneGoal + 0.2 + (teamOneDef/1000) + teamOneDefMod;

Another large addition is the use of tactics for a team. There are 5 tactics to choose from: Attacking, Defensive, Long Ball, Short passing or Take points. They are designated as a single character at the start of a teamsheet and read in with the players. Each tactic counters two and is countered by two so it creates a nice rock paper scissors strategy. The bonus for countering your opponent is an increase to the teams probability of having an “event”. Each tactic also has an effect on the team depending on the strategy. They are laid out below.

Tactic Counters Countered By Bonus Minus
Attacking Defensive, Take Points Short Pass, Long Ball points, goals defence
Defensive Long Ball, Short Pass Take Points, Attacking Defence Points, goals
Long Ball Attacking, Short Pass Defensive, Take Point Goals Points
Short Pass Attacking, Take Points Defensive, Long Ball Possession None
Take Points Defensive, Long Ball Attacking, Short Pass Points Goals

Frees have also been added in as a subset of scoring. Now after its calculate that it was a score it then checks whether that score was a free or not. A free is always scored by the designated free taker who is written on the teamsheet aswell under the tactic.

if(event < teamOnePoint)
						int free = (int)(Math.random() * 4);

						if(free > 0)
							p = teamOne.getPlayers().get(playerEvent(teamOne, 37, 71, 91, 99)).getName();
							comment = commentary.getPointCom(p, teamOne);
							p = teamOne.getFreeTaker().getName();
							comment = commentary.getFreeCom(p, teamTwo);

						score = true;

Commentary lines look like this before being read in. <name> is replace by the player performing the action and <other> is a relevant other player involved in the play.


<name> hits it past the goalie and into the back of the net.
<name> catches the ball, turns and scores a goal.
The ball is picked up by the sideline by <name> he solos past two men and hits it past the goalie.
The sliotar is rifled past the goalie by <name>.
The ball is fumbled by the goalie and <name> pulls on it.
A good ball into the corner to <name> leads to a good shot past the goalie.
The ball is caught by <other> and he lays it off to <name> who scores a goal.
A fast pull by <name> and its a goal.
<other> breaks the high ball for <name> who hits it past the keeper.
A lucky break falls to <name> and he finishes the goal.

Tagged , , ,

Hurling Simulation Engine

I have started on a new project to do in my spare time. Its based around two things I really enjoy, Hurling and sports simulation games. I have started writing an engine to simulate hurling matches and give out scores, stats and match reports. I started by looking at results over the last two years for matches to try get various stats such as goals per game and points per game. I then broke it into steps, first getting the right number of scores, then scores per team, then goals and points per team. Right now I am simulating results quite similar to real results.

The program takes in teamsheets from textfiles with the players listed in position. Each player has 4 ratings, goalie, defence, pass and attack, on a 1 to 20 scale. These determine how good each is in each position. Player abilities affect the overall team performance and the likelihood of each scoring. I am currently trying to alter the probabilities further so that the overall attacking skill affects the scores of a team as does the defence.

I also can read commentary in from textfiles and with some manipulation can output the action just performed. All these are put together and outputted to another file.

Sample Teamsheet

Sample Match Report

MIN) 0 The ball is sent over the bar by HFA1.
0-1 TO 0-0
MIN) 2 MFA1 picks up the sliotar and hits it over the bar.
0-2 TO 0-0
MIN) 9 The ball is sent over the bar by FFB2.
0-2 TO 0-1
MIN) 12 The ball is sent over the bar by MFB1.
0-2 TO 0-2
MIN) 13 FFB2 picks up the sliotar and hits it over the bar.
0-2 TO 0-3
MIN) 14 FFB3 catches the ball, turns and scores a goal.
0-2 TO 1-3
MIN) 17 MFA2 picks up the sliotar and hits it over the bar.
0-3 TO 1-3


Tagged , , ,

Reboot: The Game

Over the last month or so I have been working on a new game called Reboot. I was making this as part of a team of three for a competition Games Fleadh. At the competition we managed to take home the Best Original Story Award for our game. It was a very enjoyable competition and I was quite pleased with the final game we produced. In this entry I’m going to talk about the game itself that we made.


The game is a (semi) top down dungeon crawler. The player is a robot that is trying to free itself from a prison that it was placed in for breaking the three laws of Robotics. They must fight and destroy the tanks preventing their escape through three levels. Each level is made up of a number of rooms. These rooms contain different enemies and enemy combinations. Each room is different which keeps the gameplay interesting and exciting. There is a boss battle at the end of the three levels. Once the player passes a level they are taken to the shop. At the shop they can choose to buy various items that help them in the next level.

Reboot3 Reboot4 Reboot5

Other Features:

– Weather Effects: The weather changes in outside areas and these affect the player in different ways

– Day/Night cycle: There is a constant time running through the game and depending on the time of the day it affects the enemies

– Level loading: The levels are all made in text files and are loaded in. They are premade now but random room loading could be added later.
Reboot6 Reboot7 Reboot8 Reboot9

Tagged , ,

Reboot: My Responsibilities

Over the last month or so I have been working on a new game called Reboot. I was making this as part of a team of three for a competition Games Fleadh. At the competition we managed to take home the Best Original Story Award for our game. It was a very enjoyable competition and I was quite pleased with the final game we produced. I’m going to talk briefly about my responsibilities in the development of the game.

My main jobs were involved with the player and the enemies in the game. My work on the player involved making the movement, the shooting and the stats needed for the player to function. This was mostly straight forward. The movement was handled by WASD and the shooting was done by arrow keys. Each arrow allowed you to shoot in that direction. The stats of the player included health, damage, power and speed. I had to make methods to deal with various effects to these. For example items would give you boosts to them. There was also weather in the game and these would affect the player in various ways ie snow slowed you down, rain made you use double power.

The enemies were a lot more difficult. We needed to have enough variety in enemies so the game didn’t get stale too fast. I started by creating a number of different shooting methods and different movement methods. These each acted in their own way. Then I combined them together to make different enemies. For instance by combining the patrol movement and shoot straight made a fairly easy enemy. But combining the random movement and circle shooting made a very unpredictable enemy.

There was also an enemy who would shoot tracking shots at you. I did this by making the tracking bullet a new enemy type. The shooter simply spawned a new enemy on itself that then moved towards the player. A similar solution was used to make boss battles more challenging. The boss of each level would spawn simple enemies to help itself.

I had a few other jobs such as making the menu systems, developing the shop and putting in the story to the game. These were controlled by the arrow keys and simply scrolled through arrays and updating the current index.

Tagged , ,

Alien Town Update

I have been adding a number of new features to Alien Town. A lot of them are small but they all add something good to the game.

There is now a restart option when you die. You are brought back to the main menu and can click start again and new game will be generated. There are temporary menus in place as well. These will be made properly soon. When you are to click on a button it will change colour to show you are hovering over it.
End turn is automatically called now if your moves get to 0. This is to prevent slowing down when you only have 1 move total. The game can be played faster now. A health bar has been added which will show your health in graphic form. Nice and easy for checking your status.

Future Updates:
– Peek inside a building before entering
– Character select
– Implement story

Tagged , ,

Playable Build

I have made the current build of the game available for download. You can play it and notify me of any bugs that appear in it. Theres a readme file in the zip with some instructions on how to play.

Download Build

Contact: liammail1@eircom.net

Tagged , ,