Напишем на Python с графической библиотекой tkinter программу (заготовку) шаблон для логических игр c прямоугольным полем. В качестве клеток на поле будем использовать кнопки (класс Button).
Перечислим примеры логических игр на поле в клетку:
- Шашки,
- Шахматы,
- Го,
- Уголки,
- Крестики нолики,
- Линии (Lines98),
- Пазлы - головоломки:
- Пятнашки,
- Что ест уж,
- Чайный сервиз,
- Flip-Flop,
- Memory,
- Сапёр,
- Пег,
- Игры с цифрами:
- 2048
- Судоку
- Number Match
- Трубопровод...
Для создания компьютерных игр в клетку, где в качестве клеток будут использоваться кнопки напишем программу на языке программирования Python с использованием графической библиотеки tkinter.
Импорт библиотек
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
Tk() # главное окно программы
mainloop() # главный цикл программы
Лист. 1.
Конструктор Tk
Рис. 1.
Фкнкция mainloop
В конце программы с графической библиотекой tkinter
Конструктор Button
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
Button() # конструктор кнопки
mainloop() # главный цикл программы
Лист. 2.
Рис. 2.
Метод pack
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
Button().pack()
mainloop() # главный цикл программы
Лист. 3.
Рис. 3.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
Button().pack()
Button().pack()
Button().pack()
mainloop() # главный цикл программы
Лист. 4.
Рис. 4.
Параметры метода pack
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
Button().pack(expand=YES)
Button().pack(expand=YES)
Button().pack(expand=YES)
mainloop() # главный цикл программы
Лист. 5.
Рис. 5.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
Button().pack(expand=YES, fill=BOTH)
Button().pack(expand=YES, fill=BOTH)
Button().pack(expand=YES, fill=BOTH)
mainloop() # главный цикл программы
Лист. 6.
Рис. 6.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
Button().pack(expand=YES, fill=BOTH, side=LEFT)
Button().pack(expand=YES, fill=BOTH, side=LEFT)
Button().pack(expand=YES, fill=BOTH, side=LEFT)
mainloop() # главный цикл программы
Лист. 7.
Рис. 7.
Фреймы
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
Frame().pack(expand=YES, fill=BOTH) # Фрейм
Button().pack(expand=YES, fill=BOTH, side=LEFT)
Button().pack(expand=YES, fill=BOTH, side=LEFT)
Button().pack(expand=YES, fill=BOTH, side=LEFT)
mainloop() # главный цикл программы
Лист. 8.
Рис. 8.
Именованные объекты
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop() # главный цикл программы
Лист. 9.
Рис. 9.
Параметры конструктора Button
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop() # главный цикл программы
Лист. 10.
Рис. 10.
Цикл for
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
for i in range(3):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop() # главный цикл программы
Лист. 11. Устранение избыточности кода с помощью цикла for.
Рис. 11.
Вложенный цикл for
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
for i in range(3):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(3):
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()
Лист. 12.
Рис. 12.
Глобальные переменные
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 5 # столбцы
row = 5 # строки
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop() # главный цикл программы
Лист. 13.
Рис. 13.
Функция, определённая пользователем
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 5 # столбцы
row = 5 # строки
def play(): # функция обработчик нажатия на кнопку
print("Нажал на кнопку")
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
Button(f, command = play).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop() # главный цикл программы
Лист. 14.
=============== RESTART: /home/dior/Документы/Python/button/14.py ==============
Нажал на кнопку
Нажал на кнопку
Рис. 14.
Список объектов
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 5 # столбцы
row = 5 # строки
btn = []
def play(): # функция обработчик нажатия на кнопку
print("Нажал на одну из ", len(btn), " кнопок")
for i in range(row):
f = Frame() # Фрейм
f.pack(expand=YES, fill=BOTH) # Вывод фрейма на экран
for j in range(column):
btn += [Button(f, command = play)]
btn[-1].pack(expand=YES, fill=BOTH, side=LEFT)
mainloop() # главный цикл программы
Лист. 15.
=============== RESTART: /home/dior/Документы/Python/button/15.py ==============
Нажал на одну из 25 кнопок
Нажал на одну из 25 кнопок
Нажал на одну из 25 кнопок
Рис. 15.
Свойство text у графических объектов
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 5 # столбцы
row = 5 # строки
btn = []
def play(): # функция обработчик нажатия на кнопку
print("Нажал на одну из ", len(btn), " кнопок")
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, command=play, text=n)]
btn[-1].pack(expand=YES, fill=BOTH, side=LEFT)
mainloop() # главный цикл программы
Лист. 16.
Рис. 16.
Метод config для графических объектов
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 5 # столбцы
row = 5 # строки
btn = []
def play(): # функция обработчик нажатия на кнопку
print("Нажал на одну из ", len(btn), " кнопок")
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(text=n)
btn[n].config(command=play)
mainloop() # главный цикл программы
Лист. 17.
=============== RESTART: /home/dior/Документы/Python/button/17.py ==============
Нажал на одну из 25 кнопок
Нажал на одну из 25 кнопок
Нажал на одну из 25 кнопок
Рис. 17.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 5 # столбцы
row = 5 # строки
btn = []
def play(n): # функция обработчик нажатия на кнопку
print("Нажал на кнопку ", 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(text=n)
btn[n].config(command=lambda n=n: play(n))
mainloop() # главный цикл программы
Лист. 18.
=============== RESTART: /home/dior/Документы/Python/button/18.py ==============
Нажал на кнопку 0
Нажал на кнопку 24
Нажал на кнопку 12
Нажал на кнопку 20
Нажал на кнопку 4
Нажал на кнопку 7
Рис. 18.
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() # главный цикл программы
Лист. 19.
Рис. 19.