The Challenge
I've been interested in developing more mobile applications with Delphi and FireMonkey, but there has always been one area where I've lacked confidence: UI and UX design.
So, with the arrival of Embarcadero's new Kai, I decided to run a small experiment.
Could Kai compensate enough for my lack of UI/UX skills?
Rather than starting an ambitious project, I deliberately chose something small: TicTacToe.
Why TicTacToe?
The application needed to be simple enough that I could complete it quickly, while still giving Kai a meaningful UI challenge.
TicTacToe turned out to be a good fit. Although the game itself is simple, implementing it as a polished FMX application touches several areas I wanted to explore:
- layouts and responsive sizing
- reusable frames
- custom painting and graphics
- animations and visual effects
- interaction and state changes
I imposed a constraint: the project was time-boxed to one day of development.
The target platforms were Android and Windows, with Linux added later.
Dividing the Responsibilities
I developed the application with Kai's help over two afternoons.
The architecture, game logic, and gameplay were my work.
The entire user interface was created with Kai's assistance, including the frames, layouts, painting, and animation effects.
Here are some example interactions with Kai:
The Game
The resulting application has four computer opponents of increasing difficulty:
- Tipsy: Unpredictable. Capable of brilliance or complete nonsense.
- Genghis: Aggressive. Solid enough to punish mistakes, but occasionally overcommits.
- Boris: Disciplined. Plays by the book and is difficult to outplay.
- Sima Yi: Relentless. Never gives an inch.
The opponents' behaviour is assembled from tactics in Core.Players, making it possible to change an opponent's playing style or create additional opponents by composing different tactics.
There is also a configurable timer to add pressure to the game.
Who plays first is randomly determined. If the computer gets the first move, it plays immediately.
Scores are determined by the strength of the opponent, timer pressure, and the number of moves played.
For more screenshots and source code, please see GitHub.
Was the Experiment Successful?
For me, yes. I was pleasantly surprised.
I deliberately gave myself a small application and a strict time limit because I wanted to evaluate whether Kai could meaningfully assist in an area where I don't consider myself particularly strong.
After one development day, I had a working FMX game with a UI involving layouts, frames, custom graphics, animations, and responsive behaviour, running across Android, Windows, and Linux.
Could Kai compensate enough for my lack of UI/UX skills that I'd have the confidence to develop mobile applications using FMX?
Based on this experiment, yes.