Cong Peng

Hello, and thanks for visiting my website! My name is Cong Peng, and you can call me Connor.

Currently, I am a graduate of the MSc Computer Games programme at Queen Mary, University of London.

I am also a game enthusiast who wishes to become a game developer.

I am interested in game design, AI and programming, and I enjoy solving problems creatively, especially with limited assets.

DDA Boss Fights


"The boss itself has an imaginative design." Dr Jeremy Gow


Imagine having a boss and multiple actions (especially attacks) already designed. Then an AI system can automatically manage the boss's behaviour. If we apply the system to a behaviour tree, the step of random selection will be replaced with choosing an action using the Dynamic Difficulty Adjustment (DDA) system based on the player’s performance.

The system targets minimising the HP gap between the player and the boss to improve the player experience. During the selection step, the fitness of each action is calculated first. Then I introduced two selection strategies from Evolutionary Algorithm, Roulette and Rank, for the action choice.

The project is written in C# and developed in Unity. It was pretty challenging to create the boss’ abilities and add audio with only free assets, but I enjoyed it a lot during this process.

Finally, I surveyed to collect players’ opinions. Among 20 participants, I found that those bosses applied with a DDA system are generally more popular, while players with different skill levels have diverse preferences for bosses.

2D Game Level Generator

This project was the prototype of DDA boss fights, and it is written in C# and developed in Unity.

The generator uses Perlin noise to generate caves to form the fundamental level structure. Then in the caves, it randomly generates level features including spikes, potions and particles (random player events, e.g., decreasing player movement speed and increasing player attack damage).

It can generate diverse levels by adjusting the modifier of Perlin noise, the danger degree, and the potion and player events proportion. There is always a path to the boss stage, thanks to channel control.

Frozen Lake Level Generator

As an environment for Reinforcement Learning, Frozen Lake’s levels are not designed for human players. Most of its levels are not fun enough from a player’s perspective, but I believe it has the potential to be enjoyable.

So, I used Evolutionary Algorithm to generate fun levels of Frozen Lake. The project was written in Python and developed in Google Colab.

The most challenging part was the definition of fitness. With the knowledge of game design fundamentals, I integrated three features into the fitness function: the length of the shortest path, the number of holes and the danger degree of the shortest path.

The result was quite satisfying, and the generator can produce high-quality levels of Frozen Lake stably.

Mini-Game

Written in C++, this mini-game involves multiple game design patterns. Through this project, I have learnt how significant the design patterns are for extensibility and readability, and the cost of each pattern.

I worked with a fellow student to complete the assignment, and we ultimately received a mark of 94%. Throughout the development, we collaborated well and discussed a lot on how to make the common interfaces clean and extensible for each other’s tasks.

Tales of Syrinx

Written in C#, Tales of Syrinx is a platformer developed in Unity by a group of three.

One member wished to retell the Syrinx myth from Greek mythology. She was transformed into hollow water reeds to run away from the amorous god Pan. So, I designed the reed generation as her core ability. The player can use the reed as a temporary platform and defensive tool in the game. Then I designed several puzzles around the reed in the level. Creating multipurpose abilities has become my favourite design process.

In terms of teamwork, we did well overall. However, I was eager to add more features and was overly detail-oriented. So, the project became somewhat disordered as I did too many, even some of which were not my responsibility. Later I realised that the development should have started out with a detailed plan, and the division of tasks should have been clear-cut.

Battle of the Plants

Battle of the Plants is a 2v2 board game. I spend much time designing the core mechanics to make the rules simple and intuitive. Besides, I playtested the game and adopted others’ feedback to improve the balance. I was excited to see how much my fellow students appreciated it.

Pommerman Agents

This project is written in Java, which includes three AI agents I designed for the Pommerman game.

The first one chooses the action according to the current time, and the second one involves rule-based and One step look ahead (OSLA) methods. The last one is a variant of the Monte-Carlo Tree Search (MCTS), enhanced by progressive bias and biasing rollouts.

All agents perform better than the agents in the same skill levels.

Technical Reviews

1. AI Companions in BioShock Infinite and The Last of Us

2. Video Game Design with Description Languages (grade: 90%)