2016-04-21 155 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 
      )