Stránka 1 z 1

Java - vytvoření šachovnice

Napsal: 09 úno 2013 16:19
od Fantomas
Ahoj,

začali jsme ve škole probírat v Javě prostředí. Učitel nám zadal, abychom pomocí cyklů vytvořili standardní šachovnici v prostředí. Jelikož jsem v tom úplný začátečník, tak se už trápím docela dlouho a ne a ne na to přijít - vždy mi to vyhodí celý černý sloupec a za ním hned bílý... a tak dále až do 8. sloupce - tak jak to má být na šachovnici být.

Všechny potřebné knihovny mám naimportované správně, když spustím program, funguje, pouze řeším jak vytvořit ten správný cyklus na správnou šachovnici.

Jediný problém je tedy každou obřádku posunout, aby se začínalo černým čtvercem. Můj pokus o vnořený cyklus je zde:

Kód: Vybrat vše

public class JavaFX20 extends Application {
   Group root = new Group();
   
   final int WINDOW_SIZE_X = 800;
   final int WINDOW_SIZE_Y = 800;
   final Color BACKGROUND_COLOR = Color.WHITE;
   final Duration TIME = Duration.millis(10);

void start() {
              for (int i = 0; i <WINDOW_SIZE_X ; i=i+100) {
                       for (int j = 1; j < WINDOW_SIZE_Y; j=j+200) {
        if (i%2==1){
            Rectangle ctverec = new Rectangle(j, j, 100, 100);
            root.getChildren() .add(ctverec);
        }else{
                           
        Rectangle ctverec = new Rectangle(j+100, i , 100,100);
        root.getChildren() .add(ctverec);
            }
       
                       }
                       }
                     
           
        }


Mockrát děkuji za každou pomoc. Myslím že to posunutí již nebude moc náročné...

Fantomas

Re: Java - vytvoření šachovnice

Napsal: 09 úno 2013 18:19
od faraon
Podle čeho poznáváš jestli máš světlé nebo tmavé pole? Podle sudého a lichého sloupce.
Dál potřebuješ aby sudé a liché řádky začínaly střídavě světlými a tmavými poli, tedy posunout počátek...

Co třeba zkusit číslo řádku a sloupce sečíst (dvě liché = sudá), a podle toho teprve rozhodovat jaká je barva pole?
if ((i+j)%2==1)...

A zapracuj na tom odsazování, tohle je strašně nepřehledný guláš, podle mě by to vypadalo takhle:

Kód: Vybrat vše

void start()
     {
     for (int i = 0; i <WINDOW_SIZE_X ; i=i+100)
         {
         for (int j = 1; j < WINDOW_SIZE_Y; j=j+200)
             {
             if ((i+j)%2 == 1)
                {
                Rectangle ctverec = new Rectangle(j, j, 100, 100);
                root.getChildren() .add(ctverec);
                }
             else
                {
                Rectangle ctverec = new Rectangle(j+100, i, 100, 100);
                root.getChildren() .add(ctverec);
                }
             }
         }
     }

Re: Java - vytvoření šachovnice

Napsal: 10 úno 2013 17:35
od Fantomas
Děkuji moc za odpověď. Myšlenka : i+j%2 mi nesmírně pomohla, nicméně to není úplně ještě správné řešení. Tvůj kód jsem trochu poupravil, protože mi vypisoval zase jenom černé pruhy a bílé pruhy.

Kód jsem upravil takto:

Kód: Vybrat vše

 void start()
     {
     for (int i = 0; i <WINDOW_SIZE_X ; i=i+100)
         {
         for (int j = 1; j < WINDOW_SIZE_Y; j=j+200)
             {
             if ((i+j)%2 == 1)
              {
                Rectangle ctverec = new Rectangle(j+i, i, 100, 100);
                root.getChildren() .add(ctverec);
                }
            else
                {
                Rectangle ctverec = new Rectangle(j, i, 100, 100);
                root.getChildren() .add(ctverec);
                }
             }
         }
     }


Posílám screen, co mi to vypisuje.

Myslím, že už je to na dobré cestě, nicméně stále nejsem schopen vymyslet, jak by to mělo být úplně správně...

Posílám screen, co mi to vypisuje.

Re: Java - vytvoření šachovnice

Napsal: 10 úno 2013 17:51
od faraon
To posunutí ti způsobuje new Rectangle(j+i, ne? Nech tam jenom j.

Ale tohle jsem přehlédl:

Kód: Vybrat vše

for (int i = 0; i <WINDOW_SIZE_X ; i=i+100)
    {
    for (int j = 1; j < WINDOW_SIZE_Y; j=j+200)
        {

Neměly by obě ty smyčky začínat nulou?

Re: Java - vytvoření šachovnice

Napsal: 10 úno 2013 18:05
od Fantomas
Nejspíš by opravdu měly obě smyčky začínat na nulu. Nerozumím jedné věci... tomuto:

Kód: Vybrat vše

 Rectangle ctverec = new Rectangle(j, j, 100, 100);


Proč v souřadnicích by mělo být 2x šířka? Já myslel, že když tam dosadím souřadnice j - šířka, i - výška, že to bude správně...

Ani nevím, proč jsem tam dával j+i, ale když tam zadám pouze toto:

Kód: Vybrat vše

if ((i+j)%2 == 1)
              {
                Rectangle ctverec = new Rectangle(j, i, 100, 100);
                root.getChildren() .add(ctverec);
                }
            else
                {
                Rectangle ctverec = new Rectangle(j, i, 100, 100);
                root.getChildren() .add(ctverec);
                }

tak je podmínka nesmyslná, protože pro oba případy tam je stejná věc. Co bych měl dosadit do té první podmínky?

Zatím všechny případy skončily svislými černými a bílými sloupci kromě (j+i)případu... :D

Re: Java - vytvoření šachovnice

Napsal: 10 úno 2013 18:57
od faraon
Ještě tohle by asi mělo být trochu jinak, ne?
i=i+100
j=j+200

Re: Java - vytvoření šachovnice

Napsal: 10 úno 2013 19:43
od Fantomas
no já jsem si vytvořil bílé pozadí a na to vypisuju černé čtverce. 1 čtverec má rozměr 100. V řádku tedy půjde o 200 - bude se tedy střídat černá a bílá. Ve sloupci půjde o 100 - každý řádek bude vyplněn. Proto jsem si řekl, že i = i+100 a j = j+200. Nevím, zdali je to správná úvaha, ale podle mě by měla fungovat...

Re: Java - vytvoření šachovnice

Napsal: 10 úno 2013 20:07
od faraon
Já bych bral jeden čtverec po druhém (takže po stovce), a podle toho jestli je lichý/sudý buď nakreslil černý čtverec nebo nic. Takže mi z toho vychází že ta druhá část podmínky za else tam vlastně vůbec nemá být. Leda že bys střídavě kreslil bílou a černou na nějakém jiném pozadí.

Re: Java - vytvoření šachovnice

Napsal: 10 úno 2013 22:24
od Fantomas
Aha... Tak mockrát díky, zítra se na to podívám...