Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Ноя. 20, 2016 00:48:46

WhattaSkill
Зарегистрирован: 2016-11-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра с использованием tkinter

Здравствуйте уважаемые форумчане! В данный момент я пишу игру она в свою очередь являться текстовой РПГ. Впринципе я имею бета версию но она работает через консоль и в данный момент я пытаюсь перенести на интерфейс. Решил использовать tkinter так как он показался мне наиболее простым. Сама суть вопроса: Каким образом мне реализовать переход от одной сцены к другой? Сама игра имеет переменные path Поэтому цифры которые я ввожу правильно определяют действия. Но как сделать к примеру распределение? Можно ли строку сделать просто как в консоли чтобы через инпут ввод был.

Офлайн

#2 Ноя. 20, 2016 01:02:51

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  48  -
Профиль   Отправить e-mail  

Игра с использованием tkinter

Сумбурно. Ответить на вопрос невозможно.
Постройте серию вопросов.
Например.
1. Как принять данные от пользователя. Это будет цифры или строки.
2. ….

Офлайн

#3 Ноя. 20, 2016 01:30:49

WhattaSkill
Зарегистрирован: 2016-11-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра с использованием tkinter

4kpt_IV
Сумбурно. Ответить на вопрос невозможно.Постройте серию вопросов.Например.1. Как принять данные от пользователя. Это будет цифры или строки.2. ….

У меня как реализовано. В одном окне выдаётся текст с возможными действиями которые можно выбрать.
Ниже однострочное текстовое поле. Я бинжу клавиши на определённые функции. Если меняются действия. К примеру переход к другой функции (Сохранение/загрузка) я перебинживаю клавиши под эту функцию. Может можно как то привязать инпут к текстовому полю и менять переменные?

Офлайн

#4 Ноя. 20, 2016 01:40:35

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  48  -
Профиль   Отправить e-mail  

Игра с использованием tkinter

Т.е. Вы переназначаете обработчики событий на одни и те же клавиши? Я правильно понял? От чего зависит какие обработчики нужны?

Теперь к чему Вы хотите привязать поле ввода Entry и менять какие переменные? Причем здесь клавиши?

P.S. Это как раз тот случай, когда лучше не использовать спецтерминологию

Офлайн

#5 Ноя. 20, 2016 02:20:18

WhattaSkill
Зарегистрирован: 2016-11-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра с использованием tkinter


Что то в этом роде
Сверху поле с текстом.
Второе поле это поле с действиями.
Самая нижняя строка это непосредственно выбор.

Отредактировано WhattaSkill (Ноя. 20, 2016 02:22:06)

Офлайн

#6 Ноя. 20, 2016 02:38:34

WhattaSkill
Зарегистрирован: 2016-11-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра с использованием tkinter

Вот так я реализовал движение по локациям

 from tkinter import *
def newprintCSSt(x):
    CSSt.config(state="normal")
    CSSt.delete(1.0,END)
    CSSt.insert(END,x)
    CSSt.config(state="disabled")
    ent.delete(0,END)
def newprinttex(x):
    tex.config(state="normal")
    tex.delete(1.0,END)
    tex.insert(END,x)
    tex.config(state="disabled")
    ent.delete(0,END)
def output(event):
    global path
    s = ent.get()    
    if s == "1" and path==0:
        path=1
        newprinttex("Вы пошли")
        newprintCSSt("1)Идти дальше\n2)Вернуться назад")  
    elif s == "2" and path==0:
        newprinttex("Вы остались")
        newprintCSSt("1)Идти дальше\n2)Стоять дальше")
    elif s=="1" and path==1:
        path=2
        newprinttex("Вы ушли слишком далеко")
        newprintCSSt("1)Умереть")
    elif s=="2" and path==1:
        path=0
        newprinttex("Вы остались")
        newprintCSSt("1)Идти дальше\n2)Стоять дальше")
    elif s=="1" and path==2:
        newprinttex("Вы умерли")
        exit(0)
    else:      
        newprinttex("Выберите нормальное действие")
root = Tk()
root.minsize(width=800,height=600)
root.maxsize(width=800,height=600)
ent = Entry(root,width=1)
but = Button(root,text="Enter")
tex = Text(root,width=20,height=3,font="12",wrap=WORD)
CSSt = Text(root,width=20,height=3,font="12",wrap=WORD)
ent.place(x=10,y=560,width=700,height=25)
CSSt.place(x=10,y=260,width=780,height=240)
but.place(x=730,y=560)
tex.place(x=10,y=10,width=780,height=240)
 
but.bind("<Button-1>",output)
ent.bind("<Return>",output)
path=0    
newprinttex("Вы в лагере")
newprintCSSt("1)Пойти\n2)Стоять")
root.mainloop()
Однако проблема в том что кнопка привязана к функции. А сохранение, загрузка, инвентарь у меня другие функции и в них отсутствует вторая координата. Так как построено всё на цепочке if. Просто если есть какое другое предложение по реализации. Может другой модуль или ещё что. Только я очень слаб в ООП.

Отредактировано WhattaSkill (Ноя. 20, 2016 03:04:31)

Офлайн

#7 Ноя. 20, 2016 18:45:14

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  48  -
Профиль   Отправить e-mail  

Игра с использованием tkinter

Приношу свои извинения, но я вообще Вас не пойму.

4kpt_IV
От чего зависит какие обработчики нужны?

Теперь к чему Вы хотите привязать поле ввода Entry и менять какие переменные? Причем здесь клавиши?

Вы можете внятно ответить на вопросы???

Офлайн

#8 Ноя. 21, 2016 01:58:08

WhattaSkill
Зарегистрирован: 2016-11-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра с использованием tkinter

4kpt_IV
Приношу свои извинения, но я вообще Вас не пойму.
Да конечно могу. Entry Я хотел бы сделать как поле запроса. К примеру у меня есть поддействия в действиях (Открыть меню- открыть инвентарь - надеть\снять вещь - выбор вещи) Реализовано у меня всё это было стопкой из if где постояно заново запрашивалась новая переменная для выбора действия. А сейчас делая кнопку/поле я могу привязать её лишь к функции, а не непосредственно производить запрос через инпут.

Офлайн

#9 Ноя. 22, 2016 05:31:25

WhattaSkill
Зарегистрирован: 2016-11-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра с использованием tkinter

4kpt_IV
Приношу свои извинения, но я вообще Вас не пойму.
Здравствуйте! Я вроде как почти придумал каким образом мне сделать возможность вывод переменных. Я просто все инпуты назвал одной переменной и создал функцию которая её меняет вот только одно но мне не удаётся делать запросы перед действиями тоеть он просто прогоняет все по 1 действию не запрашивая второй раз как можно заставить при каждой смене сцен спрашивать его заново ввод данных?
 from tkinter import *
import time
path=0
def CSSc(ev):
    global CSS, stop
    CSS=ent.get()
    stop=1
def newprintCSSt(x): #Редактирование текста в окне выбора
    global stop
    stop=0
    CSSt.config(state="normal")
    CSSt.delete(1.0,END)
    CSSt.insert(END,x)
    CSSt.config(state="disabled")
    ent.delete(0,END)
def newprinttex(x): #Редактирование текста в окне информации
    global stop
    stop=0
    tex.config(state="normal")
    tex.delete(1.0,END)
    tex.insert(END,x)
    tex.config(state="disabled")
    ent.delete(0,END)
    
root = Tk()
root.minsize(width=800,height=600)
root.maxsize(width=800,height=600)
ent = Entry(root,width=1)
but = Button(root,text="Enter")
tex = Text(root,width=20,height=3,font="12",wrap=WORD)
CSSt = Text(root,width=20,height=3,font="12",wrap=WORD)
ent.place(x=10,y=560,width=700,height=25)
CSSt.place(x=10,y=260,width=780,height=240)
but.place(x=730,y=560)
tex.place(x=10,y=10,width=780,height=240)
 
but.bind("<Button-1>",CSSc)
ent.bind("<Return>",CSSc)
while True:
    if path==0:
        path=0    
        newprinttex("Вы в лагере")
        newprintCSSt("1)Пойти\n2)Стоять")
        while stop==0: #Вот здесь вот попытался сделать паузу но так нельзя
            time.sleep(10)
            continue
        if CSS=="1":
            path=1
            continue
        elif CSS=="2":
            newprinttex("Вы остались")
            newprintCSSt("1)Идти дальше\n2)Стоять дальше")
        else:      
            newprinttex("Выберите нормальное действие")
    elif path==1:
        newprinttex("Вы пошли")
        newprintCSSt("1)Идти дальше\n2)Вернуться назад")
        if CSS=="1":
            path=2
        elif CSS=="2":
            path=0
        else:      
            newprinttex("Выберите нормальное действие")
    elif path==2:
        newprinttex("Вы умерли")
        exit(0)
    
root.mainloop()

Отредактировано WhattaSkill (Ноя. 22, 2016 05:32:27)

Офлайн

#10 Ноя. 27, 2016 22:41:59

WhattaSkill
Зарегистрирован: 2016-11-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра с использованием tkinter

Всем спасибо! Разобрался решил просто сделать одну большую функцию с координатами на действия.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version