Member 13758790 Ответов: 3

Что я сделал не так в своем коде (пакетном)...


@echo off
title ultimate_quiz

:start
cls
echo welcome to
echo the ultimate quiz
echo type s to start
echo type e to exit
set /p set=
if %set% == s goto game
if %set% == e exit

:game 
cls
echo test


я хочу, чтобы при нажатии он начинает игру, но она закрывает его помогите пожалуйста!
делаем это в блокноте++

Что я уже пробовал:

я проверил, сохраняю ли я проект, который я сохраняю, и он ничего не сделал...

3 Ответов

Рейтинг:
2

OriginalGriff

Он доходит до конца пакетного файла, и это означает, что он закрывается. Ему больше нечего делать!
Чтобы заставить его "играть в игру", вам нужно будет установить цикл какой-то формы: вы можете использовать goto, чтобы вернуться к ярлыку "игра", но вам нужно что-то, чтобы позволить вам выйти.

Честно говоря, пакетный файл-это не самая лучшая вещь для написания игры, даже простой! Даже сценарий PowerShell[^] было бы лучшей идеей, но переход на C# был бы гораздо лучшим решением - вы получите гораздо более гибкий код (при коде более крутой кривой обучения, но гораздо более простой код для модификации).


Рейтинг:
2

Dave Kreskowiak

Конечно, она закрывается. Вы дважды щелкаете по пакетному файлу, чтобы запустить его. Когда пакетный файл завершен, окно CMD, которое он использует, автоматически закрывается.

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

Start -> Run -> CMD


Рейтинг:
1

Patrice T

Прежде всего, удалите

@echo off

чтобы увидеть сообщения об ошибках.
Цитата:
я хочу, что если я нажмите клавишу S, начинается игра

Какую магию вы используете для чтения с клавиатуры ?
Какую магию вы используете, чтобы попасть в игру, которой нет в этом коде?
if %set% == s goto game

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


Dave Kreskowiak

@ECHO OFF отключает только отображение команд, выполняемых пакетным файлом. Он все равно увидит любые ошибки, которые эти команды бросают.

    set /p set=

на самом деле это работает для ввода с клавиатуры. Параметр /P(rompt) сидит и ждет ввода с клавиатуры для установки указанной переменной, в данном случае "set". Однако это не самый лучший выбор имени переменной.

Patrice T

"@ECHO OFF только отключает отображение команд"
да, но это также мешает вам видеть, какая команда затирает сообщение об ошибке.
Должен признаться, что я уже много лет не делал интерактивной партии :)