|
0 / 0 / 0
Регистрация: 07.07.2019
Сообщений: 8
|
|
Как подключить клавиатуру в игре "Виселица" Python?17.12.2022, 01:46. Показов 994. Ответов 0
Метки нет (Все метки)
Здравствуйте, написал код для игры Виселица на Python в PyCharmCE и столкнулся с такой проблемой. Нужно выбирать существующие буквы как мышкой(создал специальный интерфейс для этого), так и с клавиатуры. Графический дизайн оформлял через Tkinter. Слова берутся из текстового документа. Ниже приведу код основной программы.
from tkinter import * import random root = Tk() root.title("Виселица") canvas = Canvas(root, width=1200, height=600) canvas.pack() gridCanvas = Canvas(root, width=1200, height=100) gridCanvas.pack(side=BOTTOM, fill=NONE) def but(): y = 0 while y < 600: x = 0 while x < 1200: canvas.create_rectangle(x, y, x+33, y+27, fill="white", outline="blue") x = x+33 y = y+27 faq = '''Привет, игрок! Давай поиграем! Принцип игры: Компьютер загадывает слово — пишет на бумаге первую и последнюю букву слова и отмечает места для осталь- ных букв. Также рисуется виселица. Загаданное компьютером слово является именем сущест- вительным, нарицательным в именительном падеже един- ственного числа, либо множественного числа при отсу- тствии у слова формы единственного числа. Игрок пред- лагает букву, которая может входить в это слово. Если такая буква есть в слове, то компьютер пишет её над соответствующими этой букве чертами — столько раз, сколько она встречается в слове. Если такой буквы нет, то к виселице добавляется круг в петле, изображающий голову. Игрок продолжает отгадывать буквы до тех пор, пока не отгадает всё слово. За каждый неправильный от- вет компьютер добавляет одну часть туловища к виселице (их 6: голова, туловище, 2 руки и 2 ноги). Если тулови- ще в виселице нарисовано полностью, то игрок проигрыва- ет, считается повешенным. Если игроку удаётся угадать слово, он выигрывает.''' canvas.create_text(600, 300, text=faq, fill="white", font=("Helvetica", "16")) slova = list() try: print("Opening file ...") f = open('slova.txt', 'r') except: print("File not found!") for line in f: slova.append(line.strip("\n\r\t")) def letterCoordinates(letterNumber): x1, y1 = 282 + (32 * letterNumber), 40 return x1, y1 def arr(): but() word = random.choice(slova) wo = word[1:-1] wor = [] for i in wo: wor.append(i) length = len(word) first_letter_x = 282 letter_x = first_letter_x canvas.create_text(first_letter_x, 40, text=word[0], fill="purple", font=("Helvetica", "18")) for i in range(length - 2): letter_x = letter_x + 32 canvas.create_text(letter_x, 40, text="_", fill="purple", font=("Helvetica", "18")) canvas.create_text(letter_x + 32, 40, text=word[-1], fill="purple", font=("Helvetica", "18")) alphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" er = [] win = [] def chooseLetter(letter): if letter in wor: letterButtons[letter]["state"] = "disabled" for j in range(len(wor)): if wor[j] == letter: letter_x, letter_y = letterCoordinates(j + 1) canvas.create_text(letter_x, letter_y, text=letter, fill="purple", font=("Helvetica", "18")) win.append(letter) if len(win) == length - 2: canvas.create_text(150, 400, text="Ты победил", fill="green", font=("Helvetica", "34")) for i in alphabet: letterButtons[i]["state"] = "disabled" else: er.append(letter) letterButtons[letter]["state"] = "disabled" if len(er) == 1: golova() elif len(er) == 2: telo() elif len(er) == 3: rukaL() elif len(er) == 4: rukaP() elif len(er) == 5: nogaL() elif len(er) == 6: end() nogaP() root.update() letterButtons = {} canvas.create_line(10, 10, 10, 400, width=4, fill='black') canvas.create_line(10, 10, 90, 50, width=4, fill='black') def gen(u, row, column): letterButtons[u] = Button(gridCanvas, text=u, width=3, height=1, command=lambda: chooseLetter(u)) letterButtons[u].grid(row=row, column=column) for i in range(len(alphabet)): gen(alphabet[i], i // 8, i % 8) def golova(): canvas.create_oval(79, 59, 120, 80, width=4, fill='blue') root.update() def telo(): canvas.create_line(100, 80, 100, 200, width=4, fill='blue') root.update() def rukaP(): canvas.create_line(100, 80, 145, 100, width=4, fill='blue') root.update() def rukaL(): canvas.create_line(100, 80, 45, 100, width=4, fill='blue') root.update() def nogaL(): canvas.create_line(100, 200, 45, 300, width=4, fill='blue') root.update() def nogaP(): canvas.create_line(100, 200, 145, 300, width=4, fill='blue') root.update() def end(): canvas.create_text(150, 400, text="Ты проиграл", fill="red", font=("Helvetica", "34")) for i in alphabet: letterButtons[i]["state"] = "disabled" btn01 = Button(root, text="Начать!", width=10, height=1, command=lambda: arr()) btn01.pack(side=BOTTOM, fill=None) root.mainloop()
0
|
|
| 17.12.2022, 01:46 | |
|
Ответы с готовыми решениями:
0
Программа к игре Виселица.Срочно... как подключить клавиатуру усб к ноутбуку |
| 17.12.2022, 01:46 | |
|
Помогаю со студенческими работами здесь
1
Как подключить клавиатуру к полю реквизита? Подключить пульт как матричную клавиатуру к контроллеру Как подключить MIDI клавиатуру ActionScript & Java Как подключить клавиатуру и мышь для второго монитора? Как создать inline клавиатуру для бота в ВК на python? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|