2017-04-27 5 views
0

数字パッドの入力スキルを向上させようと思っている人のために、私のオフィス用の入力ゲームを作成しています。私のコードは、入力が正しいか間違っている場合、スコアを保持し、stackoverflowコミュニティ(偉大なCompo)の助けを借りて、私のコードが改善されました。今私は難易度のオプションをユーザーに追加しようとしています。入力した難易度に戻ってバッチ参照を作成し、正しい難易度オプションに従うという問題があるようです。私はIFとELSEを使用することができますが、まだバッチの仕組みに慣れています。バッチ番号パッド入力ゲームエラーv2

困難

@ECHO OFF 

SET/A "correct=incorrect=0" 

:START 
CLS 
COLOR 07 
SET "num=%RANDOM%" 
ECHO. 
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect% 
ECHO. 
ECHO %num% 
ECHO. 
SET /P "INP= " 
ECHO. 
IF "%INP%"=="%num%" (
    COLOR 27 
    ECHO CORRECT 
    SET/A "correct+=1" 
    PING -n 2 0.0.0.0 1>NUL 
) ELSE (
    COLOR 47 
    ECHO INCORRECT 
    SET/A "incorrect+=1" 
    PING -n 2 0.0.0.0 1>NUL 
) 
GOTO START 

難易度のオプションを使用してコードのバージョン1

最初から設定された難易度に戻って参照するためにコードを伝え、継続して使用しますか
@ECHO OFF 

SET/A "correct=incorrect=0" 

:STARTDIFF 
ECHO DIFFICULTY? 
ECHO. 
ECHO EASY 
ECHO HARD 
ECHO. 
SET /P "DIFF= " 
IF "%DIFF%" EQU EASY GOTO STARTEASY 
IF "%DIFF%" EQU HARD GOTO STARTHARD 
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF 

: STARTEASY 
CLS 
COLOR 07 
SET "num=%RANDOM%" 
GOTO TEST 

: STARTHARD 
CLS 
COLOR 07 
SET "num=%RANDOM%%RANDOM%" 
GOTO TEST 

: TEST 
ECHO. 
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect% 
ECHO. 
ECHO %num% 
ECHO. 
SET /P "INP= " 
ECHO. 
IF "%INP%"=="%num%" (
    COLOR 27 
    ECHO CORRECT 
    SET/A "correct+=1" 
    PING -n 2 0.0.0.0 1>NUL 
) ELSE (
    COLOR 47 
    ECHO INCORRECT 
    SET/A "incorrect+=1" 
    PING -n 2 0.0.0.0 1>NUL 
) 

ECHO %DIFF%>NUL 
IF "%DIFF%" EQU EASY GOTO STARTEASY 
IF "%DIFF%" EQU HARD GOTO STARTHARD 
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF 

::GOTO START 

を追加する前に、コードのバージョン1その難しさ?

申し訳ありませんが、私は何をしようとしているのかをよりよく説明するために正しい用語を新しくしたいと思います。

答えて

0

「エンド・オブ・このファイル」を意味するcmdに理解されているあなたは完全に戻って一連の構造を変更することを決めた理由を、私はよく分かりませんGOTOさん:

このお試しください:私は私のオフィスのWindows XPの上でこれを実行してみました

@ECHO OFF 

ECHO DIFFICULTY? 
ECHO. 
ECHO 1. EASY 
ECHO 2. HARD 
ECHO. 
CHOICE /C 12 
SET "LEVEL=%ERRORLEVEL%" 
SET/A "correct=incorrect=0" 

:START 
CLS 
COLOR 07 
IF "%LEVEL%"=="2" (Set "num=%RANDOM%%RANDOM%") ELSE SET "num=%RANDOM%" 
ECHO. 
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect% 
ECHO. 
ECHO %num% 
ECHO. 
SET/P "INP= " 
ECHO. 
IF "%INP%"=="%num%" (
    COLOR 27 
    ECHO CORRECT 
    SET/A "correct+=1" 
    TIMEOUT 1 1>NUL 
) ELSE (
    COLOR 47 
    ECHO INCORRECT 
    SET/A "incorrect+=1" 
    TIMEOUT 1 1>NUL 
) 
GOTO START 
+0

私は、フォーチュンクッキーから中国語を学ぼうとしているようです。私はフォーラムやアーティキルから知っておく必要があると思ったことだけを学ぼうとしました。 if、else、if elseの周りに私の頭を包み込むように思えます。私はgotoを取り除くことが、これらのものをコーディングするときに私の人生を楽にすることを知っています。 – Slovakolarik

+0

私はコードを実行しようとしましたが、難易度を選択するチャンスがありますが、%random%で生成された数値にまっすぐに進みます。 – Slovakolarik

0

このコードを実行しようとすると、少し修正が加えられます。

@echo off 

SET/A "correct=incorrect=0" 

:STARTDIFF 
ECHO DIFFICULTY? 
ECHO. 
ECHO EASY 
ECHO HARD 
ECHO. 
SET /P "DIFF= " 
IF "%DIFF%" EQU EASY GOTO STARTEASY 
IF "%DIFF%" EQU HARD GOTO STARTHARD 
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF 

:STARTEASY 
SET X="EASY" 
CLS 
COLOR 07 
SET "num=%RANDOM%" 
GOTO TEST 

:STARTHARD 
SET X="HARD" 
CLS 
COLOR 07 
SET "num=%RANDOM%%RANDOM%" 


:TEST 
ECHO. 
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect% 
ECHO. 
ECHO %num% 
ECHO. 
SET /P "INP= " 
ECHO. 
IF "%INP%"=="%num%" (
    COLOR 27 
    ECHO CORRECT 
    SET/A "correct+=1" 
    PING -n 2 0.0.0.0 1>NUL 
) ELSE (
    COLOR 47 
    ECHO INCORRECT 
    SET/A "incorrect+=1" 
    PING -n 2 0.0.0.0 1>NUL 
) 
IF %X%=="EASY" GOTO STARTEASY 
IF %X%=="HARD" GOTO STARTHARD 
pause 
+0

を、私はあなたのジョークを作る知っているが、私最初の入力のハードや簡単かどうか、それはまだ簡単 – Slovakolarik

0

if非常にリテラルであり、2つの引数が等しいと宣言することがまったく同じでなければなりません。

したがって、例えば

IF "%DIFF%" EQU EASY GOTO STARTEASY 

IF "%DIFF%" EQU "EASY" GOTO STARTEASY 

以上、比較大文字と小文字を区別しないになり

IF /I "%DIFF%" EQU "EASY" GOTO STARTEASY 

であるべきです。

ただし、変数xにquoted-stringを割り当てるため、その比較は正しいことに注意してください。

おそらく、サブルーチンについて学ぶ必要があります。

:STARTEASY 
CLS 
COLOR 07 
SET "num=%RANDOM%" 
call :TEST 
goto starteasy 

次にルーチン:testの最後の2つのif文を削除し、goto :eofラインで(デバッグのために間違いなく一時的なものである)pauseに従ってください。これにより、ルーチンはcallの後のステートメントに戻ります。

実際には、goto :eofは厳密には必須ではありません。それ以上のルーチンを追加すると、フロースルーが次々と発生しないようにすることをお勧めします。

コロンが重要であることに注意してください。 call :somelabelは、このバッチファイル内のラベルsomelabelでルーチンを実行します。 call somelabel(コロンなし)はsomelabelという名前の外部実行可能ファイルを実行します。

:eof:も重要である -

+0

の典型的な数カウントを持っています私はverは、たとえあったとしても、どのようにリテラルを実現したのですすべての情報と助けてくれてありがとう – Slovakolarik