Making games in Presser’s lab

Hi! I am Thanh Duong from Professor Presser’s lab. Like my other two labmates, this summer, I will be working on making a game. This is my first time doing X-SIG and research in general, and I have enjoyed it a lot so far.

About my project: I will be working on a variant of the game tic-tac-toe. The game will be played in the icosahedron shape (20 faces in three dimensions). Two players will be competing with each other; each player will be able to play both O and X; the person getting the first path of 4 of either O or X will win the game. To make the game more interesting, some of the faces of the shape will be blocked randomly (more specifically, for most of the time, about 3 or 4 faces will be blocked), meaning that the board will be different each time we play. I also create the One-player mode, meaning that the player can choose to play with the computer at different levels (Easy – Medium – Hard).

Methods:
My first step was to determine the optimal “content” of the game, which are “how many to win” and “how many to block”. For this, I created a computer player with simple rules: win an immediate win, avoid an immediate loss, and play randomly otherwise. I then let them play with each other to collect the statistics: the percentage of Player 1 winning/losing/tied, and the average number of moves for the game to end. I then choose the “content” with the best the statistics (I want the percent of Player 1 winning/losing to be close to each other as I don’t want my game to be biased, while choosing the best percentage of tied games and the average number of moves were kind of subjective).

My next step would be to create a computer player for the One-player mode. Since I want to have different levels of difficulty, I use neural networks as the size of the neural networks would be correlated with how “smart” they would be. I first simulate a large number of games, storing each state of the games, with each state being marked with the final result of a match. I use that for the neural network to learn. Then, for each computer move, for every possible move, I use the simulated results to produce the next state of the game and use the model to predict the outcome. I will use the move with the most favorable outcome for computer play as its next move.

My last step, with I have not started yet, is to finish the interface. I will use the game engine Godot for this task.

My experience:
It has been a great journey! I am learning new things every day, whether from the professor, from reading articles, or from mistakes I made when writing codes. I really like that for making games, I do not focus on a specific field like class projects only, but on a much broader field.

As you can see, my project involves a lot of simulating and building models, which could be faster when running on several machines. Below is a sneak peek of how “A day in my lab” looks like: