Witam. Chciałbym dowiedzieć się jak napisać kod, który zmniejszałby daną liczbę o 1 po wpisaniu komendy ale nie Od razu do 0 tylko, żeby zapamiętał ostatni wynik. Np. i=3 wpisuje komende "use" i wynik jest 2 zapamiętanie tego wyniku. Następnie użycie tej samej komendy raz jeszcze wtedy wynik: 1 aż do 0 po czym po komendzie np "reset". Zresetowałby stan zapamiętanej liczby do początku. Nie mogę sobie z tym poradzić.
Próbowałem jakoś pokombinować, używając if" ale jak widać efekty marne i wątpię czy to się nadaje.
O takie coś chodzi? (nie znam jsa)
var previousCommand = "";
var currentCommand = "";
var counter = 3;
while (counter > 0) // pętla do testów
{
currentCommand = prompt();
switch (currentCommand)
{
case "reset":
counter = 3;
break;
case "use":
counter--;
break;
default:
alert("error");
break;
}
if (currentCommand == previousCommand && currentCommand == "use")
{
counter = 0;
}
alert(counter);
previousCommand = currentCommand;
}
Oo jaka szybka reakcja. Zgadza się coś takiego, tylko bez prompt, bo to do bota, który po wpisaniu komendy na czacie będzie właśnie obniżał wartość danej liczby i kiedy dojdzie do 0 to ma wyświetlać wtedy wiadomość "wpisz reset" po tej komendzie resetuje. Mimo to dziękuję za tak szybką reakcję i coś już więcej wiem.
Nie wiem czy to wszystko jest zrozumiałe co napisałem to jeszcze dopiszę dokładniej. Mamy np. "3 użycia" danej komendy po 3 użyciach wartość zadeklarowanej liczby wynosi 0 i żeby używać dalej komendy trzeba wpisać "reset" aby 3 użycia wróciły.
Ah i zapomniałem o jednym "pozostałe użycia" mają nam się wyświetlać po użyciu komendy. Za pierwszym razem będzie to 2 za drugim 1 a po 3 razie będzie 0 z informacją o zresetowaniu komendą "reset".
Nie znam się na Web Workerach, ale:
1. Lepiej używać ===
niż ==
w Javascripcie.
2. Myślę, że lepiej używać let
niż var
(let
wprowadza inny zasięg zmiennych).
3. Myślę, że żeby zachować stan zmiennej, to należałoby utworzyć ją w "bloku" nadrzędnym w stosunku do tego, w którym jest ona zmieniana (w szczególności jeśli chodzi o pętle; piszę "bloku" w cudzysłowie, bo deklaracje z var
nie mają zasięgu blokowego).
4. W tym, co napisał @WeiXiao, możesz po prostu zamienić wywołanie prompt()
na jakąś funkcję, która pobierze dane (albo na własność obiektu message
).
5. Jeśli chodzi o użycia komendy, po prostu zliczaj: wpisz let commandUsages = 0;
na przykład przy deklaracji zmiennej counter
i zwiększaj tę zmienną w odpowiednim miejscu instrukcji switch
.
Dziękuję za rady. Próbowałem coś z tym zrobić ale brak efektów. Tutaj w ten sposób. Nie ma żadnych błędów w kodzie i bot działa, lecz nic się nie dzieje. Nie reaguje na komendy.
Następnie próbowałem jeszcze z "console.log()" w ten sposób i reaguje na komendę i w terminalu wyświetla bez końca 3 i error.
Wyżej na pastebin a tutaj jeszcze tak wstawiam.
let previousCommand = "";
let currentCommand = "";
let counter = 3;
while (counter > 0) // pętla do testów
{
currentCommand = message.channel.sendMessage();
switch (currentCommand)
{
case "reset":
counter = 3;
break;
case "use":
counter--;
break;
default:
console.log("error");
break;
}
if (currentCommand === previousCommand && currentCommand === "use")
{
counter = 0;
message.channel.sendMessage(counter);
}
console.log(counter);
previousCommand = currentCommand;
}
})