Читать «Программирование на Python. Том 1» онлайн - страница 646

Марк Лутц

Пример 11.13. PP4E\Gui\Cloek\eloekStyles.py

#    предопределенные стили часов

from clock import *

from tkinter import mainloop

gifdir = ‘../gifs/’ if __name__ == ‘__main__’: from sys import argv if len(argv) > 1:

gifdir = argv[1] + ‘/’

class PPClockBig(PhotoClockConfig):

picture, bg, fg = gifdir + ‘ora-pp.gif’, ‘navy’, ‘green’

class PPClockSmall(ClockConfig): size = 175

picture = gifdir + ‘ora-pp.gif’

bg, fg, hh, mh = ‘white’, ‘red’, ‘blue’, ‘orange’

class GilliganClock(ClockConfig): size = 550

picture = gifdir + ‘gilligan.gif’

bg, fg, hh, mh = ‘black’, ‘white’, ‘green’, ‘yellow’

class LP4EClock(GilliganClock): size = 700

picture = gifdir + ‘ora-lp4e.gif’ bg = ‘navy’

class LP4EClockSmall(LP4EClock): size, fg = 350, ‘orange’

class Pyref4EClock(ClockConfig):

size, picture = 400, gifdir + ‘ora-pyref4e.gif’ bg, fg, hh = ‘black’, ‘gold’, ‘brown’

class GreyClock(ClockConfig):

bg, fg, hh, mh, sh = ‘grey’, ‘black’, ‘black’, ‘black’, ‘white’ class PinkClock(ClockConfig):

bg, fg, hh, mh, sh = ‘pink’, ‘yellow’, ‘purple’, ‘orange’, ‘yellow’

class PythonPoweredClock(ClockConfig):

bg, size, picture = ‘white’, 175, gifdir + ‘pythonPowered.gif’

if __name__ == ‘__main__’: root = Tk() for configClass in [

ClockConfig,

PPClockBig,

#PPClockSmall,

LP4EClockSmall,

#GilliganClock,

Pyref4EClock,

GreyClock,

PinkClock,

PythonPoweredClock

]:

ClockPopup(configClass, configClass.__name__)

Button(root, text=’Quit Clocks’, command=root.quit).pack() root.mainloop()

При запуске этот сценарий создает множество часов различного вида, как показано на рис. 11.24. Объекты конфигурации поддерживают большое число параметров. Судя по семи парам часов, отображаемых на экране, пришло время перейти к последнему примеру.

PyToe: виджет игры в крестики-нолики

И наконец, в завершение главы немного развлечемся. В нашем последнем примере, PyToe, на языке Python реализована программа игры в крестики-нолики с привлечением искусственного интеллекта. Большинству читателей, вероятно, знакома эта простая игра, поэтому я не стану останавливаться на ее описании. В двух словах: игроки поочередно ставят свои метки в клетках игрового поля, пытаясь занять целиком строку, колонку или диагональ. Победителем является тот, кому удалось сделать это первым.

В PyToe позиции на игровом поле помечаются щелчком мыши, а одним из игроков является программа на языке Python. Само игровое поле реализовано в виде простого графического интерфейса на основе tkinter. По умолчанию PyToe создает игровое поле размером 3 на 3 (стандартный вариант игры), но можно настроиться на игру произвольного размера N на N.

Когда приходит очередь компьютера сделать ход, с помощью алгоритмов искусственного интеллекта (ИИ) оцениваются возможные ходы и ведется поиск в дереве этих ходов и возможных ответов на них. Это довольно простая задача для игровых программ, а эвристики, применяемые для выбора ходов, несовершенны. Все же PyToe обычно достаточно сообразителен, чтобы победить на несколько ходов раньше, чем пользователь.