Class MujDialog

Class MujDialog

java.lang.Object
   |
   +----java.awt.Component
           |
           +----java.awt.Container
                   |
                   +----java.awt.Panel
                           |
                           +----java.applet.Applet
                                   |
                                   +----MujDialog

public class MujDialog
extends Applet

Variable Index

 o DEFAULT_PORT
Port, na kterém applet hledá spojení
 o deska
deska obsahující políčka šachovnice
 o kam
index pole, na nějž vede aktuální tah
 o konec
semafor, hlídající ukončení hry
 o l
informační text
 o lista
Horní informační lišta
 o natahu
Obsahuje znak 'b' nebo 'c', podle toho, která strana je na tahu.
 o odkud
obsahuje index pole, odkud vede aktuální tah
 o pole
pole panelů, tvořící šachovnici
 o port
 o posledni_tah
globální proměnná, obsahující nejaktuálnější tah ()společná pro obě strany
 o quit
ovládací tlačítka dolní lišty
 o s
 o sin
vstupní proud TCP/IP spojení
 o sout
výstupní proud TCP/IP spojení
 o start
Semafor, zaručující správnou inicializaci appletu
 o znacka_natahu
Panel s barevnou značkou táhnoucí strany
 o znovu
ovládací tlačítka dolní lišty

Constructor Index

 o MujDialog()

Method Index

 o action(Event, Object)
Kontroluje stisk tlačítek v dolní lište.
 o Cislo2kod(int)
Převádí pořadové číslo políčka na dvouznakový řetězec písmenko-číslice
 o ComputerMove(String)
Tato metoda provede tah počítače.
 o DalsiTah()
Přehodí znak v globální proměnné natahu a překreslí barevný symbol v horní liště.
 o DavejBer(String)
Hlavní metoda pro komunikaci.
 o init()
Inicializace appletu: nejprve se načtou obrázky všech figurek a uloží se do statického pole obrázků třídy Figura.
 o init_desky()
Nastaví hrací desku do počáteční polohy.
 o Kod2cislo(String)
Převádí kód písmenko-číslice na pořadové číslo políčka
 o mouseDown(Event, int, int)
Hlavní procedura celého programu.
 o NovaHra()
Pošle serveru signál k zahájení nové hry a pak nastaví hrací desku do úvodní pozice
 o paint(Graphics)
Předefinuje metodu Paint a tak zaručí počáteční vykreslení všech figurek.
 o PopisDesku()
Obnoví vykreslení všech figur na desce tím, že volá metodu PopisPole pro každé políčko šachovnice.
 o PresunFiguru(int, int)
Přesune obsah políčka s indexem odkud na políčko s indexem kam a obě pole překreslí metodou PopisPole()
 o Quit()
Ukončuje celou hru.

Variables

 o odkud
  protected static int odkud
obsahuje index pole, odkud vede aktuální tah
 o kam
  protected static int kam
index pole, na nějž vede aktuální tah
 o konec
  protected static int konec
semafor, hlídající ukončení hry
 o DEFAULT_PORT
  public final static int DEFAULT_PORT
Port, na kterém applet hledá spojení
 o natahu
  protected char natahu
Obsahuje znak 'b' nebo 'c', podle toho, která strana je na tahu.
 o pole
  protected Pole pole[]
pole panelů, tvořící šachovnici
 o deska
  protected Panel deska
deska obsahující políčka šachovnice
 o lista
  protected Panel lista
Horní informační lišta
 o znacka_natahu
  protected Panel znacka_natahu
Panel s barevnou značkou táhnoucí strany
 o l
  protected Label l
informační text
 o znovu
  protected Button znovu
ovládací tlačítka dolní lišty
 o quit
  protected Button quit
ovládací tlačítka dolní lišty
 o posledni_tah
  protected String posledni_tah
globální proměnná, obsahující nejaktuálnější tah ()společná pro obě strany
 o start
  protected boolean start
Semafor, zaručující správnou inicializaci appletu
 o port
  public int port
 o s
  public Socket s
 o sin
  public InputStream sin
vstupní proud TCP/IP spojení
 o sout
  public OutputStream sout
výstupní proud TCP/IP spojení

Constructors

 o MujDialog
  public MujDialog()

Methods

 o init
  public void init() throws UnknownHostException, IOException
Inicializace appletu: nejprve se načtou obrázky všech figurek a uloží se do statického pole obrázků třídy Figura. Potom se otevře TCP/IP konekce na zadaný počítač - v případě, že spojení není možné navázet, vyhodí se výjimka IOException: Connection refused, pokud je chybně zadané jméno vzdáleného počítače, vyhodí se výjimka UnknownHostException. Potom se určí rozvržení komponent: Celý applet má správce BorderLayout (dvě nástrojové lišty nahoře a dole, panel šachovnice uprostřed), lišty jsou rozvrženy pomocí FlowLayout. Šachovnice má rozvržení GridLayout a je tvořena šedesáti čtyřmi objekti typu Pole, odvozeného od Canvas. V další části se pomocí zbytkového dělení nastavují barvy jednotlivých políček a jejich korektní střídání. Úplně nakonec je zavolána metoda InitDesky(), která zaplní pole šachovnice figurami.
Overrides:
init in class Applet
 o PopisDesku
  public void PopisDesku()
Obnoví vykreslení všech figur na desce tím, že volá metodu PopisPole pro každé políčko šachovnice.
 o init_desky
  public void init_desky()
Nastaví hrací desku do počáteční polohy. Do položek figura třídy pole umístí objekty typu figura odpovídajícího typu a barvy. Nakonec zavolá pro všechny prázdná políčka metodu Figura() bez parametrů, čímž zaručí jejich inicializaci na "prázdné" figurky.
 o paint
  public void paint(Graphics g)
Předefinuje metodu Paint a tak zaručí počáteční vykreslení všech figurek. Provede se jen jednou při startu (zaručuje nastavení semaforu start) aby nedocházelo ke zbytečně častému překreslování všech políček.
Overrides:
paint in class Component
 o mouseDown
  public boolean mouseDown(Event event,
                           int x,
                           int y) throws IOException
Hlavní procedura celého programu. Přijímá vstup hráčova tahu a zajišťuje jeho zpracování. @param event objekt který událost vyslal Pokud je odkud==-1, je tah na začátku. Zkontroluje se, jestli je na poli figura a nastaví se proměnná odkud. V další fázi se zadává "kam". Jakmile je určeno, odkud kam má zamýšlený tah vést, převedou se indexy políček na kódy písmeno-číslo pomocí metody Cislo2kod(). Naplní se proměnná posledni_tah a odešle se procedurou DavejBer() šachovému programu. Tato metoda vrátí řetězec, který obsahuje buď tah počítače, nebo kód "Chyb", který označuje nepovolený tah, nebo kódy ukončení hry "bwin" a "wwin". V případě vráceného tahu se přesune hráčova figura a metodou ComputerMove() se provede tah počítače. V případě, že hráč zadal chybný tah, zobrazí text v horní liště chybové hlášení a tah se ignoruje. Pokud šachový program vrátí příznak ukončení hry, se odpovídajícím způsobem nastaví informační text. Pokud ovšem vyhrál počítač, je třeba získat od programu krom hlášení o vítězství i informaci o jeho posledním tahu. Proto applet pošle serveru kontrolní kód "mat?", který server přinutí zopakovat poslední tah a zaslat jej apletu.
Overrides:
mouseDown in class Component
See Also:
Cislo2kod, DavejBer, PresunFiguru, ComputerMove
 o Cislo2kod
  public String Cislo2kod(int index)
Převádí pořadové číslo políčka na dvouznakový řetězec písmenko-číslice
Parameters:
index - pořadové číslo políčka 0..63
Returns:
s Dvouznakový kód políčka: a..h, 1..8
 o Kod2cislo
  public int Kod2cislo(String kod)
Převádí kód písmenko-číslice na pořadové číslo políčka
Parameters:
kod - dvouznakový řetězec a..h, 1..8
Returns:
s číselný kód políčka 0..63
 o PresunFiguru
  public void PresunFiguru(int odkud,
                           int kam)
Přesune obsah políčka s indexem odkud na políčko s indexem kam a obě pole překreslí metodou PopisPole()
Parameters:
odkud - pořadové číslo políčka, odkud tah vede
kam - pořadové číslo políčka, kam tah vede
See Also:
PopisPole
 o DalsiTah
  public void DalsiTah()
Přehodí znak v globální proměnné natahu a překreslí barevný symbol v horní liště.
 o action
  public boolean action(Event event,
                        Object arg) throws IOException
Kontroluje stisk tlačítek v dolní lište. Tlačítko "Znovu" je funkční pouze pokud není proměnná konec nastavena na 1, což symbolizuje ukončení partie a znamení, že server už neběží. Tlačítko znovu volá metodu NovaHra(), tlačítko quit metodu Quit()
Parameters:
event - objekt, kterého se událost týká
Overrides:
action in class Component
See Also:
NovaHra, Quit
 o Quit
  public void Quit() throws IOException
Ukončuje celou hru. Pošle serveru kód "quit", na který server zareaguje uzavřením spojení a ukončením šachového programu i sebe. Applet potom ještě vynuluje hrací desku a nastaví proměnnou konec, aby nemohlo dojít k chybě při pokusu o opětovné nastartování hry
See Also:
NovaHra
 o NovaHra
  public void NovaHra() throws IOException
Pošle serveru signál k zahájení nové hry a pak nastaví hrací desku do úvodní pozice
 o ComputerMove
  public void ComputerMove(String tah)
Tato metoda provede tah počítače. Přijímá čtyřbajtový kód tahu, který rozebere, převede na indexy políček a přesune figuru.
Parameters:
tah - Čtyřznakový kód tahu ve formě písmenko-číslo-písmenko-číslo
See Also:
Kod2cislo, PresunFiguru
 o DavejBer
  public String DavejBer(String tah) throws IOException
Hlavní metoda pro komunikaci. Posílá a přijímá čtyřznakové kódy akcí. Vlastní komunikaci realizuje pomocí nízkoúrovňových metod read a write tříd InputStream a OutputStream
Parameters:
tah - čtyřznakový řetězec, obsahující kód akce nebo hráčův tah
Returns:
s čtyřznakový řetězec, obsahující odezvu serveru.