Deplasare grid.
Last Updated: Jan 20 2020 22:59, Started by
ZeldakTime
, Jan 20 2020 16:10
·
0
#1
Posted 20 January 2020 - 16:10
Buna, am o problema ce am avut o in java... insa nu prea imi iese in acel limbaj si as vrea sa o fac in c++... intr un fel sau altul.
Am un grid de [15][17] linii si coloane. Eu trebuie sa fac deplasari in functie de un numar dat ca si parametru 0 - sus, 1 - dreapta, 2 - jos, 3 - stanga. Pozitia initialia incepe de pe pozitia [8][9] O mutare valida este valida numai daca ajunge pana la 17 respecti sa nu scada sub 1. int X = 8, Y = 9; int valid = 0, linie = 15, coloana = 17; void deplasare(int a) { if (a == 0 && X < linie && sX > 1 && Y < coloana && sY > 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; } }Acesta este codul, el este ok, face mutarile corect, insa sa zicem. Snake joc = new Snake(); joc.deplasare(0); cout << joc.mutarivalide());// 1 for(int i = 0; i < 100; ++i) joc.deplasare(0); cout << joc.mutariValide());Acesta este ok, insa daca o sa mai apelez dupa cout inca un joc.mutari valide, nu ar mai trebui sa fie nimic, pentru ca a ajuns la limita gridului, stie cineva cum pot pune o conditie sa nu se mai apeleze dupa aceia? Edited by dani.user, 20 January 2020 - 18:42. |
#3
Posted 20 January 2020 - 18:49
dani.user, on 20 ianuarie 2020 - 18:45, said:
Care-i cerinta exacta? 0 - sus, 1 - dreapta, 2 - jos, 3 - stanga, doua functii, deplasare (int)numarul primit ca parametru semnifica directia iar mutarivalide returneaza mutarile, exact cum am facut si eu, problema este practic in java, dar nu imi iese efectiv... adica da corect pe exemple dar cred ca e din cauza mutarilor invalide, gen daca am ajuns la marginea gridului n ar trb sa mai mearga sa se deplaseze in acea parte odata ce mai dau o comanda.. dar poate daca o rezolv in c++ reusesc sa o trec pana la urma in java |
#4
Posted 20 January 2020 - 19:19
Nu mi-e clar ce vrei sa faci cu mutarile valide. Esti punct si vrei sa returnezi ca poti sa te muti doar in 3 directii in loc de 4?
Vad ca numeri de cate ori dai de o mutare valida, dar de unde vin directiile? Le citesti din fisier? |
#5
Posted 20 January 2020 - 19:53
dani.user, on 20 ianuarie 2020 - 19:19, said:
Nu mi-e clar ce vrei sa faci cu mutarile valide. Esti punct si vrei sa returnezi ca poti sa te muti doar in 3 directii in loc de 4? Vad ca numeri de cate ori dai de o mutare valida, dar de unde vin directiile? Le citesti din fisier? joc.deplasare(0); System.out.println(joc.mutariValide()); // 1 for(int i = 0; i < 100; ++i) joc.deplasare(0); System.out.println(joc.mutariValide()); joc.deplasare(0); System.out.println(joc.mutariValide()); Daca o mutare e valida variabila contor "valid" o sa creasca si o sa fie returnata Practic e o functie ce transmite prin parametru mutarile. Gen mie imi da corect pentru orice mutare, dar daca mai apelez odata functia joc.deplasare(0); System.out.println(joc.mutariValide()); // 1 for(int i = 0; i < 100; ++i) joc.deplasare(0); System.out.println(joc.mutariValide()); joc.deplasare(0); System.out.println(joc.mutariValide()); cum apelez aici de 3 ori, o sa afiseze din nou acelas raspuns pt 0, si nu ar trebui gen pentru ca practic ar trece de 17 si ar trebui sa ramana pe pozitia aia Edited by ZeldakTime, 20 January 2020 - 19:47. |
#6
Posted 20 January 2020 - 20:10
Java, ca se potrivesc enums aici:
package test; public class Snake { public enum Direction { UP(0, -1), RIGHT(1, 0), DOWN(0, 1), LEFT(-1, 0); private final int x; private final int y; Direction(int x, int y) { this.x = x; this.y = y; } } public Snake(int rows, int columns, int initialX, int initialY) { board = new boolean[columns + 2][rows + 2]; for (int y = 0; y < columns; ++y) { for (int x = 0; x < rows; ++x) { board[y + 1][x + 1] = true; } } currentX = initialX; currentY = initialY; } public void move(Direction direction) { int newX = currentX + direction.x; int newY = currentY + direction.y; if (board[newY][newX]) { currentX = newX; currentY = newY; ++validMoves; } } public int getNumberOfValidMoves() { return validMoves; } private boolean board[][]; private int currentX; private int currentY; private int validMoves; } package test; public class Main { public static void main(String[] args) { var game = new Snake(15, 17, 8, 9); for (int i = 0; i < 100; ++i) { game.move(Snake.Direction.LEFT); } System.out.println(game.getNumberOfValidMoves()); } } |
#7
Posted 20 January 2020 - 22:59
dani.user, on 20 ianuarie 2020 - 20:10, said:
Java, ca se potrivesc enums aici: package test; public class Snake { public enum Direction { UP(0, -1), RIGHT(1, 0), DOWN(0, 1), LEFT(-1, 0); private final int x; private final int y; Direction(int x, int y) { this.x = x; this.y = y; } } public Snake(int rows, int columns, int initialX, int initialY) { board = new boolean[columns + 2][rows + 2]; for (int y = 0; y < columns; ++y) { for (int x = 0; x < rows; ++x) { board[y + 1][x + 1] = true; } } currentX = initialX; currentY = initialY; } public void move(Direction direction) { int newX = currentX + direction.x; int newY = currentY + direction.y; if (board[newY][newX]) { currentX = newX; currentY = newY; ++validMoves; } } public int getNumberOfValidMoves() { return validMoves; } private boolean board[][]; private int currentX; private int currentY; private int validMoves; } package test; public class Main { public static void main(String[] args) { var game = new Snake(15, 17, 8, 9); for (int i = 0; i < 100; ++i) { game.move(Snake.Direction.LEFT); } System.out.println(game.getNumberOfValidMoves()); } } |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users