Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2022, 01:46
Ответы с готовыми решениями:

Как сделать код в игре виселица
Нужно написать игру &quot;виселица&quot; или &quot;поле чудес&quot; на VB. Вот я начала писать: Private Sub Start_Click() Dim InpName As String For...

Программа к игре Виселица.Срочно...
Задается 2 массива один из &quot;-&quot;, причем количество &quot;-&quot; равно количству букв заданного слова.А второй массив это количество попыток. Нужно...

как подключить клавиатуру усб к ноутбуку
на компьютере работает идеально при подключении к ноутбуку то работает то нет это видно даже по светодиоду нумлок он гаснет то...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2022, 01:46
Помогаю со студенческими работами здесь

Как подключить клавиатуру к полю реквизита?
Всем привет.. Нужна помощь... Не могу подключить Клавиатуру на Vue.js к PhP проекту. &lt;?php include_once...

Подключить пульт как матричную клавиатуру к контроллеру
Здравствуйте, подскажите пожалуйста есть пульт, в нем стоит микросхема SC6122-001. Даташит на микросхему прикрепил. Собственно, что нужно...

Как подключить MIDI клавиатуру ActionScript & Java
Доброй времени суток. Я в первые работаю с actionscript так что надеюсь на ваш помощь. Я хочу с помощью Java server и ActionScript...

Как подключить клавиатуру и мышь для второго монитора?
Есть ноут samsung p28 и ПК. На обоих Mint 15. Хочу сделать из ноута второй монитор. Сделала сеть и настроила подключение по Xdmx так, как...

Как создать inline клавиатуру для бота в ВК на python?
Помогите, пожалуйста. Если кто знает, как сделать inline keyboard через vk_api longpoll на Python, напишите код.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
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/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru