В настоящее время тестирую на знакомых (в том числе и очень далёких от темы текстовых игр) всякое разное, написанное на QSP. Чаще всего люди готовы лишь скачать-запустить-посмотреть, а технические подробности (как скачать плеер, как его запустить и как из него открыть игру) им не особо интересны. Поэтому я в архив с тестируемым модулем (игрой это пока язык не поворачивается назвать) вкладываю и плеер, и запускной файл — чтобы всё запускалось по одному щелчку. Сперва это был bat-файл, но поскольку он открывает консольное окно, которое висит, пока не закроешь QSP, я перешёл на VBS-скрипт (я в нём не особо силён, но уж что есть).
set FS=CreateObject("Scripting.FileSystemObject") set FOLDER=FS.GetFolder(FS.GetAbsolutePathName(".")) for each FILE in FOLDER.Files if lcase(mid(FILE.Name,len(FILE.Name)-3))=".qsp" then if instr(1,lcase(FILE.Name),"_lib_")=0 then set FTR=CreateObject("WScript.Shell") RC=FTR.Run("qsp\qspgui.exe " & FILE.Name,1,false) exit for end if end if next
Подразумевается, что в каталоге с игрой в корне лежит qsp-файл игры, а в подкаталоге "qsp" лежат файлы и подкаталоги QSP-плеера. Дополнительно добавлен фильтр, отбрасывающий дополнительные qsp-файлы, содержащие в имени "_lib_" (у меня внешние библиотеки в такие файлы вынесены).
Если у кого есть свои идеи по этому вопросу — буду рад услышать.
Неактивен
Nex написал:
Зачем перебирать все файлы, если имя нужного .qsp-файла известно заранее?
Чтобы не заморачиваться с редактированием ещё и vbs-файла. Так кинул в папку — и всё.
Неактивен
Серый Волк написал:
Дык можно ж сделать одним ехе-файлом. Например, игра с КРИЛ-2008 "Конец". Инструкцию, как так делается, могу вечерком выложить, сейчас под рукой нету.
Отлично! Было бы интересно взглянуть.
Неактивен
Серый Волк написал:
Можно ли как то создать ехе файл чтоб играть без плеера?
Пошаговая инструкция (необходим установленный WinRAR, желательно 3.70 или выше)…
Ну этот метод мне известен. И мне почему-то хочется пристрелить каждого, кто его применяет.
Неактивен
Eten написал:
Olegus t.Gl. написал:
Серый Волк написал:
Пошаговая инструкция (необходим установленный WinRAR, желательно 3.70 или выше)…
Ну этот метод мне известен. И мне почему-то хочется пристрелить каждого, кто его применяет.
А каковы причины такого, столь, опрометчивого желания?
Минусы именно этой конкретной реализации: программа распаковывается во временную папку, которая потом сама собой очищается. При этом нельзя рассчитывать на то, что между запусками сохранятся некоторые вещи, например, сохранёнки, записанные по относительному пути (SAVEGAME 'save.001').
Неактивен
Немного доработал vbs-скрипт запуска игры. Теперь есть возможность запускать игру в полноэкранном режиме. Не развёрнутом, а именно полноэкранном — чтобы даже системное меню не было видно.
Да, и вынес настройки в начало файла.
'-------------------------------------------------------------------------------- ' FullScreen ' Нужно ли после запуска разворачивать игру на полный экран. ' При этом панель с системным меню плеера ("Квест", "Игра", "Установки", "Помощь") ' тоже пропадает. '---------- ' LibFile ' Цепочка символов, характерная для подключаемых qsp-библиотек. ' Если файл содержит данную цепочку, то он игнорируется '---------- ' Player ' Директория и имя файла с QSP-плеером относительно корневой директории игры '---------- prmFullScreen = true prmLibFile = "_lib_" prmPlayer = "qsp\qspgui.exe" '-------------------------------------------------------------------------------- ' Создаём объект для работы с файлами set FS=CreateObject("Scripting.FileSystemObject") ' Получаем текущую директорию set FOLDER=FS.GetFolder(FS.GetAbsolutePathName(".")) ' Перебираем файлы в текущей директории for each FILE in FOLDER.Files ' Если очередной файл имеет расширение ".qsp" - он нам подходит if lcase(mid(FILE.Name,len(FILE.Name)-3))=".qsp" then ' Если файл не содержит цепочки символов, характерных для qsp-библиотеки, ' то он подходит нам ешё больше if instr(1,lcase(FILE.Name),prmLibFile)=0 then set FTR=CreateObject("WScript.Shell") ' Запускаем QSP-плеер с найденным qsp-файлом set GAME=FTR.Exec(prmPlayer&" "&FILE.Name) ' Если включён режим запуска в полноэкранном режиме, то пытаемся ' послать окну с игрой комбинацию клавиш Alt+Enter if prmFullScreen then ' Но сперва подождём, пока окно не станет активным do loop while not FTR.AppActivate(GAME.ProcessID) ' А вот теперь посылаем комбинацию клавиш Alt+Enter FTR.SendKeys "%~" end if exit for end if end if next '--------------------------------------------------------------------------------
Проверено на Windows 7 (x64) и Windows XP (x32).
Немного смущает, что в документации сказано, что для посылки окну комбинации Alt+Enter нужно выполнить команду SendKeys "{%}{~}", т.е. символы % и ~ должны быть экранированы, но это не работает.
Неактивен