2016-04-21 3 views
1

Так недавно я начал изучать Batch-файл, и сегодня я решил попробовать с ним сделать игру. У меня есть несколько ошибок, и я не могу понять, что не так с кодом. Heres код:Confusion with Batch-file code

@echo off 
title Batch Rpg 
color 07 

echo Welcome to Batch Rpg! 
echo. 
echo. 
pause 

:menu 
cls 
echo. 
echo -Menu- 
echo. 
echo. 
echo. 
echo 1) Begin 
echo. 
echo 2) How to play 
echo. 
echo 3) Exit 
echo. 
echo. 
echo. 
echo --------- 
echo. 
    set /p c=Choice: 
     if %c%==1 goto prestart1 
     if %c%==2 goto howtoplay 
     if %c%==3 goto cfr_exit 
     if NOT %c%==1 if NOT %c%==2 if NOT %c%==3 goto menu 


:cfr_exit 
cls 
echo. 
echo Are you sure you want to exit? 
echo. 
    set /p c=(Y/N): 
     if %c%=="Y" exit 
     if %c%=="N" goto menu 
     if NOT %c%=="Y" if NOT %c%=="N" goto cfr_exit2 

:cfr_exit2 
cls 
echo. 
echo You must enter a valid option. 
echo. 
pause 
goto cfr_exit 

:howtoplay 
cls 
echo. 
echo -How to play- 
echo. 
echo. 
echo. 
echo This game is very simple. There will be a number with an option after it, type the option in and it will perform an action(As the option would say). 
echo. 
pause 
goto menu 

:prestart1 
cls 
echo. 
echo Welcome to land of Fageryth! 
echo. 
echo What is your name, adventurer? 
echo. 
    set /p playername=Name: 
goto prestart2 

:prestart2 
cls 
echo. 
echo What would be your more valued statistic, Attack damage, or Hit points? 
echo. 
echo. 
echo. 
echo 1)Attack damage(Atk) 
echo. 
echo 2)Hit points(Hp) 
echo. 
echo. 
echo. 
echo --------- 
echo. 
    set /p playermorevaluedstat=Choice: 
     if %playermorevaluedstat%==1 
      set playeratk=6 
      set playerhp=25 
     if %playermorevaluedstat%==2 
      set playeratk=4 
      set playerhp=30 
     if NOT %playermorevaluedstat%==1 if NOT %playermorevaluedstat%==2 goto prestart2 
cls 
echo playeratk 
echo playerhp 
pause 

У меня возникли проблемы с :prestart2 части моего кода. В конце этого я попытался сделать это, если переменная не была равна 1 или 2, которые были параметрами, затем снова отправляет плеер обратно в начало раздела, а также, когда он заканчивается проверяя, я пытаюсь отобразить две переменные playeratk и playerhp, но вместо этого она просто закрывается. Я действительно потерян здесь и буду благодарен за помощь!

+0

Почему такая сложная логика? существует также предложение 'else', которое упрощает:' if '% playermorevaluedstat% "==" 2 "(делать некоторые вещи) иначе, если"% playermorevaluedstat% "==" 1 "(делать другие вещи) else (иначе) делать что-то еще); обратите внимание на '' '' вокруг выражений сравнения, чтобы избежать проблем в случае, если '% playermorevaluedstat%' пуст; прочитайте текст справки 'if /?', чтобы найти точный синтаксис для 'if' /' else' clauses ... – aschipfl

ответ

2

Пара вещей, прежде чем мы начнем:

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

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

set "var1=something" 
set "var2=a string with spaces" 
if "%var1%"=="something" echo %var1% 

Теперь проблема в вашем коде с двумя if заявления, простирающихся на несколько строк. Если вы собираетесь это сделать, вы должны поместить их в круглые скобки.

set /p playermorevaluedstat=Choice: 
     if %playermorevaluedstat%==1 (
      set playeratk=6 
      set playerhp=25 
      ) 
     if %playermorevaluedstat%==2 (
      set playeratk=4 
      set playerhp=30 
      )