Найти - Пользователи
Полная версия: Buttons
Начало » GUI » Buttons
1 2
Ilya
Да самые что ни есть банальнейшие крестики-нолики с вопросами. Нажимаешь на одну из 9 кнопок- ответил правильно-твоя ячейка, ставится твой крест, ход переходит второму; ответил неправильно- ставится нолик второго игрока и ход все равно переходит к нему.
4kpt_II
Тогда банально не верна архитектура.
Поясняйте. Что значит: “перейдет ко второму?”. Т.е. если следующий ответ будет правильным - то ставиться уже нолик (или наоборот)? Как вопросы связаны с кнопками? Как Вы их храните? Или они вызываются просто последовательно? Когда пользователь нажал на вопрос, ответил неверно. Ход перешел ко второму. Он должен тоже нажимать? Или отвечать на тот же вопрос?

Опишите нормально события в Вашей системе.
Ilya
Игроков двое. Пусть первый игрок- крестик, второй- нолик. Первый игрок нажимает на кнопку, появляется вопрос, игрок отвечает, производится проверка: если ответ верен, то ставится крестик, ходит второй игрок; если первый ответил неверно, то ставится нолик, и дальше все равно ходит второй игрок, который выбирает уже другую ячейку.
По поводу вопросов, я собираюсь связать кнопки с девятью темами, вопросы будут связаны с функцией question(думал попробовать в отдельном файле, через массивы, наверное)
4kpt_II
Вот теперь стало понятнее. Ваша примерная архитектура:

user = {"active": "X", "passive": "O"}
#
def get_questions(theme):
    # здесь организуете получение вопроса в зависимости от темы и возвращаете вопрос, возможные   
    # ответы и позицию правильного ответа
    return question, ansvers, position
#
def create_question_panel(question, ansvers):
    # здесь Вы строите toplevel с вопросом и возможными ответами и возвращаете ответ, который выбран
    return ansver
#
def analysis_bind(event):
    # основной обработчик событий
    global user
    if event.widget["state"] == "normal":  # проверяем, можно ли использовать вопрос
        theme = event.widget["text"]
        question, ansvers, position = get_questions(theme)
        user_ansver = create_questions_panel(questions, ansvers)
        if ansvers.index(user_ansver) == position:  # анализ верности ответа
            event.widget["text"] = user["active"]
        else:
            event.widget["text"] = user["passive"]
        event.widget["state"] = "disabled"  # отключаем вопрос, чтобы нельзя было больше нажать
        user["passive"], user["active"] = user["active"], user["passive"]  # меняем пользователей местами
#
# здесь Вы создаете все кнопки и привязываете к ним событие analysis_bind и запускаете .mainloop()

Как-то так.

Забыл сказать. analysis_bind будет работать в том случае, если указаны темы на кнопках. Чтобы устранить эту проблему можно заранее связать темы с кнопками. Так как кнопка - это всего лишь класс, то можно без проблем добавить к нему свой атрибут. Делается это так:

but = Tkinter.Button(root, text="")
but.theme = "first theme"
# если темы собраны в списке, то
but.theme.pop(0)

Тогда, чтобы получить в analysis_bind тему нажатой кнопки, нужно:

theme = event.widget.theme

P.S. Будут вопросы - пишите…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB