Diskuze: Nezorané pole
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Osobne bych se zameril na toto:
if (hernimapa [q][e] == hernimapa [x][y])
nemelo by tam byt spis:
if (q == x && e == y)
tedy jestli dobre chapu. a celkove by jsi to mel udelat trochu jinak:
pokud ti jde jen o vypsani pozice (ne celou cestu), tak ti staci:
for (int q = 0; q <10; q++)
{
for (int e = 0; e <10; e++)
{
if(q == x && e == y) System.out.print("1");
else System.out.print("0");
}
System.out.println(" ");
}
a cele pole vubec nepotrebujes.
pokud chces udrzovat cestu pak to musi vypadat takto:
public class Hrac {
public int x = 5;
public int y = 5;
private Scanner sc = new Scanner(System.in, "Windows-1250");
int hernimapa[][] = new int [10][10];
public void pohyb()
{ String vstup = sc.nextLine();
switch (vstup)
{
case "w":
y++;
break;
case "s":
y--;
break;
case "a":
x--;
break;
case "d":
x++;
break;
}
hernimapa[x][y] = 1;
}
public void vykresli()
{
for (int q = 0; q <10; q++)
{
for (int e = 0; e <10; e++)
{
System.out.print(hernimapa[q][e] + " ");
}
System.out.println(" ");
}
}
}
Díky moc, už to funguje. Ještě jeden dotaz, jak udělat aby když stiknu "w" se to vypsalo na jednom a tom samém poli a nemusel jsem odenterovávat. Zatím to funguje tak že se svoji postavičkou honíte druhou a když ju chytnete, vyhrál jste
package javatrenink;
import java.util.Random;
import java.util.Scanner;
/**
*
* @author Olda
*/
public class Hrac {
private int x = 5;
private int y = 5;
public int r = 2;
public int t = 2;
private Scanner sc = new Scanner(System.in, "Windows-1250");
Random random = new Random();
int hernimapa[][] = new int [10][10];
public void pohyb()
{ String vstup = sc.nextLine();
switch (vstup)
{
case "w":
setX(getX() - 1);
break;
case "s":
setX(getX() + 1);
break;
case "a":
setY(getY() - 1);
break;
case "d":
setY(getY() + 1);
break;
}
if (getX()>9)
setX(getX() - 1);
else if (getX()<0)
setX(getX() + 1);
if (getY()>9)
setY(getY() - 1);
else if (getY()<0)
setY(getY() + 1);
}
public void vykresli()
{
for (int q = 0; q <10; q++)
{
for (int e = 0; e <10; e++)
{
if (q == getX() && e == getY())
hernimapa [q][e] = 1;
else if (q ==r && e == t)
hernimapa[q][e] = 2;
else
hernimapa[q][e] = 0;
System.out.print(hernimapa[q][e] + " ");
}
System.out.println(" ");
}
}
public void pohybprotivnika()
{
int rngpohyb = random.nextInt(4);
switch(rngpohyb)
{
case 0:
r--;
break;
case 1:
r++;
break;
case 2:
t--;
break;
case 3:
t++;
break;
}
if (r>9)
r--;
else if (r<0)
r++;
if (t>9)
t--;
else if (t<0)
t++;
}
public boolean sezral ()
{
return getX()==r && getY()==t;
}
/**
* @return the x
*/
public int getX() {
return x;
}
/**
* @param x the x to set
*/
public void setX(int x) {
this.x = x;
}
/**
* @return the y
*/
public int getY() {
return y;
}
/**
* @param y the y to set
*/
public void setY(int y) {
this.y = y;
}
}
main:
package javatrenink;
import java.util.Random;
import java.util.Scanner;
/**
*
* @author Olda
*/
public class JAVAtrenink {
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Hrac Olda = new Hrac();
Random rng = new Random();
int f;
Scanner sc = new Scanner(System.in, "Windows-1250");
int vstup1 = Integer.parseInt(sc.nextLine());
Olda.setX(vstup1);
int vstup2 = Integer.parseInt(sc.nextLine());
Olda.setY(vstup2);
while (true)
{
f = rng.nextInt(2);
Olda.vykresli();
Olda.pohyb();
if (f == 1)
Olda.pohybprotivnika();
if (Olda.sezral())
{
System.out.println("VYHRÁL JSI!");
break;
}
}
Olda.vykresli();
}
}
Ještě jeden dotaz, jak udělat aby když stiknu "w" se to vypsalo na jednom a tom samém poli a nemusel jsem odenterovávat.
Pokud vím tak nijak, tohle v 'čisté' Javě udělat nejde. Existují knihovny jako <a href='https://sourceforge.net/projects/javacurses/'>JCurses</a> ale než se učit tohle, to bych ti radši doporučil vykašlat se na konzoli a předělat to rovnou pro Swing nebo JavaFX.
Zobrazeno 5 zpráv z 5.