О себе...

Привет, Хабр.

Я студент, учусь по направлению - Информационные системы и технологии. За первый год обучения я получил -> "Почти ничего". Самое крутое, что я приобрел за год пребывания в ВУЗе - это общение с Разными людьми. Каждый имел своё мнение и свои взгляды на вещи. И это был единственный плюс. Когда у нас пошли пары по программированию, которые я очень сильно ждал, мне стало очень Плохо. Увидев то, как преподаватель предсмертного возраста объясняет нам Азы Python3, мне хотелось уйти.

После, как у многих было, я перестал ходить почти на все лекции, потому что уровня знаний python мне хватало, для того чтобы сделать за день все лабораторные работы. И после этого я начал тухнуть на глазах. Отдел, который занимался записью студентов на курсы по ИТ направлению кормил всех завтраками, и я не исключение. Никто ничего не обязан вам в универе. А об выполнение своих рабочих обязанностей все преподаватели забыли напрочь.

Чем же я занимался всё свободное время

Так как на большинство пар я не ходил, я начал искать курсы и гайды в интернете. YouTube крутая штука, но уже много мусора в себе держит. За пару недель я нашел себе занятия:

  • Я начал рисовать, фотографировать эти рисунки и доводить до ума в GIMP!

  • Писал парсеры, программы которые загружали контент с сайта.

  • Сделал минималистичный поисковик для telegra.ph, было прикольно.

  • Написал свою первую и интересную как для меня так и для одногрупника и преподавателя, уже по другому предмету, программу. Есть такая вещь - DB Browser for SQLite. Я написал похожую программу на Python3, Tkinter и SQLite3. Велосипед, но хочется.

  • Писал скрипты для сортировки файлов в директории "Загрузка".

  • Калькуляторы для ВышМата и физики, которые у нас уже во всю шлю плотным графиком( termux помог очень сильно, когда обычный интерпритатор на телефоне не мог скачать нужный модуль)

  • И конечно как же без BackDoor-ов, KeyLogger-ов и скриптов для перезагрузки системы, когда надоедливый сосед начинает играть в FIFA с включенными колонками.

И вот момент истины.

Я начал искать информацию по Текстовым Квестам. Её много, но вся она состоит из обзоров движков или длинных цепей IF - ELIF - ELSE. Я не претендую, я просто захотел и попробовал реализовать за час минималистичный рабочий псевдодвижок для текстового квеста.

Первое, что меня сразу затормозило - это то, как мне связать основные тексты и ответы к которым они привязаны. Я построил схему и попытался из неё что-то увидеть, прям как художник, который ищет свою музу.

Создано при помощи https://app.diagrams.net
Создано при помощи https://app.diagrams.net

Затем я написал это. Реализация переходов между ответами и их содержимым.

# Добавляем в конец id_line значение answer
if answer == "1":
    id_line = id_line + ".1"

elif answer == "2":
    id_line = id_line + ".2"

elif answer == "3":
    id_line = id_line + ".3"

После я подключил модуль SQLite.

import sqlite3

conn = sqlite3.connect("dialogs.db")
cursor = conn.cursor()

TEXT    = cursor.execute(f"SELECT text FROM mainT WHERE id_line = '{id_line}'").fetchone()
ANSWERS = cursor.execute(f"SELECT answers FROM mainT WHERE id_line = '{id_line}'").fetchone()

Конечный вид исходника "Игры":

import sys
import sqlite3

conn = sqlite3.connect("dialogs.db")
cursor = conn.cursor()

id_line = "0"

while True:
	
	TEXT    = cursor.execute(f"SELECT text FROM mainT WHERE id_line = '{id_line}'").fetchone()
	ANSWERS = cursor.execute(f"SELECT answers FROM mainT WHERE id_line = '{id_line}'").fetchone()

	print(*TEXT)
	print(*ANSWERS)

	answer = input("> ")

	if answer == "1":
		id_line = id_line + ".1"

	elif answer == "2":
		id_line = id_line + ".2"

	elif answer == "3":
		id_line = id_line + ".3"

	elif answer == "quit":
		sys.exit()

  # на случай, если введено заначение отличное от 1, 2, 3 или quit.
	else:
		print(f"Такого варианта нет.(Error: {answer})")
		continue

Вид БД:

CREATE TABLE "mainT" (
	"id_line"	TEXT NOT NULL,
	"text"	TEXT NOT NULL,
	"answers"	TEXT NOT NULL
)

Результат:

Заключение

Этот пост написан как стартовый для меня в этом направлении. Выше сказанным я хотел показать, что:

  • Универ не всегда дает то, в чём ты можешь нуждаться.

  • Универ - место для общения и поиска единомышленников.

  • Для меня и многих людей, которые меня окружают, делать всё просто так - это норма. Хочешь делать - делай!

  • Движки для "Текстовых Игр" существуют, их не мало и не так уж и много. Но написание игры без вспомогательных технологий это интереснее и не так уж и сложно. Хоть времена когда ты пишешь функцию для чего-либо с нуля уже прошли, всё равно к этому тянет. Мне кажется люди забывают о трудностях и переходят на легкий уровень жизни.

Спасибо за внимание. Буду очень рад любому совету и наверное напутствию.

Комментарии (14)


  1. baldr
    15.08.2022 17:00
    +1

    Текстовый квест: зайти в комнату, взять ключ. Пойти в другую комнату, открыть дверь ключом. За дверью монстр, его можно убить мечом или заклинанием, которых у вас еще нет.

    Как вы это сделаете просто с базой вопросов-ответов?


    1. snaiper1731
      15.08.2022 17:26

      Наверное логикой, если меч или заклинание то монстр умирает, иначе посылает игрока на поиски таинственного и вовсе не очевидного для него оружия против монстров.


      1. baldr
        15.08.2022 17:39

        Вопрос был не в этом, а как автор предложил бы это сделать с помощью его оригинального подхода с БД.


    1. SadOcean
      15.08.2022 17:51
      +1

      Теоретически можно упороться и сделать полное дерево, оно просто будет очень здоровое.

      А если серьезно - переменные делают.

      Ответ помимо перехода на другой вопрос может устанавливать или модифицировать переменные.
      А при отображении вопроса список ответов может быть отображен не полностью (часть ответов содержат условия показа, и, если у вас нет меча или ключа - они недоступны или не показываются).
      По хорошему еще нужны условные переходы, но в теории и этого достаточно (просто придется писать 2 одинаковых ответа - один если параметр > определенного ведет на один вопрос, второй - на другой, одновременно они не отображаются.


  1. vlvazverev
    15.08.2022 17:26
    +2

    Это не текстовый квест, а просто диалоговая система.


    1. sergey-kuznetsov
      15.08.2022 23:02

      Текствый квест.


  1. aik
    15.08.2022 17:47
    +1

    А у вас что, только питон в программе был? Никаких других предметов, типа математики, физики и т.п. не было? Или вас так сильно подкосил уровень питона, что даже на другие предметы уже сил не хватало?


  1. s_f1
    15.08.2022 19:46
    +7

    Что за вуз такой?

    уровня знаний python мне хватало
    if answer == "1":
    	id_line = id_line + ".1"
    
    elif answer == "2":
    	id_line = id_line + ".2"
    
    elif answer == "3":
    	id_line = id_line + ".3"
    
    Понимаю…


  1. 1Fedor
    15.08.2022 19:49
    +1

    Непонятно, зачем сюда универ приплетать?


  1. shokerplz
    15.08.2022 22:25

    Мне вот часто становится интересно, а чего все ждут от университетов? Какого то программирования высоконагруженных сервисов на первом курсе? Ну уж простите сперва придется азы изучить, понять как вообще строятся алгоритмы, понять как со всем этим связан мат анализ и прочие вещи. А прикладные знания получаются самостоятельно, и я уверен, что это единственный верный способ достичь успеха в разработке (не программировании, а именно разработке).

    Университет может научить учиться, понять какая информация достойна вашего времени, а какая нет. Ну и, конечно же, университет может научить справляться с трудностями, когда у вас 3 экзамена на неделе, а вы еще даже не начали учить философию, которая уже вот вот. Могу вас разочаровать, но скорее всего в ближайшие 2 года точно вы будете изучать такие дисциплины как: физика, теория электроцепей, мат анализ, аналитическая геометрия и тд, а программирование всегда будет где то в стороне, как оно и должно быть.

    Вообщем, сначала придется поворочать мешки, а без этого профессионалом не стать.


    1. HydroZinc Автор
      15.08.2022 22:25

      Автоматы по всем дисциплинам.


      1. shokerplz
        15.08.2022 22:55
        +1

        Это говорит примерно ни о чем, штука в том, что всегда найдется предмет, по которому не поставят автомат и придется поработать, и именно в этот момент вы получите те самые ценные (по моему мнению) знания. Но в любом случае, желаю вам дальнейших успехов в продвижении по учебе.


  1. MedicusAmicus
    15.08.2022 22:37

    .


  1. GospodinKolhoznik
    15.08.2022 22:58

    2 несвязанных полу-статьи в одной. Возможно это сказывается отсутствие университетского образования.

    С критикой системы образования нельзя не согласиться - от образования зависит вся жизнь, а людям вместо образования подсовывают протухшую пустышку. И не надо говорить, что радуйтесь тому что дают бесплатно - оно не бесплатно, всё мы оплачиваем из собственных карманов.

    А квесты здесь действительно не в тему.