Java - vytvoření šachovnice

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Fantomas
Level 2
Level 2
Příspěvky: 163
Registrován: říjen 12
Pohlaví: Muž
Stav:
Offline

Java - vytvoření šachovnice

Příspěvekod Fantomas » 09 úno 2013 16:19

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

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Java - vytvoření šachovnice

Příspěvekod faraon » 09 úno 2013 18:19

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);
                }
             }
         }
     }
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Fantomas
Level 2
Level 2
Příspěvky: 163
Registrován: říjen 12
Pohlaví: Muž
Stav:
Offline

Re: Java - vytvoření šachovnice

Příspěvekod Fantomas » 10 úno 2013 17:35

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.
Přílohy
šachovnice_java.png

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Java - vytvoření šachovnice

Příspěvekod faraon » 10 úno 2013 17:51

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?
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Fantomas
Level 2
Level 2
Příspěvky: 163
Registrován: říjen 12
Pohlaví: Muž
Stav:
Offline

Re: Java - vytvoření šachovnice

Příspěvekod Fantomas » 10 úno 2013 18:05

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

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Java - vytvoření šachovnice

Příspěvekod faraon » 10 úno 2013 18:57

Ještě tohle by asi mělo být trochu jinak, ne?
i=i+100
j=j+200
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Fantomas
Level 2
Level 2
Příspěvky: 163
Registrován: říjen 12
Pohlaví: Muž
Stav:
Offline

Re: Java - vytvoření šachovnice

Příspěvekod Fantomas » 10 úno 2013 19:43

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...

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Java - vytvoření šachovnice

Příspěvekod faraon » 10 úno 2013 20:07

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í.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Fantomas
Level 2
Level 2
Příspěvky: 163
Registrován: říjen 12
Pohlaví: Muž
Stav:
Offline

Re: Java - vytvoření šachovnice

Příspěvekod Fantomas » 10 úno 2013 22:24

Aha... Tak mockrát díky, zítra se na to podívám...


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Ruční vytvoření spouštěcího oddílu na SSD
    od Haalf » 23 pro 2024 11:08 » v Windows 11, 10, 8...
    8
    3618
    od pcmaker Zobrazit poslední příspěvek
    23 pro 2024 17:26

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti