| | |
| Stránka: 1 z 1
| [ Príspevkov: 3 ] | |
Autor | Správa |
---|
Registrovaný: 04.01.10 Prihlásený: 13.03.12 Príspevky: 8 Témy: 5 |
Mám vytvorene dve polia kamenov... su typu Kruh. kruh je trieda, ktoru naprogramoval ucitel.
v tych posunoch v sachovnici som sa snazil o to, aby sa suradnice preniesli s kamenom... kamenmi v hre sa hybe tak, ze sa zadaju parametre, kde sa nachadza... momentalne sa tym istym kamenom da pohnut len s pouzitim povodnych suradnic...
Neviem, ako vynulovat povodnu poziciu ani ako ju prepisat...
Za kazdu pomoc budem vdacny.
Sachovnica:
Kód: /** * Sachovnica. * * @author (M!ro) * @version (2.0) */ public class Sachovnica { private int aSirka; private int aVyska; private Kruh aKamen; Kruh [][] kameneHnede; Kruh [][] kameneBiele; /** * Vytvorí šachovnicu pre hru Dama. * Zadajte vysku a sirku podla poctu poli. * Vytvori 2 polia kamenov. */ public Sachovnica(int paSirka, int paVyska) { aSirka = paSirka; aVyska = paVyska; aKamen = new Kruh(); kameneHnede = new Kruh[8][8]; for (int i = 0; i < paSirka; i++) { for (int j = 0; j < paVyska; j++){ kameneHnede[i][j] = new Kruh(); kameneHnede[i][j].zmenPriemer(40); kameneHnede[i][j].zmenFarbu("brown"); } } kameneBiele = new Kruh[8][8]; for(int i = 0; i < paSirka; i++){ for (int j = 0; j < paVyska; j++) { kameneBiele[i][j] = new Kruh(); kameneBiele[i][j].zmenPriemer(40); kameneBiele[i][j].zmenFarbu("white"); } } Obdlznik obrys; obrys = new Obdlznik(); obrys.zmenFarbu("black"); obrys.zmenStrany( (aSirka*60+20) , (aVyska*60+20) ); obrys.zobraz(); obrys = new Obdlznik(); obrys.zmenFarbu("white"); obrys.posunVodorovne(5); obrys.posunZvisle(5); obrys.zmenStrany( (aSirka*60+10) , (aVyska*60+10) ); obrys.zobraz(); obrys = new Obdlznik(); obrys.zmenFarbu("black"); obrys.posunVodorovne(9); obrys.posunZvisle(9); obrys.zmenStrany( (aSirka*60+2) , (aVyska*60+2) ); obrys.zobraz(); for(int i = 0; i < aSirka; i++) { for (int j = 0; j < aVyska; j++) { Stvorec stvorcek = new Stvorec(); stvorcek.posunVodorovne(60*i); stvorcek.posunZvisle(60*j); if(j%2 != i%2){ stvorcek.zmenFarbu("black"); } else { stvorcek.zmenFarbu("white"); } stvorcek.zobraz(); } } } public void zobrazHnede(int paX, int paY) { kameneHnede[paX][paY].posunVodorovne(60*paX); kameneHnede[paX][paY].posunZvisle(60*paY); kameneHnede[paX][paY].zobraz(); } public void zobrazBiele(int paX, int paY) { kameneBiele[paX][paY].posunVodorovne(60*paX); kameneBiele[paX][paY].posunZvisle(60*paY); kameneBiele[paX][paY].zobraz(); } public void posunHnedeVpravo(int paX, int paY) { if ((paX + 1) < aSirka) { kameneHnede[paX][paY].pomalyPosunVodorovne(60); kameneHnede[paX+1][paY] = kameneHnede[paX][paY]; } else { System.out.println("Nespravny Tah!"); } } public void posunHnedeVlavo(int paX, int paY) { if ((paX - 1) >= 0) { kameneHnede[paX][paY].pomalyPosunVodorovne(-60); kameneHnede[paX-1][paY] = kameneHnede[paX][paY]; } else { System.out.println("Nespravny Tah!"); } } public void posunBieleVpravo(int paX, int paY) { if ((paX + 1) < aSirka) { kameneBiele[paX][paY].pomalyPosunVodorovne(60); kameneBiele[paX+1][paY] = kameneBiele[paX][paY]; } else { System.out.println("Nespravny Tah!"); } } public void posunBieleVlavo(int paX, int paY) { if ((paX - 1) >= 0) { kameneBiele[paX][paY].pomalyPosunVodorovne(-60); kameneBiele[paX-1][paY] = kameneBiele[paX][paY]; } else { System.out.println("Nespravny Tah!"); } } public void posunHnedeDolu(int paX, int paY) { if ((paY + 1) < aVyska) { kameneHnede[paX][paY].pomalyPosunZvisle(60); kameneHnede[paX][paY+1] = kameneHnede[paX][paY]; } else { System.out.println("Nespravny Tah!"); } } public void posunBieleHore(int paX, int paY) { if ((paY - 1) >= 0) { kameneBiele[paX][paY].pomalyPosunZvisle(-60); kameneBiele[paX][paY-1] = kameneBiele[paX][paY]; } else { System.out.println("Nespravny Tah!"); } } }
Hlavny program: Kód: /** * Dama. * Hra pre 2 hracov.. * * @author (M!ro) * @version (1.0) */ public class Dama2 { private int aSachovnicaX; private int aSachovnicaY; private Sachovnica aSachovnica; private String aPrvyHrac; private String aDruhyHrac; private String aTahajuci; int[][] poleHodnot; /** * Konstruktor vytvori hru dama. * Zadajte, prosim, mena dvoch hracov. * Mena hracov nemozu byt rovnake. * Mena hracov zadavajte v uvodzovkach. */ public Dama2(String paMenoPrveho, String paMenoDruheho) { aSachovnicaX = 8; aSachovnicaY = 8; aSachovnica = new Sachovnica(aSachovnicaX, aSachovnicaY); poleHodnot = new int[8][8]; aPrvyHrac = paMenoPrveho; aDruhyHrac = paMenoDruheho; aTahajuci = aPrvyHrac; System.out.println("Na tahu je hrac "+aTahajuci+" s Bielymi figurkami"); if (aPrvyHrac != aDruhyHrac) { this.poleHodnot(); this.Kamene(); } else { System.out.println("Mena hracov su rovnake. Zmente, prosim, meno aspom jednohe hraca"); } } /** * Naplni poleHodnot hodnotami 0,1,2. */ private void poleHodnot() { for (int i = 0; i < aSachovnicaX; i++) { for (int j = 0; j < aSachovnicaY; j++){ poleHodnot[i][j] = 0; } } for (int i = 0; i < aSachovnicaX; i++) { for (int j = 0; j < 2; j++) { if (i % 2 != j % 2) { poleHodnot[i][j] = 1; } } } for (int i = 0; i < aSachovnicaX; i++) { for (int j = aSachovnicaY - 2; j < aSachovnicaY; j++) { if (i % 2 != j % 2) { poleHodnot[i][j] = 2; } } } } /** * Pomocou pola hodnot naplni sachovnicu kamenmi. * Pole s hodnotou 1 naplni hnedym kamenom. * Pole s hodnotou 2 naplni bielym kamenom. * Pole s hodnotou 0 ostava prazdne. */ private void Kamene() { for (int i = 0; i < aSachovnicaX; i++) { for (int j = 0; j < aSachovnicaY; j++) { if (poleHodnot[i][j] == 1) { aSachovnica.zobrazHnede(i,j); } else { if (poleHodnot[i][j] == 2) { aSachovnica.zobrazBiele(i,j); } } } } } /** * Zadajte suradnice kamena, ktorym chcete pohnut. * Kamen sa neda posunut za hranice sachovnice. * Metoda overi, ci je na koncovom poli prekázka. * Rozozna prekazku a zareaguje podla pravidiel damy. */ public void tahVpravo(int paX, int paY) { if (aTahajuci.equals(aPrvyHrac)) { if (poleHodnot[paX+1][paY-1] == 2) { System.out.println("Nesprávny Tah!"); } else { if (poleHodnot[paX+1][paY-1] == 1) { aSachovnica.posunBieleVpravo(paX, paY); aSachovnica.posunBieleVpravo(paX, paY); aSachovnica.posunBieleHore(paX, paY); aSachovnica.posunBieleHore(paX, paY); poleHodnot[paX][paY] = 0; poleHodnot[paX+1][paY-1] = 0; poleHodnot[paX+2][paY-2] = 2; } else { aSachovnica.posunBieleVpravo(paX, paY); aSachovnica.posunBieleHore(paX, paY); poleHodnot[paX][paY] = 0; poleHodnot[paX+1][paY-1] = 2; } } } else { if (poleHodnot[paX+1][paY+1] == 1) { System.out.println("Nesprávny Tah!"); } else { if (poleHodnot[paX+1][paY+1] == 2) { aSachovnica.posunHnedeVpravo(paX, paY);; aSachovnica.posunHnedeVpravo(paX, paY); aSachovnica.posunHnedeDolu(paX, paY); aSachovnica.posunHnedeDolu(paX, paY); poleHodnot[paX][paY] = 0; poleHodnot[paX+1][paY+1] = 0; poleHodnot[paX+2][paY+2] = 2; } else { aSachovnica.posunHnedeVpravo(paX, paY); aSachovnica.posunHnedeDolu(paX, paY); poleHodnot[paX][paY] = 0; poleHodnot[paX+1][paY+1] = 1; } } } this.overVyhru(); } /** * Zadajte suradnice kamena, ktorym chcete pohnut. * Kamen sa neda posunut za hranice sachovnice. * Metoda overi, ci je na koncovom poli prekázka. * Rozozna prekazku a zareaguje podla pravidiel damy. */ public void tahVlavo(int paX, int paY) { if (aTahajuci.equals(aPrvyHrac)) { if (poleHodnot[paX-1][paY-1] == 2) { System.out.println("Nesprávny Tah!"); } else { if (poleHodnot[paX-1][paY-1] == 1) { aSachovnica.posunBieleVlavo(paX, paY); aSachovnica.posunBieleVlavo(paX, paY); aSachovnica.posunBieleHore(paX, paY); aSachovnica.posunBieleHore(paX, paY); poleHodnot[paX][paY] = 0; poleHodnot[paX-1][paY-1] = 0; poleHodnot[paX-2][paY-2] = 2; } else { aSachovnica.posunBieleVlavo(paX, paY); aSachovnica.posunBieleHore(paX, paY); poleHodnot[paX][paY] = 0; poleHodnot[paX-1][paY-1] = 2; } } } else { if (poleHodnot[paX-1][paY+1] == 1) { System.out.println("Nesprávny Tah!"); } else { if (poleHodnot[paX-1][paY+1] == 2) { aSachovnica.posunHnedeVlavo(paX, paY);; aSachovnica.posunHnedeVlavo(paX, paY); aSachovnica.posunHnedeDolu(paX, paY); aSachovnica.posunHnedeDolu(paX, paY); poleHodnot[paX][paY] = 0; poleHodnot[paX-1][paY+1] = 0; poleHodnot[paX-2][paY+2] = 1; } else { aSachovnica.posunHnedeVlavo(paX, paY); aSachovnica.posunHnedeDolu(paX, paY); poleHodnot[paX][paY] = 0; poleHodnot[paX-1][paY+1] = 1; } } } this.overVyhru(); } private void overVyhru() { if (aTahajuci.equals(aDruhyHrac)) { aTahajuci = aPrvyHrac; } else { aTahajuci = aDruhyHrac; } System.out.println("Na tahu je "+aTahajuci); } }
|
|
Registrovaný: 25.03.08 Prihlásený: 07.02.10 Príspevky: 72 Témy: 9 |
Zdravim,
Neviem ci je to celkom spravne analyzovane...
Skus to urobit tak, ze zavedies abstraktnu triedu figurka a od nej nadedis triedy pesiak a dama (implementuju si metody napriklad chod, skac atd..). Kazda bude mat atribut ci je biela alebo cierna, kde stoji atd..
Potom bude sachovnicu reprezentovat pole figurok, teda vyuzijes polymorfizmus. Tam kde nebude figurka bude NULL, tam kde bude sa vytvori pomocou svojho konstruktora. Sachovnica sa vykresli (ako zalezi na teba) . Pri pohybe sa figurka premiestni na inu cast matice a tam kde stala bude NULL.
Ja som raz ako zadanie programoval takyto jednoduchy sach, kde som tiez vyuzil polymorfizmus..myslim ze to je ta spravna cesta.
http://www.danciwo.net/programView.aspx?prog_id=53&lang_id=1&cat_id=4
_________________ I am sorry, did I break your concentration? |
|
Registrovaný: 04.04.08 Prihlásený: 19.05.15 Príspevky: 424 Témy: 75 |
kedze uviedol aj zdrojovy kod, kde vidiet ze do OOP sa akurat dostava, tak ist na neho s abstraktnou triedou, polymorfizmom, je podla mna vela...
co presne chces vynulovat...prepisujes premennu a ti neprepisu povodnu hodnotu novou? alebo ako?
_________________ Notebook: Fujitsu Siemens AMILO Xi2550, 17" WUXGA (1920x1200), Intel Core2Duo T9300 (2,5 GHz), 3GB DDR2 667 MHz, 2x320 GB HDD (RAID 0), ATI Radeon HD2700 (256MB GDDR3) |
|
| Stránka: 1 z 1
| [ Príspevkov: 3 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|