Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Probleme timonerie schimbator sau...

Numar strada gresit in contractul...

Centrala Ariston Cares Premium 24...

La multi ani @Klasse!
 La multi ani @shmecherul!

pareri ipad 6-2018- flip

Cum au aparut supermarketurile in...

Campanii mincinoase Carrefour
 Tv toshiba defect

touchscreen navigatie stricat

bonsai - de unde?

Resetare Bonus Malus
 Unitatea optica DVD-rw absenta pe...

Problema configurare Wireguard

Dozatoare de apa, cu alimentare d...

Intarziere aterizare avioane
 

Deplasare grid.

- - - - -
  • Please log in to reply
6 replies to this topic

#1
ZeldakTime

ZeldakTime

    Junior Member

  • Grup: Junior Members
  • Posts: 59
  • Înscris: 02.12.2019
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.


#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,254
  • Înscris: 24.02.2007
Care-i cerinta exacta?

#3
ZeldakTime

ZeldakTime

    Junior Member

  • Grup: Junior Members
  • Posts: 59
  • Înscris: 02.12.2019

View Postdani.user, on 20 ianuarie 2020 - 18:45, said:

Care-i cerinta exacta?
Avem un punct ce se deplaseaza printr un grid de 15 linii si 17 coloane, acesta se deplaseaza cand primeste co omanda de la jucator. Singura mutare invalida este atunci cand sarpele loveste un zic, liniile si coloanele tablei sunt numerotate incepand cu 1.
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
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,254
  • Înscris: 24.02.2007
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
ZeldakTime

ZeldakTime

    Junior Member

  • Grup: Junior Members
  • Posts: 59
  • Înscris: 02.12.2019

View Postdani.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?
Snake joc = new Snake();
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
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,254
  • Înscris: 24.02.2007
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
ZeldakTime

ZeldakTime

    Junior Member

  • Grup: Junior Members
  • Posts: 59
  • Înscris: 02.12.2019

View Postdani.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());
}
}

Multumesc de inspiratie, o sa vad cum reusesc sa o fac exact dupa cerinte.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate