NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Nezorané pole

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
ofajfr
Člen
Avatar
ofajfr:27.2.2017 11:43

ZDravím, mám problém s vypsáním pole:

package javatrenink;
import java.util.Scanner;
/**
 *
 * @author Olda
 */
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;
       }
   }

   public void vykresli()
   {
    for (int q = 0; q <10; q++)
              {
                  for (int e = 0; e <10; e++)
                  {
                      hernimapa[q][e] = 0;
                      if (hernimapa [q][e] == hernimapa [x][y])
                       hernimapa [q][e] = 1;


                       System.out.print(hernimapa[q][e] + "  ");
                  }
                  System.out.println(" ");
              }
   }



}

Výstup:
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

Očekávaný výstup:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

V zásadě jde jen o to, že si procvičuji metody a pole, kde pomocí "wsad" hýbu virtuálním panáčkem po poli pomocí souřadnic.

 
Odpovědět
27.2.2017 11:43
Avatar
Vojta Bereščák:27.2.2017 12:28

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(" ");
              }
   }



}
 
Nahoru Odpovědět
27.2.2017 12:28
Avatar
ofajfr
Člen
Avatar
Odpovídá na Vojta Bereščák
ofajfr:27.2.2017 17:59

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();


    }

}
 
Nahoru Odpovědět
27.2.2017 17:59
Avatar
ofajfr
Člen
Avatar
ofajfr:27.2.2017 18:00

Těch getteru a setteru si v 90% nevšímej, generoval jsem si settery a gettery a ono se to hodilo všude :D Ale funguje to !

 
Nahoru Odpovědět
27.2.2017 18:00
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Odpovídá na ofajfr
Atrament:27.2.2017 19:51

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/pro­jects/javacur­ses/'>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.

 
Nahoru Odpovědět
27.2.2017 19:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.