BUILD YOUR OWN GAME

Have you ever wondered if you could build your own chess game and play it with an AI engine on the browser? If you do, then you might...

BUILD YOUR OWN GAME
Written by TechnoLynx Published on 30 Jan 2023

It is no wonder that chess is the most popular intellectual game in the world. We can trace this game to the 6th century, which has stuck because of its complex and challenging nature until these days.

The first “chess machine” was invented by the Hungarian Wolfgang Von Kempelen (Kempelen Farkas) in 1770, known as the Mechanical Turk. The inventor claimed that the machine was fully automatic. Moreover, its elaborate mechanism and the fact that it had defeated even chess masters convinced many people. But did a successful chess machine already exist in the late 18th century? The answer is no. The truth was that Wolfgang von Kempelen had hired several chess masters and hid them inside the machine. The hidden players then controlled the mechanical arms of the Turk manually. As a result, the chess machine has traveled worldwide, impressed people everywhere, and inspired them to create their own.

In the last century, the concern became creating a machine with human-like intelligence. The mathematician and computer scientist Alan Turing was amongst the first to start laying down the principles of chess AI algorithms. Many are familiar with his name thanks to the recent movie “The Imitation Game,” about how he helped crack the German ciphers encoded with the Enigma machine [4]. However, his work on artificial intelligence led him toward chess, specifically the theory of using computers to play chess.

Around 1948, he and his colleague David Gawen Champerowne wrote the first computer chess program, called Turochamp, using the following basic principles that each piece on the board was assigned a value: pawn = 1, knight = 3, bishop = 3.5, rook = 5, queen = 10, and king = 1000. The algorithm foresaw two moves to calculate every possible combination of moves and then chose the most rewarding one. He tested his algorithm by challenging one of his friends, Alick Glennie. Since computers at the time were not up to heavy computing calculations, Turing calculated the moves on paper by hand (which took him more than 30 minutes on the average per move). Unfortunately, Turing and his algorithm lost the match. Nevertheless, he constructed the earliest known computer chess program.

So now, what about you? Are you ready to build your chessboard on a webpage?

Building the chessboard

In this section, we will teach you how to build a simple chessboard using html and javascript (no css styling needed). The method used may not be the best, yet it is easy to understand.

Let us break it into simple steps and statements:

a) Creating the canvas: to draw the chessboard, we brought a white canvas element in html with a specific height and width to stick the pieces on it later. The code in html is as simple as:





<canvas width=”512” height=”512” id=”canvas”></canvas>




b) Drawing the squares:

Since we have a white canvas, we chose to draw the squares and pieces using functions in JavaScript. The squares are created by slicing the canvas into 64 identical squares alternating between black and white. The code for this is as follows:

Note: dimension = 8 is the number of files/ ranks in the chessboard and the context.globalAlpha is set to 1 to make the canvas rendering fully opaque.



function draw_board()
{
    let square_colors = ["LightGray", "DarkGray"];
    context.globalAlpha = 1;

    for (let r = 0; r < dimension; ++r)
    {
        for (let c = 0; c < dimension; ++c)
        {
            context.fillStyle = square_colors[(r + c) % 2];
            context.fillRect(
                c * square_width,
                r * square_height,
                square_width,
                square_height);
        }
    }
}


c) Drawing the pieces:

The pieces are of a complex shape; therefore, images of them are easier to insert and use. You may get the images from any source and import them into your js code. Then we can organize them into a list to put them in a loop. You can see here that we used the instance game_state to place each piece in its correct initial position. Nevertheless, it is better explained later in the article.



function draw_pieces()
{
    context.globalAlpha = 1;

    for (let r = 0; r < dimension; ++r)
    {
        for (let c = 0; c < dimension; ++c)
        {
            let piece = game_state.board[r][c];
            let piece_image = images[piece];

            if (piece != "--")
            {
                context.drawImage(
                    piece_image, c * square_width, r * square_height);
            }
        }
    }
}


Now that we have all the drawing elements, how do we link them all together?

We link the html body with an initiating function that defines the canvas elements and events.

So in html, we add the following in the body tag:



body onload="window.index.init()"


Then in the js code:



export function init()
{
    canvas = document.getElementById("canvas");
    context = canvas.getContext("2d");
    square_width = canvas.width / 8;
    square_height = canvas.height / 8;
    for (let [name, image] of Object.entries(image_map))
    {
        images[name] = new Image(64, 64);
        images[name].onload = draw_pieces;
        images[name].src = image;
    }

    draw_board();
}


The view of our chessboard on the page after building the html
The view of our chessboard on the page after building the html

Basic functionality of a chess game

To create a real chess game, we must move the piece and keep track of their positions at all times. However, this is not as simple as it sounds in programming. Let’s say we want to create a class that defines the game and let’s call it game_state. It needs to state the initial board position and the offset of each piece and move it accordingly while logging the new board position. For example, this snippet code shows the board representation and then the knight offset.



export class Game_state
{
    constructor()
    {
        this.board =
        [
            ["bR", "bN", "bB", "bQ", "bK", "bB", "bN", "bR"],
            ["bP", "bP", "bP", "bP", "bP", "bP", "bP", "bP"],
            ["--", "--", "--", "--", "--", "--", "--", "--"],
            ["--", "--", "--", "--", "--", "--", "--", "--"],
            ["--", "--", "--", "--", "--", "--", "--", "--"],
            ["--", "--", "--", "--", "--", "--", "--", "--"],
            ["wP", "wP", "wP", "wP", "wP", "wP", "wP", "wP"],
            ["wR", "wN", "wB", "wQ", "wK", "wB", "wN", "wR"]
        ];
        this.knight_offsets =
        [
            [ 2,  1],
            [ 2, -1],
            [ 1,  2],
            [ 1, -2],
            [-1,  2],
            [-1, -2],
            [-2, -1],
            [-2,  1]
        ];
    }
}


Moving the pieces: There are different types of moves in chess. Any move could be a start, end, board move, capturing a piece, promotion move, en-passant move, or castle move. Each of them should be defined. For example, an en-passant move can be made with:



if (move.en_passant_move)
        {
            const direction = this.white_to_move ? 1 : -1;

            this.board[move.end[0] + direction][move.end[1]] = "--";
        }


By now, the piece could move, but what if the move was illegal?

Each move needs to be validated. If the move is illegal, then the piece should be retracted automatically. Yet, suppose you want to make it easier for the player to commit legal moves only. In that case, you can define all the valid moves of a piece and highlight them when the player touches (clicks on) any piece to move. For example, you may check all the possible moves of a piece with a code similar to this:



get_all_possible_moves()
    {
        let moves = [];

        for (let row = 0; row < this.board.length; ++row)
        {
            for (let column = 0; column < this.board[row].length; ++column)
            {
                let player = this.board[row][column][0];
                let current_color = this.white_to_move ? "w" : "b";

                if (player == current_color)
                {
                    let piece = this.board[row][column][1];

                    this.move_methods[piece].call(this, row, column, moves);
                }
            }
        }

        return moves;
    }


Did you make a move and regret it or make a mistake? Then you need to introduce the undo button to your game.

It is easily implemented in HTML by adding the following:

<div>
	<button onclick="window.index.undo_click()">Undo</button>
</div>

In js code, you may create the undo function as a method of the game_state, which allows you to edit other attributes in game-tracking, such as making a move and game-over status. Check it below:



export function undo_click()
{
    game_state.undo_move();
    made_move = true;
    game_over = false;

    refresh_state();
}


In concept, the undo method is purely popping the last move out of the log. Nevertheless, what if the move was a promotion or en-passant? Then we need to define more conditions that cover all possibilities. Let’s look at the code snippet below. It checks the move type as promotion and takes multiple actions to revoke it, including the return of the captured piece during the move.



if (last_move.promotion_move)
        {
            const color = this.white_to_move ? "b" : "w";

            this.board[last_move.end[0]][last_move.end[1]] =
                last_move.piece_captured;
            this.board[last_move.start[0]][last_move.start[1]] = color + 'P';
        }
		

Now we have all bases covered to start playing.

But do you want to play alone? Absolutely not. Let’s create an AI opponent.

The first thing that you need to build an AI opponent is data. Let’s put it as you feed the model some inputs to teach it how to digest them and generate the specific output. For chess, these data are recorded games between real players. These recorded games are formed as Portable Game Notation (PGN) files. Fortunately, many PGN databases are available online for free, and you may use any. Yet keep in your mind that these notation files need to be parsed. Our recommendation is to use chess.pgn in Python.

So let’s consider that you already have parsed the database and are ready to use it; thus, it’s time to build our AI model. We can create a sequential model out of multiple layers using TensorFlow and Keras. As you may see below, the model consists of 2 layers of 2D Convolutional Neural Networks (CNN), Flatten, 2 layers of Dense Neural Networks (DNN), and a softmax layer. You can notice that we used the Adam optimizer and binary loss entropy function to optimize the training process.



model = models.Sequential()
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), padding='same',
                        activation='relu', input_shape=(8, 8, 12)))
model.add(layers.Conv2D(filters=32, kernel_size=(5, 5), strides=(1, 1),
                        padding='valid', activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(2))
model.add(tf.keras.layers.Softmax())
model.summary()
model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=['accuracy'])
			  

Note: after building the model and training it in Python, you can convert it into Javascript code.

After training the model, you need a function that will enable the AI engine to move a piece based on predicting the best valid move possible at a specific game state. In other words, you need to link the AI prediction with the chess functions provided earlier in the Javascript code. For example, selecting the best move will be as the following:



export function find_model_best_move(game_state, valid_moves)
{   let max_score = 0;
    let next_move = null;
    if (!model)
    {
        return next_move;
    }
    for (const move of valid_moves)
    {
        let scores;
        let score;
        // Make a valid move
        game_state.make_move(move);
        // Expand current position to 4D b/c model input requirement
        const input = tf.tensor([ game_state.get_position() ]);
        // Model predicts score (shape:(1,2)) of current position
        scores = model.predict(input).arraySync();
        console.assert(scores[0][0] + scores[0][1] >= 0.99);
        score = scores[0][game_state.white_to_move ? 0 : 1];
        if (score > max_score)
        {
            max_score = score;
            next_move = move;
        }
    }
    return next_move;
}


Don’t forget to add the button and link it with a function to enable the AI feature.

Are you wondering how to link all the files together? Well, module bundling is the solution to that.

Here we reach the end of this story. We provided tutorial-like instructions and discussion to build your own chess game on a webpage, define your desired rules, and program your ultimate opponent. Nevertheless, our description was brief in some points, but we hope our article encouraged you to go and search further.

What is your next move?

For the full code to build your own game, please check our repository on GitHub.

If you are interested in playing against our AI engine, please visit the page under Demos.

Cover image: by Felix Mittermeier on Unsplash

AI in Pharma R&D: Faster, Smarter Decisions

AI in Pharma R&D: Faster, Smarter Decisions

3/10/2025

How AI helps pharma teams accelerate research, reduce risk, and improve decision-making in drug development.

Sterile Manufacturing: Precision Meets Performance

Sterile Manufacturing: Precision Meets Performance

2/10/2025

How AI and smart systems are helping pharma teams improve sterile manufacturing without compromising compliance or speed.

Biologics Without Bottlenecks: Smarter Drug Development

Biologics Without Bottlenecks: Smarter Drug Development

1/10/2025

How AI and visual computing are helping pharma teams accelerate biologics development and reduce costly delays.

AI for Cleanroom Compliance: Smarter, Safer Pharma

AI for Cleanroom Compliance: Smarter, Safer Pharma

30/09/2025

Discover how AI-powered vision systems are revolutionising cleanroom compliance in pharma, balancing Annex 1 regulations with GDPR-friendly innovation.

Nitrosamines in Medicines: From Risk to Control

Nitrosamines in Medicines: From Risk to Control

29/09/2025

A practical guide for pharma teams to assess, test, and control nitrosamine risks—clear workflow, analytical tactics, limits, and lifecycle governance.

Making Lab Methods Work: Q2(R2) and Q14 Explained

Making Lab Methods Work: Q2(R2) and Q14 Explained

26/09/2025

How to build, validate, and maintain analytical methods under ICH Q2(R2)/Q14—clear actions, smart documentation, and room for innovation.

Barcodes in Pharma: From DSCSA to FMD in Practice

Barcodes in Pharma: From DSCSA to FMD in Practice

25/09/2025

What the 2‑D barcode and seal on your medicine mean, how pharmacists scan packs, and why these checks stop fake medicines reaching you.

Pharma’s EU AI Act Playbook: GxP‑Ready Steps

Pharma’s EU AI Act Playbook: GxP‑Ready Steps

24/09/2025

A clear, GxP‑ready guide to the EU AI Act for pharma and medical devices: risk tiers, GPAI, codes of practice, governance, and audit‑ready execution.

Cell Painting: Fixing Batch Effects for Reliable HCS

Cell Painting: Fixing Batch Effects for Reliable HCS

23/09/2025

Reduce batch effects in Cell Painting. Standardise assays, adopt OME‑Zarr, and apply robust harmonisation to make high‑content screening reproducible.

Explainable Digital Pathology: QC that Scales

Explainable Digital Pathology: QC that Scales

22/09/2025

Raise slide quality and trust in AI for digital pathology with robust WSI validation, automated QC, and explainable outputs that fit clinical workflows.

Validation‑Ready AI for GxP Operations in Pharma

Validation‑Ready AI for GxP Operations in Pharma

19/09/2025

Make AI systems validation‑ready across GxP. GMP, GCP and GLP. Build secure, audit‑ready workflows for data integrity, manufacturing and clinical trials.

Image Analysis in Biotechnology: Uses and Benefits

Image Analysis in Biotechnology: Uses and Benefits

17/09/2025

Learn how image analysis supports biotechnology, from gene therapy to agricultural production, improving biotechnology products through cost effective and accurate imaging.

Edge Imaging for Reliable Cell and Gene Therapy

17/09/2025

Edge imaging transforms cell & gene therapy manufacturing with real‑time monitoring, risk‑based control and Annex 1 compliance for safer, faster production.

Biotechnology Solutions for Climate Change Challenges

16/09/2025

See how biotechnology helps fight climate change with innovations in energy, farming, and industry while cutting greenhouse gas emissions.

Vision Analytics Driving Safer Cell and Gene Therapy

15/09/2025

Learn how vision analytics supports cell and gene therapy through safer trials, better monitoring, and efficient manufacturing for regenerative medicine.

AI in Genetic Variant Interpretation: From Data to Meaning

15/09/2025

AI enhances genetic variant interpretation by analysing DNA sequences, de novo variants, and complex patterns in the human genome for clinical precision.

AI Visual Inspection for Sterile Injectables

11/09/2025

Improve quality and safety in sterile injectable manufacturing with AI‑driven visual inspection, real‑time control and cost‑effective compliance.

Turning Telecom Data Overload into AI Insights

10/09/2025

Learn how telecoms use AI to turn data overload into actionable insights. Improve efficiency with machine learning, deep learning, and NLP.

Computer Vision in Action: Examples and Applications

9/09/2025

Learn computer vision examples and applications across healthcare, transport, retail, and more. See how computer vision technology transforms industries today.

Hidden Costs of Fragmented Security Systems

8/09/2025

Learn the hidden costs of a fragmented security system, from monthly fee traps to rising insurance premiums, and how to fix them cost-effectively.

EU GMP Annex 1 Guidelines for Sterile Drugs

5/09/2025

Learn about EU GMP Annex 1 compliance, contamination control strategies, and how the pharmaceutical industry ensures sterile drug products.

Predicting Clinical Trial Risks with AI in Real Time

5/09/2025

AI helps pharma teams predict clinical trial risks, side effects, and deviations in real time, improving decisions and protecting human subjects.

5 Real-World Costs of Outdated Video Surveillance

4/09/2025

Outdated video surveillance workflows carry hidden costs. Learn the risks of poor image quality, rising maintenance, and missed incidents.

GDPR and AI in Surveillance: Compliance in a New Era

2/09/2025

Learn how GDPR shapes surveillance in the era of AI. Understand data protection principles, personal information rules, and compliance requirements for organisations.

Generative AI in Pharma: Compliance and Innovation

1/09/2025

Generative AI transforms pharma by streamlining compliance, drug discovery, and documentation with AI models, GANs, and synthetic training data for safer innovation.

AI Vision Models for Pharmaceutical Quality Control

1/09/2025

Learn how AI vision models transform quality control in pharmaceuticals with neural networks, transformer architecture, and high-resolution image analysis.

AI Analytics Tackling Telecom Data Overload

29/08/2025

Learn how AI-powered analytics helps telecoms manage data overload, improve real-time insights, and transform big data into value for long-term growth.

AI Visual Inspections Aligned with Annex 1 Compliance

28/08/2025

Learn how AI supports Annex 1 compliance in pharma manufacturing with smarter visual inspections, risk assessments, and contamination control strategies.

Cutting SOC Noise with AI-Powered Alerting

27/08/2025

Learn how AI-powered alerting reduces SOC noise, improves real time detection, and strengthens organisation security posture while reducing the risk of data breaches.

AI for Pharma Compliance: Smarter Quality, Safer Trials

27/08/2025

AI helps pharma teams improve compliance, reduce risk, and manage quality in clinical trials and manufacturing with real-time insights.

Cleanroom Compliance in Biotech and Pharma

26/08/2025

Learn how cleanroom technology supports compliance in biotech and pharmaceutical industries. From modular cleanrooms to laminar flow systems, meet ISO 14644-1 standards without compromise.

AI’s Role in Clinical Genetics Interpretation

25/08/2025

Learn how AI supports clinical genetics by interpreting variants, analysing complex patterns, and improving the diagnosis of genetic disorders in real time.

Computer Vision and the Future of Safety and Security

19/08/2025

Learn how computer vision improves safety and security through object detection, facial recognition, OCR, and deep learning models in industries from healthcare to transport.

Artificial Intelligence in Video Surveillance

18/08/2025

Learn how artificial intelligence transforms video surveillance through deep learning, neural networks, and real-time analysis for smarter decision support.

Top Biotechnology Innovations Driving Industry R&D

15/08/2025

Learn about the leading biotechnology innovations shaping research and development in the industry, from genetic engineering to tissue engineering.

AR and VR in Telecom: Practical Use Cases

14/08/2025

Learn how AR and VR transform telecom through real world use cases, immersive experience, and improved user experience across mobile devices and virtual environments.

AI-Enabled Medical Devices for Smarter Healthcare

13/08/2025

See how artificial intelligence enhances medical devices, deep learning, computer vision, and decision support for real-time healthcare applications.

3D Models Driving Advances in Modern Biotechnology

12/08/2025

Learn how biotechnology and 3D models improve genetic engineering, tissue engineering, industrial processes, and human health applications.

Computer Vision Applications in Modern Telecommunications

11/08/2025

Learn how computer vision transforms telecommunications with object detection, OCR, real-time video analysis, and AI-powered systems for efficiency and accuracy.

Telecom Supply Chain Software for Smarter Operations

8/08/2025

Learn how telecom supply chain software and solutions improve efficiency, reduce costs, and help supply chain managers deliver better products and services.

Enhancing Peripheral Vision in VR for Wider Awareness

6/08/2025

Learn how improving peripheral vision in VR enhances field of view, supports immersive experiences, and aids users with tunnel vision or eye disease.

AI-Driven Opportunities for Smarter Problem Solving

5/08/2025

AI-driven problem-solving opens new paths for complex issues. Learn how machine learning and real-time analysis enhance strategies.

10 Applications of Computer Vision in Autonomous Vehicles

4/08/2025

Learn 10 real world applications of computer vision in autonomous vehicles. Discover object detection, deep learning model use, safety features and real time video handling.

10 Applications of Computer Vision in Autonomous Vehicles

4/08/2025

Learn 10 real world applications of computer vision in autonomous vehicles. Discover object detection, deep learning model use, safety features and real time video handling.

How AI Is Transforming Wall Street Fast

1/08/2025

Discover how artificial intelligence and natural language processing with large language models, deep learning, neural networks, and real-time data are reshaping trading, analysis, and decision support on Wall Street.

How AI Transforms Communication: Key Benefits in Action

31/07/2025

How AI transforms communication: body language, eye contact, natural languages. Top benefits explained. TechnoLynx guides real‑time communication with large language models.

Top UX Design Principles for Augmented Reality Development

30/07/2025

Learn key augmented reality UX design principles to improve visual design, interaction design, and user experience in AR apps and mobile experiences.

AI Meets Operations Research in Data Analytics

29/07/2025

AI in operations research blends data analytics and computer science to solve problems in supply chain, logistics, and optimisation for smarter, efficient systems.

← Back to Blog Overview