Diskuze: Vykreslovanie
Zajímavé...takže zkusím za tebe popsat funčknost programu, protože jsi nepopsal, co vlastně děláš a navíc když pošleš ústřižky některých tříd, které používají jiné třídy, ke kterým nemáme přístup, tak ani nemůžu ve vlastním IDEčku zkusit, co ti to (ne)dělá atd.
- Takže předpokládám že třída Semestralka je hlavní třída programu, která vytvoří nějaký JFrame a který předá hře (což je vcelku dost divné, proč už sama třída neobsahuje nějaký frame?)
- Třída ObrazkyKariet napovídá, že pracuješ s kartama. Tam ti trošku
upřesním smysl volání atributů instance slovíčkem this. Příkaz "this"
používáš hlavně ve dvou případech.
- pokud má instance stejný název atributu jako název parametru v metodě/konstruktoru. Např.:
public class Ukazka{
private int cislo;
public Ukazka(int cislo){
this.cislo = cislo;
}
}
V tomto případě je this povinné, neboť vynecháš-li jej, tak se v
konstruktoru jeho číselný parametr
naplní tím samým parametrem (což i chytřejší IDEčka hlásí jako
nesmysl).
b) pokud chceš použít v nějaké části kódu tuto samou instanci, jako
parametr
public class Ukazka implements Runnable{
private Thread vlakno;
public void run(){
//vlákno
}
public void start(){
if(vlakno == null || !vlakno.isAlive()){
vlakno = new Thread(this);
vlakno.start();
}
}
}
Ve tvém případě nemusíš (kromě atributů x a y) this používat,
vypadá to blbě, zavádí to a je to
zbytečné. Jinak (to si osobně myslím) máš pěkně ošetřený případ,
pokud nebudeš mít k dispozici
obrázky karet ve stejném adresáři tím, že nastavuješ pozadí na červeno.
Aspoň se něco zobrazí. Dobrá
práce;).
- Trošku nechápu, že nastavuješ rozměry karty na (400, 300) a rozměry obrázku na (200, 270). Má to nějaký význam?
- Ve třídě Hra nastavuješ dva hráče (dvě třídy Postava) a pak vytváříš dva stoly a ke každému stolu přidáváš jednoho hráče.... Není to trošku proti logice? proč neposadíš oba hráče k jednomu stolu?:D
- CO TAM DĚLAJÍ TY METODY!!!!!!!!!!!!! proč třeba metodu hrac1VyhodKartu(int i) umí třída Hra???? neměl by to umět Hráč? nic jiného říct nemůžu, ale fuj fuj fuj
Takže nejdřív vyhoď všechna this, kde nejsou potřeba, toto ukázat zkušenému prokramátorovi, tak ti liští. Za další komentáře - máš tam 4 dokumentační komentáře, ale ty ti vygenerovalo IDEčko a pak na konci zakomentované dva řádky při testování. To je chyba. Za další trošku aspoň popiš, co děláš za projekt nebo aspoň jakou funkci teď ladíš. Z tvého kódu fakt nejde moc dedukovat, co vlastně chceš. Pak je těžké i hledat exceptiony.
Osobně si myslím, jestli je to o tom, že máš třeba poker a teď děláš tu část, že se hráčům rozdají karty a oni je ukazují na konci hry, tak bys to mohl udělat spíš tak, že každý hráč by měl metody, které umí teď třída Hra a sám by si je volal. Samotná třída hra by už jen rozdala karty, vytvořila nějaký frame, počítala skóre případně vyhodnocovala vítěze a ovládala hráče.
Rada na závěr: Vždycky, když vytvoříš nějakou třídu, zkus ji přesunout do jiného balíku či projektu (například vytvoříš-li třídu hráče, tak ho zkus použít v jiném framu) a otestuj ho, jestli funguje jak má. Jestli ano, tak máš jistotu že programuješ objektově a že objekt dělá co má. Z tvého kódu jde jasně vidět, že třída Hrac je nezbytně závislá na třídě Hra. Což je hnus.
PS: je vcelku šikovné, když používáš obrázky ve více třídách, tak si udělat singletona, který karty vykreslí případně mění. Je to efektivní, neopakuješ furt samý kód dokola, neděláš zbytečně x stejných instancí a hlavně singleton je příjemný pomocník;)
+20 Zkušeností
+2,50 Kč
Zobrazeno 2 zpráv z 2.