2016-04-21 149 views
1

所以最近我开始学习批处理文件,今天我决定尝试用它来制作游戏。我有一些错误,并且无法弄清楚代码有什么问题。 继承人的代码:与批处理文件代码混淆

@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(这是选项)的地方,那么它会将播放器重新发回到该部分的开始,并且当它结束时检查,我试图让它显示两个变量playeratkplayerhp,但它只是关闭了。我真的迷失在这里,并希望得到帮助!

+0

为什么这么复杂的逻辑?还有一个'else'子句,它有助于简化:'if“%playermorevaluedstat%”==“2”(做某些事情)其他如果“%playermorevaluedstat%”==“1”(做其他事情)else做别的事)';注意''''比较表达式的''''以避免'%playermorevaluedstat%'为空的情况下的麻烦;阅读'if /?'的帮助文本以查找'if' /'else'子句的确切语法...... – aschipfl

回答

2

一对夫妇的事情,然后才开始:

首先,故障排除批处理脚本时,摆脱(注释掉)您echo offcls,这样你可以看到它是怎么回事错了。

其次,您应该始终对变量加倍引号,以确保在设置和比较它们时不会无意中包含空格。它似乎并没有实际上是导致代码中的问题,但它是一个很好的习惯进入:现在

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 
      )