Informatică, întrebare adresată de KioLik, 8 ani în urmă

Buna, stiti cumva cum as putea rezolva aceasta problema mai eficient?
În jocul tău, șarpele se va deplasa printr-un grid de 15 linii și 17 coloane, iar acesta se va deplasa doar atunci când primește o comandă de la jucător. Singura mutare invalidă este atunci când șarpele se lovește de un zid (încearcă să iasă în afara gridului). Acest gen de mutări vor fi ignorate, iar șarpele va rămâne în aceeași poziție. Poziția inițială a șarpelui este în mijlocul tablei (linia 8 coloana 9). Liniile tablei și coloanele tablei sunt numerotate începând cu 1.

Află câte deplasări valide a făcut șarpele.

Cerință
În această problemă va trebui să scrii o clasă Snake care conține următoarele metode:

deplasare(int) - numărul primit ca parametru semnifică direcția în care șarpele se va deplasa: 0 - sus, 1 - dreapta, 2 - jos, 3 - stânga
mutariValide() - Returnează numărul de mutări valide făcute de către șarpe până la momentul curent.
Practic plec de pe pozitia [8][9] si trebuie sa ma deplasez pe un grid cu 15 linii si 17 coloane, solutii? Din cate am inteles, nu trebuie sa folosesc neaparat for si niste conditii dar acum nu stiu cum ar trebui exact, am inteles cum este o mutare.
Daca este pe pozitia [8][9] si vrea sa o ia la dreapta o sa fie [9][9] dupa daca se duce in sus cand apelezi un for (in functia main) o sa fie [9][1], dar nu stiu de unde sa plec..


Paddon: Dupa [9][9] daca mergi la dreapta o sa fie [9][1] sau [10][9]?

In general, jocurile au un "main loop", adica un for infinit, cu break la sfarsitul jocului (apasarea tastei ESC / Q de catre player, ramanerea fara vieti, etc), conditie pusa de tine.

Daca nu intelegi sau ai nevoie si de altceva scrie-mi si o sa te incerc sa te ajut.
KioLik: Nu e vorba de un joc, e de o problema, doar trebuie sa fac mutarile.
KioLik: int X = 8, Y = 9;
int valid = 0, linie = 15, coloana = 17;
void deplasare(int numar) {
if (a == 0 && X < linie && X > 1 && Y < coloana && Y > 1) {
X--;
valid++;
}
else if (a == 1 && Y < coloana && Y > 1 && X < linie && X > 1) {
Y++;
valid++;
}
else if (a == 2 && X < linie && X > 1 && Y < coloana && Y > 1) {
X++;
valid++;
}
else if (a == 3 && Y < coloana && Y > 1 && X < linie &&X > 1) {
Y--;
valid++;
}
}
int mutariValide() {
return valid;
}
}
KioLik: Eu asa am facut si da corect pe mutari, o sa iti las si cum testez
KioLik: Snake joc = new Snake();
joc.deplasare(1);
System.out.println(joc.mutariValide()); // 1
for(int i = 0; i < 100; ++i)
joc.deplasare(0);
System.out.println(joc.mutariValide()); // 8
}
KioLik: Ce zici ca e gresit...? adica nu prea imi dau seama
Paddon: Daca iti da corect, nu e nimic gresit, nu?
KioLik: Pai am o problema, sa zicem ca ma duc sus, 8 mutari valide, ma duc stanga, 8 mutari valide sau 7 nu mai stiu exact cat numara pana acolo dupa daca ma duc in jos, ar trebui sa fie 15, dar imi da 8
KioLik: Eu cred ca nu am facut o ok problema.. din punctul asta de vedere..
KioLik: Si gen daca am ajuns la marginea gridului n ar trebui sa ma mai deplasez, insa daca apelez functia pt mutare tot in acea directie o sa mearga, posibil aceste doua greseli le am dar nu stiu sa le rezovl

Răspunsuri la întrebare

Răspuns de Paddon
0

Dupa [9][9] daca mergi la dreapta o sa fie [9][1] sau [10][9]?

In general, jocurile au un "main loop", adica un for infinit, cu break la sfarsitul jocului (apasarea tastei ESC / Q de catre player, ramanerea fara vieti, etc), conditie pusa de tine.

Daca nu intelegi sau ai nevoie si de altceva scrie-mi si o sa te incerc sa te ajut.


KioLik: Ti am lasat in comentariul anterior ceva
Alte întrebări interesante