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

Программа состоит из двух файлов example.glade и example.py. Запускается из командной строки командой ./example.py.

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkWindow" id="window">
    <property name="can_focus">False</property>
    <property name="hexpand">True</property>
    <property name="vexpand">True</property>
    <property name="title" translatable="yes">"Раскраска" Автор Диордица АА Лицензия Simplified BSD Желаю уДачи</property>
    <property name="default_width">801</property>
    <property name="default_height">801</property>
    <signal name="button-press-event" handler="on_click" swapped="no"/>
    <signal name="destroy" handler="on_destroy" swapped="no"/>
    <child>
      <placeholder/>
    </child>
    <child>
      <object class="GtkDrawingArea" id="colorDraw">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
      </object>
    </child>
  </object>
</interface>

Листинг 1. XML файл example.glade

#!/usr/bin/python3
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: t; c-basic-offset: 4; tab-width:$
# Автор программы Диордица АА
# Лицензия Simplified BSD
# Желаю уДачи
#
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject
import random, math, cairo
XML_FILE = "example.glade"
SIDE = 17  # элементов
SIZE = 47  # пикселей
COLORSCHEMES = ((1,0,0),(0,1,0),(0,0,1),(0.95,0.9,0),(1,0,1),(0.6,0.5,0.5))
PLAYGROUND = []  # Цветное поле int
ZONE = []        # Занятая зона boolean

for row in range (SIDE+1):      # сторока
    tmp1 = []
    tmp2 = []
    for col in range (SIDE+1):  # столбец
        rnd = random.randint(0, len(COLORSCHEMES)-1)
        tmp1.append(rnd)
        tmp2.append(False)
    PLAYGROUND.append(tmp1)
    ZONE.append(tmp2)
    THISCOLOR = PLAYGROUND[0][0]  # выбранный цвет, в начале в квадрате с координатами 0,0
    ZONE[0][0] = True

def do_draw(self, cr):
    global CAIRO_OBJ
    for row in range (SIDE):
        for col in range (SIDE):
            cr.set_source_rgb(*COLORSCHEMES[PLAYGROUND[row][col]])
            cr.rectangle(col * SIZE + 1, row * SIZE + 1, SIZE, SIZE)
            cr.fill()

def play_game():
    for n in range (4):
        for row in range (SIDE):
            for col in range (SIDE):
                if (ZONE[row][col]):
                    if (PLAYGROUND[row][col+1] == THISCOLOR):
                        ZONE[row][col+1] = True
                    if (PLAYGROUND[row+1][col] == THISCOLOR):
                        ZONE[row+1][col] = True
        for row in range (SIDE, 0, -1):
            for col in range (SIDE, 0, -1):
                if (ZONE[row][col]):
                    if (PLAYGROUND[row][col-1] == THISCOLOR):
                        ZONE[row][col-1] = True
                    if (PLAYGROUND[row-1][col] == THISCOLOR):
                        ZONE[row-1][col] = True
        for row in range (0, SIDE):
            for col in range (0, SIDE):
                if (ZONE[row][col]):
                    PLAYGROUND[row][col] = THISCOLOR
    colordr.queue_draw()
    k = True
    for row in range (SIDE):
        for col in range (SIDE):
            k = k and ZONE[row][col]
    if (k):
        if (len(win.get_title())>0):
            win.set_title("Хороший результат")
        else:
            win.set_title("Средний результат")

class Handler:
    def on_destroy(self, *args):
        Gtk.main_quit()
    def on_click(self, *args):
        global THISCOLOR, CAIRO_OBJ
        coord = win.get_pointer()
        col = (coord[0]-2)//SIZE
        row = (coord[1]-2)//SIZE
        if (row<SIDE and col<SIDE):
            if (THISCOLOR != PLAYGROUND[row][col]):
                THISCOLOR = PLAYGROUND[row][col]
                #print(win.get_title())
                win.set_title("* " * (len(win.get_title())//2-1))
                play_game()

builder = Gtk.Builder()
builder.add_from_file(XML_FILE)
builder.connect_signals(Handler())
win = builder.get_object("window")
colordr = builder.get_object("colorDraw")
colordr.connect('draw', do_draw)
play_game()
win.show_all()
Gtk.main()

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

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

Во время игры, количество ходов подсчитывается в строке заголовка программы.