zwergkaninchen
Goto Top

Batch-Variable rechnet immer weiter

Hallo, Leute!


Ich wollte mir ein kleines Idle-Game in Batch schreiben, aber ich komm nicht weiter. Hier ist ein Ausschnitt zur Erklärung meines Problems:

@echo off

set GELD=1
set GELDPROSEKUNDE=1

:START
cls
echo $ %GELD%
set /a GELD=GELD+%GELDPROSEKUNDE%
echo.
set /p KAUF=Upgrade:
if %KAUF%.==a. goto UPGRADEONE
if not %KAUF%.==a. goto NOUPGRADE

:NOUPGRADE
timeout /t 1 /nobreak>nul
goto START

:UPGRADEONE
set GELDPROSEKUNDE=%GELDPROSEKUNDE%+1
goto NOUPGRADE

Solange ich z.B. ENTER drücke, steigt der "GELD-Zähler" pro Sekunde um 1 an. Wenn ich aber "a" drücke, soll sich das "GELD PRO SEKUNDE" um 1 erhöhen (also immer 2$ pro Sekunde. Allerdings steigt der Zähler immer weiteran. Wenn ich einmal "a" drücke und danach weiter ENTER, wird trozdem immer weiter "+1" gerechnet. Mit ECHO OFF habe ich herausgefunden das er immer +1+1+1+1+1+1+1 usw. rechnet obwohl ich nur einmal "a" gedrückt habe. Könnt ihr mir da vielleicht weiterhelfen?

Sorry wenn ich zuviel schreibe aber das ist meine erste Frage hier und mehr Details = mehr gut, oder? ^^

PS.: Ich habs auch schon mit else anstatt mit if not probiert, hat auch nicht geklappt.

Content-Key: 275426

Url: https://administrator.de/contentid/275426

Printed on: April 19, 2024 at 21:04 o'clock

Member: SaschaRD
SaschaRD Jun 23, 2015 at 14:25:50 (UTC)
Goto Top
Hallo Zwergkaninchen,

willkommen auf Administrator.de

Bitte deine zukünftigen Beiträge mit Hilfe der Formatierung erstellen.

Teste in deinem Skript die folgende Änderung:
IF /i %KAUF% == a goto UPGRADEONE
IF NOT %KAUF% == a goto NOUPGRADE 
Gruß, Sascha
Member: Zwergkaninchen
Zwergkaninchen Jun 23, 2015 at 14:42:43 (UTC)
Goto Top
Erstmal danke für deine Hilfe.

Allerdings rechnet er jetzt +1, +2, +3 ,+4 usw immer weiter.
Member: bastla
bastla Jun 23, 2015 at 16:24:40 (UTC)
Goto Top
Hallo Zwergkaninchen!

Wird's besser, wenn Du es so
@echo off & setlocal

set /a GELD=1
set /a GELDPROSEKUNDE=1

:START
cls
echo $ %GELD%
set /a GELD+=%GELDPROSEKUNDE%
echo.
set /p KAUF=Upgrade:
if %KAUF%.==a. (
    set /a GELDPROSEKUNDE+=1
    set "KAUF="  
)
timeout /t 1 /nobreak>nul
goto START
versuchst?

Für Berechnungen brauchst Du grundsätzlich set /a, und ENTER schließt zwar eine Eingabe ab, löscht aber nicht den aktuellen Variableninhalt, wenn Du nicht zumindest auch ein Leer- oder anderes Zeichen eingibst ...

Grüße
bastla
Mitglied: 114757
114757 Jun 23, 2015 updated at 16:37:01 (UTC)
Goto Top
Die Eingabe-Variable %KAUF% solltest du bei wiederholter Verwendung auch immer wieder zurücksetzen, denn sonst wird auch ohne Eingabe von a (nur durch drücken von Enter wird die Variable ja nicht zurückgesetzt) bei jedem Durchgang immer wieder ein Upgrade durchgeführt ...
@echo off

set /a GELD=0
set /a GELDPROSEKUNDE=1

:START
cls
set /a GELD+=%GELDPROSEKUNDE%
echo $ %GELD%
echo.
set KAUF=
set /p KAUF=Upgrade:
if /i "%KAUF%" == "a" goto UPGRADEONE  

:NOUPGRADE
timeout /t 1 /nobreak>nul
goto START

:UPGRADEONE
set /a GELDPROSEKUNDE+=1
goto NOUPGRADE
Gruß jodel32