为什么命令GOTO atack1不会导致执行下面的代码:batch1执行批处理文件?

时间:2016-11-13 12:35:29

标签: batch-file cmd

我刚刚开始学习批处理/ shell。我开始制作一个名为bpg的基于文本的RPG。无论如何,我花了一天时间来制作它的基本结构,然后当我使用攻击触发器时我发现cmd关闭了。我跑了一百万次,但发现它没有任何问题。请帮忙。

批处理文件可以从https://www.dropbox.com/s/f8r7cs0tvo8qhs8/bpg.bat?dl=0

下载

以下是代码:

@echo off
if not "%1" == "max" start /MAX cmd /c %0 max & exit/b
title BPG 1 A batch of monsters
setlocal enabledelayedexpansion
color 2

:menu
cls
echo  ______   _______   _______
echo I  ___ \ I  ____ I I ____  \
echo I I   I II I    II I I    \/
echo I  __ I  I  _____I I I ____
echo I I  \ \ I I       I I \_  I
echo I I___I II I       I I___I I
echo I______/ I_/       I_______I A BATCH OF MONSTERS
echo.
echo.
echo 1) begin
echo.
echo 2) exit
echo.
set /p c=bpg:

if "%c%" == "1" goto new
if "%c%" == "2" exit
goto menu

:new
set health=100
set enemyhealth=30
set playerdmg=10
set monsterdmg=10
goto home

:home
cls
echo --------------------
echo   Welcome to BPG
echo --------------------
echo (noobs can f off)
echo.
echo 1) Battle
echo 2) Menu
echo.

set /p c=bpg

if "!c!" == "1" goto encounter1
if "!c!" == "2" goto menu
goto home

:encounter1
cls
echo --------------------
echo You: %health%
echo Enemy: %enemyhealth%
echo --------------------
echo.
echo 1) attack
echo.
echo 2) flee
echo.
set /p c=bpg
if "!c!" == "1" goto atack1
if "!c!" == "2" goto home
goto encounter1

:attack1
set /a !health!-=!monsterdmg!
set /a !monsterhealth!-=!playerdmg!
if !monsterhealth! lss 0 goto win
goto encounter

:win
cls
echo.
echo --------------------
echo You Win!
echo --------------------
echo              _.oood"""""""booo._
echo          _.o""      _____    . ""o._
echo        oP"  _.ooo""""   """"oIo._. "Yo
echo      o8   oP  _.-":          I I"._. .8o
echo     d'  o8',-"    :          I I/  ,\. .b
echo    d'  d.-"      :           I I: (( .\
echo   8'  d' """"":  :           I I  II\_/. .8
echo  8   8'      :  :       I)   _ I  II I.I   8
echo ,8  8        :  :     /)I \ II I\_II I I8  8.
echo 8' ,8       :  :      " /_) I.:' I I I I8. .8
echo 8  8'       :  :        _ _-'  \ ' __   __  8
echo 8  8       :  :         \I__ I  I I  I I 8I 8
echo 8  8.      :  :         II   I  I I-:' I 8I 8
echo 8. .8     /   I      __/ I__ I__I I  \ I__I,8
echo 8  8   .'    \     /     __ . . . . . .8LL8'
echo  8   8.'       -. (    ,'  .. I I ,-I8  8
echo   8.(__________dd_) \__/ '  0I...: I: (8 ,8
echo    Y.  Y.                    I :/I I,\I. .P
echo     Y.  "8.          .,o     I I I,I".  ,P
echo      "8.  "Yo_               I IpI". ,8"
echo        "Y_   "ooo.__   __.ooI". . _P"
echo          '"oo_     """""    . _oo""'
echo               ."""boooooood"""'.
echo.
echo.
pause

1 个答案:

答案 0 :(得分:0)

if "!c!" == "1" goto atack1

在此命令中查找百万次和第一次。

现在 - 为什么它不会到达标签“: t ack1”

如果你达到那个标签,

set /a !health!-=!monsterdmg!

将从名称为(monsterdmg的内容)

的变量中减去health的内容

在其他行上重复此错误。

!var!的痴迷是什么?当您处理代码块中正在发生变化的值时,您只需要!var! - 通常是循环。语法在其他时候起作用,但要注意 - 它可能具有不可预知的副作用。除非您需要使用%var%表单,否则最好坚持使用!var!