Найти - Пользователи
Полная версия: Помогите в доработке игры
Начало » Python для новичков » Помогите в доработке игры
1
GameStar
Всем привет. В том году я уже обращался сюда за помощью в создании дизайна для своего первого проекта. Поставив и разобравшись с PyQt5, я сделал небольшой интерфейс для своей игры “Угадай число”. Сейчас вопрос в следущем: код самой игры давно готов, дизайн - успешно импортирован, но как доработать логику так, чтобы после ввода пользователем желаемого значения и нажатия кнопки ОК, выполнялись все последущие действия: сравнение больше-меньше и последущий его текстовый вывод в спец.поле и в конце - в том же поле и случайно сгенерированный ответ-результат (random.choice)?

Подробнее об используемых виджетах:
MainWindow - главное окно программы с его иконкой Icon.ico
QLineEdit (TextLine) - небольшое поле для ввода предполагаемых пользователем вариантов
QTextBrowser (Pole) - поле для вывода результатов сравнения значений и конечного ответа-результата
QPushButton (btn_OK) - кнопка ОК, и так понятно))
QLabel - надпись в главном окне “Введите число от 1 до 100:”

Вот так - это выглядит на деле:


А вот - сам код игры:
 answers = ["Верно", "Правильно", "Молодец!"] #Ответы. В будущем будут изменены
import random
import sys
from PyQt5 import QtWidgets
import design
class ExampleApp (QtWidgets.QMainWindow, design.Ui_MainWindow):
    def __init__ (self):
        super().__init__()
        self.setupUi (self)
def main():
    app = QtWidgets.QApplication (sys.argv)
    window = ExampleApp()
    window.show()
    app.exec_()
if __name__ == '__main__':
    main()
num = random.randint (1, 100)
while True: #Создание цикла самой игры
    print ('Введите число от 1 до 100')
    guess = input()
    i = int (guess)
    if i == num:
        print (random.choice (answers)) #Вывод случайно выбранного ответа
        break
    elif i < num:
        print ('Загаданное число больше')
    elif i > num:
        print ('Загаданное число меньше')
text_field = QtWidgets.TextLine
btn = QtWidgets.btn_OK
text_out = QWidgets.Pole

Помогите пожалуйста, уже хз сколько мучаюсь с ней, и никак не могу доделать…((
Rafik
Логично было бы сделать обработку введенного значения (больше-меньше) как функцию и впихнуть в класс. Привязать эту функцию к кнопке ОК (вызов функции при нажатии кнопки). Функция должна взять введенное значение из TextLine и сравнивать полученное число. Было бы замечательно, если сделать вывод в Pole что-то типа “Ваше число”, далее значение и “Загаданное число …”. Вывод в Pole делается как изменение значения этого виджета. Вывод в Pole вставить вместо имеющегося print в Вашем коде.
К сожалению, с qt не работал и более конкретный совет дать не могу. Рекомендую посмотреть доки на предмет привязки команд к кнопкам, на получение значений из QLineEdit и обновление значений в QTextBrowser.
uf4JaiD5
https://pythonspot.com/pyqt5-textbox-example/
GameStar
Rafik
Логично было бы сделать обработку введенного значения (больше-меньше) как функцию и впихнуть в класс.
это нужно сделать спомощью def, я правильно понимаю?
PEHDOM
GameStar
это нужно сделать спомощью def, я правильно понимаю?
в классе:
 Class....
    def __init__ (self):
        ....
        self.btn_OK.clicked.connect(self.ok_press)
        ....
    def ok_press(self):
        guess =  TextLine.text()
        #ну и дальше почти тоже самое только вместо print(any_text) использовать Pole.append(any_text)
ps я бы заменил QLineEdit на QSpinBox, тогда не нужно будет заморачиваться с проверкой на вхождение числа в диапазон, его целочисленность, и вообще проверкой а число ли это. Это будет делать сам спинбокс(если его настроить).
rami
GameStar
это нужно сделать с помощью def, я правильно понимаю?
Правильно, нужно сделать функцию и назначить её кнопке.

Замечания к коду:
1. если вы создаёте интерфейс в Дизайнере, то не нужно его конвертировать, лучше использовать в формате .ui, в этом случае его можно изменять в Дизайнере (а изменять его прийдётся много раз).
2. нужно добавить ещё кнопку “Новая игра” и возможно кнопку “Закрыть”.
3. для кнопки “OK” создать функцию def game(self): эта функция будет читать введённое значение и сравнивать, а так же очищать поле ввода.
4. для кнопки “Новая игра” создать функцию def new_game(self): эта функция будет генерировать случайное число и очищать поля ввода и вывода.

Если хотите могу выложить свой вариант.
GameStar
rami
1. если вы создаёте интерфейс в Дизайнере, то не нужно его конвертировать, лучше использовать в формате .ui, в этом случае его можно изменять в Дизайнере (а изменять его прийдётся много раз).
да, это я уже понял…))
rami
2. нужно добавить ещё кнопку “Новая игра” и возможно кнопку “Закрыть”.
хммм… даже не знаю, нужно ли это в таком маленьком проекте…
rami
Если хотите могу выложить свой вариант.
да, будет здорово. Заранее благодарен)

GameStar
Попробую еще приложить дизайн:
rami
В архиве папка с файлами, файлы должны лежать в одной папке.
GameStar
rami
спасибо огромное за помощь! сам бы я так не смог, конечно…). Теперь меня интересует только одно: как его скомпилировать из py в exe, чтобы можно было делиться с друзьями, например? у меня есть pyinstaller, я пишу в командной строке pyinstaller –onefile –noconsole (эти параметры я указываю в начале, сразу после слова “pyinstaller”, либо -F -w в конце и потом директорию и имя файла с расширением. Он компилирует, получается несколько папок, в папке dist лежит этот готовый файл, но после запуска ничего не происходит: комп долго думает, что-то как будто грузит и хоть бы что. Либо, если еще немного подождать - то выйдет ошибка что-то вроде “Failed to execu…” (не помню дальше текст). Как вообще компилить в exe, и желательно чтобы у файла была такая же иконка, как у окна?
И можно ли как-то сделать, чтобы размер файла был не очень большой? я до этого скомпилировал, и он получился не рабочий = 92 мб. А если рабочий? - за 100 мб перевалит?)) не многовато ли для такой простенькой игры?) нет, я конечно знаю, что PyQt5-проекты много весят, но не так же… О_о
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