Уведомления

Группа в Telegram: @pythonsu

#1 Май 27, 2014 21:58:15

Ilya
Зарегистрирован: 2014-05-25
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Buttons

Да самые что ни есть банальнейшие крестики-нолики с вопросами. Нажимаешь на одну из 9 кнопок- ответил правильно-твоя ячейка, ставится твой крест, ход переходит второму; ответил неправильно- ставится нолик второго игрока и ход все равно переходит к нему.

Офлайн

#2 Май 27, 2014 22:03:53

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Buttons

Тогда банально не верна архитектура.
Поясняйте. Что значит: “перейдет ко второму?”. Т.е. если следующий ответ будет правильным - то ставиться уже нолик (или наоборот)? Как вопросы связаны с кнопками? Как Вы их храните? Или они вызываются просто последовательно? Когда пользователь нажал на вопрос, ответил неверно. Ход перешел ко второму. Он должен тоже нажимать? Или отвечать на тот же вопрос?

Опишите нормально события в Вашей системе.

Офлайн

#3 Май 27, 2014 22:11:22

Ilya
Зарегистрирован: 2014-05-25
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Buttons

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

Офлайн

#4 Май 27, 2014 22:33:48

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Buttons

Вот теперь стало понятнее. Ваша примерная архитектура:

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. Будут вопросы - пишите…

Отредактировано 4kpt_II (Май 27, 2014 23:22:46)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version