Представляем версию игры Flip-Flop, написанную на Python с использованием библиотеки Tkinter. За чёрных играет королевский пингвин, за красных - перец с трезубцем.
В этой игре ведут борьбу кнопки с логотипом пингвин, как известно, олицетворяющим OS Linux и кнопки с логотипом OS FreeBSD (красный перец с рожками и с трезубцем). На рис.1 представлены наши герои.
Рис. 1.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 3 # столбцы
row = 3 # строки
btn = []
playground = list('ЧТОЕСТЖУ ') # виртуальное игровое поле
def play(n): # функция обработчик нажатия на кнопку
btn[n].config(text=n)
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
n = i * column + j
btn += [Button(f)]
btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
btn[n].config(width=3, height=2)
btn[n].config(text=playground[n])
btn[n].config(command=lambda n=n: play(n))
mainloop() # главный цикл программы
Лист. 1. Шаблон для игр с игровым полем в клетку.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 8 # столбцы
row = 8 # строки
btn = []
playground = [0, 1]*(row*column//2) # виртуальное игровое поле
def play(n): # функция обработчик нажатия на кнопку
btn[n].config(text=n)
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
n = i * column + j
btn += [Button(f)]
btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
btn[n].config(width=3, height=2)
btn[n].config(text=playground[n])
btn[n].config(command=lambda n=n: play(n))
mainloop() # главный цикл программы
Лист. 1. Создано виртуальное (абстрактное) игровое поле playground.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 8 # столбцы
row = 8 # строки
btn = []
playground = [0, 1]*(row*column//2) # виртуальное игровое поле
color = ['#ddd', '#dfd'] # цвет
shuffle(playground)
def play(n): # функция обработчик нажатия на кнопку
btn[n].config(text=n)
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
n = i * column + j
btn += [Button(f)]
btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
btn[n].config(width=3, height=2)
btn[n].config(bg=color[playground[n]])
btn[n].config(command=lambda n=n: play(n))
mainloop() # главный цикл программы
Лист. 3. Перемешиваем список playground Выбраны цвета для кнопок (клеток).
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 8 # столбцы
row = 8 # строки
btn = []
playground = [0, 1]*(row*column//2) # виртуальное игровое поле
color = ['#ffa', '#dfd'] # цвет
shuffle(playground)
def play(n): # функция обработчик нажатия на кнопку
playground[n] = not(playground[n])
btn[n].config(bg=color[playground[n]])
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
n = i * column + j
btn += [Button(f)]
btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
btn[n].config(width=3, height=2)
btn[n].config(bg=color[playground[n]])
btn[n].config(command=lambda n=n: play(n))
mainloop() # главный цикл программы
Лист. 4. В функции play() инвертируем цвет нажатой игроком кнопки.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 8 # столбцы
row = 8 # строки
btn = []
playground = [0, 1]*(row*column//2) # виртуальное игровое поле
color = ['#ffa', '#dfd'] # цвет
shuffle(playground)
def play(n): # функция обработчик нажатия на кнопку
playground[n] = not(playground[n])
for i in range (n%column, column*row, column):
playground[i] = not(playground[i])
btn[i].config(bg=color[playground[i]])
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
n = i * column + j
btn += [Button(f)]
btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
btn[n].config(width=3, height=2)
btn[n].config(bg=color[playground[n]])
btn[n].config(command=lambda n=n: play(n))
mainloop() # главный цикл программы
Лист. 5. В функции play() иинвертируем цвет каждой клетки в колонке, содержащей нажаткую игроком кнопку.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 8 # столбцы
row = 8 # строки
btn = []
playground = [0, 1]*(row*column//2) # виртуальное игровое поле
color = ['#ffa', '#dfd'] # цвет
shuffle(playground)
def play(n): # функция обработчик нажатия на кнопку
playground[n] = not(playground[n])
for i in range (n%column, column*row, column):
playground[i] = not(playground[i])
btn[i].config(bg=color[playground[i]])
for i in range (n-n%column, n-n%column+column):
playground[i] = not(playground[i])
btn[i].config(bg=color[playground[i]])
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
n = i * column + j
btn += [Button(f)]
btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
btn[n].config(width=3, height=2)
btn[n].config(bg=color[playground[n]])
btn[n].config(command=lambda n=n: play(n))
mainloop() # главный цикл программы
Лист. 6. В функции play() иинвертируем цвет каждой клетки в строке, содержащей нажатую игроком кнопку.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 8 # столбцы
row = 8 # строки
btn = []
playground = [0, 1]*(row*column//2) # виртуальное игровое поле
color = ['#ffa', '#dfd'] # цвет
shuffle(playground)
tk = Tk()
tk.geometry('750x750')
img =[PhotoImage(file='FreeBSD.png'),PhotoImage(file='PenguinLinux.png')]
def play(n): # функция обработчик нажатия на кнопку
playground[n] = not(playground[n])
for i in range (n%column, column*row, column):
playground[i] = not(playground[i])
btn[i].config(bg=color[playground[i]])
for i in range (n-n%column, n-n%column+column):
playground[i] = not(playground[i])
btn[i].config(bg=color[playground[i]])
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
n = i * column + j
btn += [Button(f)]
btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
btn[n].config(width=3, height=2)
btn[n].config(bg=color[playground[n]])
btn[n].config(command=lambda n=n: play(n))
mainloop() # главный цикл программы
Лист. 7.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 8 # столбцы
row = 8 # строки
btn = []
playground = [0, 1]*(row*column//2) # виртуальное игровое поле
color = ['#ffa', '#dfd'] # цвет
shuffle(playground)
tk = Tk()
tk.geometry('880x880')
img =[PhotoImage(file='FreeBSD.png'),PhotoImage(file='PenguinLinux.png')]
def play(n): # функция обработчик нажатия на кнопку
playground[n] = not(playground[n])
for i in range (n%column, column*row, column):
playground[i] = not(playground[i])
btn[i].config(bg=color[playground[i]])
for i in range (n-n%column, n-n%column+column):
playground[i] = not(playground[i])
btn[i].config(bg=color[playground[i]])
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
n = i * column + j
btn += [Button(f)]
btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
btn[n].config(width=3, height=2)
btn[n].config(image=img[playground[n]])
btn[n].config(command=lambda n=n: play(n))
mainloop() # главный цикл программы
Лист. 8.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 8 # столбцы
row = 8 # строки
btn = []
playground = [0, 1]*(row*column//2) # виртуальное игровое поле
shuffle(playground)
tk = Tk()
tk.geometry('880x880')
img =[PhotoImage(file='FreeBSD.png'),PhotoImage(file='PenguinLinux.png')]
def play(n): # функция обработчик нажатия на кнопку
playground[n] = not(playground[n])
for i in range (n%column, column*row, column):
playground[i] = not(playground[i])
btn[i].config(image=img[playground[i]])
for i in range (n-n%column, n-n%column+column):
playground[i] = not(playground[i])
btn[i].config(image=img[playground[i]])
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
n = i * column + j
btn += [Button(f)]
btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
btn[n].config(width=3, height=2)
btn[n].config(image=img[playground[n]])
btn[n].config(command=lambda n=n: play(n))
mainloop() # главный цикл программы
Лист. 9.
# This is my version of the game, known as Flip-Flop.
#
# Created on November 02, 2023.
# Author: Diorditsa A.
#
# LinuxOrFreeBSD.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 # выбрать случайное
column = 5 # столбцы
row = 3 # строки
btn = []
playground = [1]*row*column # виртуальное игровое поле
tk = Tk()
tk.geometry('880x880')
img =[PhotoImage(file='FreeBSD.png'),PhotoImage(file='PenguinLinux.png')]
def play(n): # функция обработчик нажатия на кнопку
playground[n] = not(playground[n])
for i in range (n%column, column*row, column):
playground[i] = not(playground[i])
btn[i].config(image=img[playground[i]])
for i in range (n-n%column, n-n%column+column):
playground[i] = not(playground[i])
btn[i].config(image=img[playground[i]])
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
n = i * column + j
btn += [Button(f)]
btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
btn[n].config(width=3, height=2)
btn[n].config(image=img[playground[n]])
btn[n].config(command=lambda n=n: play(n))
for i in range(1000): # перемешать пазл
play(choice(range(row*column)))
mainloop() # главный цикл программы
Лист. 10.
Рис. 2.