python

Текствый квест или сказание о том, как я не ходил в универ

  • вторник, 16 августа 2022 г. в 00:46:16
https://habr.com/ru/post/682624/
  • Python
  • Разработка игр
  • SQLite


О себе...

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

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

Результат:

Заключение

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

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

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

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

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

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