Игра Раскраска написана на Питоне с использованием графической библиотеки Tkinter. Правила игры просты, необходимо закрасить всё поле в один цвет начиная с левого верхнего угла.

Закрашиваются только области, совпадающие по цвету и смежные с левым верхним углом.  Игрок сообщает в программу цвет, в который хочет красить кликнув мышью по игровому полю. Программа написана на Python с использованием графической библиотеки Tkinter. Устанавливать программу нет необходимости. На компьютере, с любой операционной системой, где предустановлен Python 3 программа запускается из командной строки по имени файла. Так же запустить программу можно из среды Python или из любой IDE Python3, например IDLE.

#!/usr/bin/python3
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: t; c-basic-offset: 4; tab-width:$

# Painter
# This is my version of the game, known as Filler.
#
# Created on July 5, 2021.
# Author of this program code : Diorditsa A.
# I thank Sergey Polozkov for checking the code for hidden errors?
#
# painter.py is distributed in the hope that it will be useful, but
# WITHOUT WARRANTY OF ANY KIND; not even an implied warranty
# MARKETABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See. See the GNU General Public License for more information.
# You can get a copy of the GNU General Public License
# by link http://www.gnu.org/licenses/

from tkinter import *
from  random import choice
SIDE = 17; SIZE = 47                                        # элементов, пикселей
COLORSCHEMES = ('#f00','#0f0','#00f','#ff0','#d7f','#988')  # RGB
PLAYGROUND = []                                             # Цветное поле int
nextColor = oldColor = 0                                    # Новый цвет и цвет в левом верхнем углу

def play(self):
    global nextColor, oldColor
    n = self.x//SIZE + self.y//SIZE*SIDE
    nextColor = PLAYGROUND[n]
    oldColor = PLAYGROUND[0]
    if nextColor != oldColor:                               # не запускать бесконечную рекурсию (масло маслянное)
        zone(0, 0)
    elif n == 0:
        newGame()
    doDraw()

def zone(x, y):                                             # Author of this algorithm : Diorditsa A.
    if x in range(0, SIDE) and y in range(0, SIDE):
        global nextColor, oldColor
        if PLAYGROUND[x+y*SIDE] == oldColor:
            PLAYGROUND[x+y*SIDE] = nextColor
            zone(x+1, y)
            zone(x, y+1)
            zone(x-1, y)
            zone(x, y-1)

def doDraw():
    cnv.delete('rctng')
    for j in range(SIDE):
        for i in range(SIDE):
            cnv.create_rectangle(i*SIZE, j*SIZE, (i+1)*SIZE, (j+1)*SIZE,
                                 fill=COLORSCHEMES[PLAYGROUND[(i)+(j*SIDE)]],
                                 width=0, tag='rctng')
    cnv.tkraise('txtStart')

def newGame():
    PLAYGROUND.clear()
    for i in range(SIDE*SIDE):
        PLAYGROUND.append(choice(range(6)))

tk = Tk()
tk.title('Раскраска')
cnv = Canvas(width=SIDE*SIZE, height=SIDE*SIZE, bg='white')
cnv.pack(expand=YES, fill=BOTH)
cnv.bind('<Button-1>', play)
cnv.create_text(SIZE//2, SIZE//2, text='Start', anchor=CENTER, tag='txtStart')
newGame()
doDraw()

mainloop()

Листинг 1. Программа на Python, файл painter.py

Обратите внимание, функция zone() использует рекурсию, благодаря чему удалось в таком коротком коде уместить такой функционал. Учитесь.

Рис. 1. Игра "Раскраска".