Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Luokkien kommunikaatio shakissa

kpzpt [17.01.2010 09:46:26]

#

JavaShakki!

Minulla on Java Shakki peli valmistumassa, minulla ei ole koulutusta tietokoneisiin,
minua ihmetyttää Luokkien välinen keskustelu, tai, siis, kuinka olisi parasta
rakentaa seuraava tilanne ->

Minulla on Shakki pelissäni seuraavia luokkia..
public class Shakki_Alustus
public class Shakki_RuudunPiirto
public class Shakki_SiirtelyTarkistukset
public class Shakki_Muuttujat
public class Shakki_UDPSiirtely
public class Shakki_Menut

ja mahdollisesti vielä lisääkin, mutta, ei ole siis aiempaa, pikku kokeilua kummempaa kokemusta luokista,
niin, kun nuo muuttujat ovat kaikki tuolla Shakki_Muuttujat() luokassa, niin,
kuinka niitä oikea oppisesti tulee käyttää myös muissa luokissa,
mikä on se oikea virallinen ratkaisu tilanteeseen ??

Minulla juuri nyt alustetaan tuo Shakki_Muuttujat ensin, ja sitten aluste siirretään addMuuttujat() metodin avulla muihin luokkiin, onko tämä väärin ??
Shakki_SiirtelyTarkistukset.addMuuttujat ( muuttujat );

Mikä on se oikea ratkaisu muuttuja luokalle ??

//----

Kiitos,,

Daih [17.01.2010 11:29:37]

#

Nähtävästi olet tajunnut luokat väärin, sillä luokat toimivat malleina olioille ja olioilla on toiminnallisuutta ja omia tietoja.

Shakkipelissä luokat voisivat olla seuraavanlaiset:
Shakki
- Hoitaa pelin yleiset toiminnot, kuten pelin alustamisen, verkon käytön käyttäen Yhteys luokan oliota, Shakkisiirtojen kertomisesta shakkilaudalle ja siltä tulevien syötteiden luku, Valikoiden piirtäminen käyttäen Valikot luokan olioita.
Verkko
- Hoitaa verkkolikeenteen ja voi sisältää esim. seuraavanlaisen rajapinnan
-- Yhdistä, hoitaa yhdistämisen palvelimelle/toiseen pelaajaan
-- Lähetä, hoitaa viestin lähettämisen toiselle pelaajalle
-- Vastaanota, lukee saapuneet viestit puskurista
-- SuljeYhteys, sulkee yhteyden toiseen pelaajaan
Shakkilauta
- Piirtää shakkilaudan ja pitää kirjaa siirroista, rajapinta voi näyttää seuraavalta:
-- Piirra, piirtää shakkilaudan näkyviin
-- TarkistaTilanne, kertoo jos jompikumpi on voittanut
-- Siirto, tekee siirron pelilaudalle ja muuttaa oikeat arvot
-- Alusta, alustaa shakkilaudan valmiiksi peliin
Valikot
- Hoitaa valikoiden piirtämisen ja rajapinta voisi näyttää seuraavalta:
-- Piirra, piirtää valikon
-- Syote, lukee pelaajan syötteen, että tehdäänkö jotain valikoissa vai ei.

Tässä on nyt olisi pieni selitys, miten noita luokkia ehkä kannattaisi käyttää, viisaamman voivat selittää viellä lisää tästä asiasta.

kpzpt [17.01.2010 14:26:58]

#

Heh!

On selkeämpi henkilö säätämässä mitä minä, ja kenties myös hieman koulutetumpikin, hienoa !!

Minä siis en itse ihan noin hienoa listausta osaisi rakentaa,
mutta silti pidän Java peli ohjelmoinnista kovastikkin.

Tässä minulla näitä ihan rakenne alkeita..

Shakki nappien sijainnit,
nappien sijainnit täytyy löytyä listaltasi ainakin "Shakkilauta" ja "Verkko" olioista.
mitenkä olisi se oikea tapa rakentaa koodini niin,
että, nappien sijainnit sitten myös löytyvät molemmasta oliosta ??

Lisäänkö siis jonkin addMuuttujat( muuttujat ) metodin molempiin olioihin,
ja sitten alustan nämä muuttujat tuolta listasi "Shakki" perus oliosta käsin.

Tällä tavoin olen toimina tähän asti, mutta, en tiedä onko tässä se oikea tapa kaikista ??

//----

Kiitos,,

os [17.01.2010 15:28:17]

#

kpzpt kirjoitti:

muuttujat ovat kaikki tuolla Shakki_Muuttujat() luokassa, niin,
kuinka niitä oikea oppisesti tulee käyttää myös muissa luokissa,
mikä on se oikea virallinen ratkaisu tilanteeseen ??

Minulla juuri nyt alustetaan tuo Shakki_Muuttujat ensin, ja sitten aluste siirretään addMuuttujat() metodin avulla muihin luokkiin, onko tämä väärin ??
Shakki_SiirtelyTarkistukset.addMuuttujat ( muuttujat );

Mikä on se oikea ratkaisu muuttuja luokalle ??

Nyt ihan ensimmäisenä kannattaa hylätä se "muuttujaluokka". Se ei vaikuta järkevältä olio-ohjelmoinnilta. Luokkien tulisi kuvata jotakin mahdollisimman selkeitä kokonaisuuksia, jotka keskustelevat keskenään järkevällä tavalla.

Suosittelisin aloittamaan tekemällä luokan, joka kuvaa shakkipelin tilaa. Tämä shakkipeliolio sisältäisi nappuloiden paikat ja julkiset metodit shakkisiirron tekemiseen sekä tarkistamiseen. Shakkinappuloita voisi siis liikuttaa ainoastaan tämän luokan teeSiirto( Siirto s )-tyylisen metodin avulla. Tämä luokka ei sisältäisi mitään esityslogiikkaa, kuten piirtämiseen liittyvää koodia.

Eräs toinen selkeä kokonaisuus voisi olla verkko-olio, joka luo yhteyden ja välittää shakkisiirtoja ja muita hyvin määriteltyjä viestejä verkon yli. Verkkoliikenteen toteutuksesta voisi mainita, että sinulla ei pitäisi olla mitään järkevää syytä käyttää UDP:tä, joten käytä TCP:tä.

Hyvän rakenteen suunnitteluun kannataa käytää aikaa. Tässä pari hyödyllistä rakennuspalikkaa:
http://en.wikipedia.org/wiki/Model–view–controller
http://en.wikipedia.org/wiki/Observer_pattern

hk [24.01.2010 19:01:56]

#

kpzpt kirjoitti:

Minulla juuri nyt alustetaan tuo Shakki_Muuttujat ensin, ja sitten aluste siirretään addMuuttujat() metodin avulla muihin luokkiin, onko tämä väärin ??

Shakki nappien sijainnit,
nappien sijainnit täytyy löytyä listaltasi ainakin "Shakkilauta" ja "Verkko" olioista. mitenkä olisi se oikea tapa rakentaa koodini niin,
että, nappien sijainnit sitten myös löytyvät molemmasta oliosta ??

Olio-ohjelmointi tai Javalla ohjelmointi ei ole oikein lainkaan tuollaista kuin kuvailet. Jotkut kirjoittamasi jutut eivät ole edes mahdollisia, tai sitten tarkoitat muuta kuin kirjoitat.

Nyt sinun kannattaisi lukea ensin vähän matkaa jotain Java-opasta, niin näet millaista on Java-koodi, ja mitä nuo luokat ja metodit oikeasti ovat. Sitä ne eivät ole, mitä nyt olet ajatellut. "Normaalit" oliot eivät keskustele mitenkään, vaan ne sisältävät tietoa ja välineet tiedon lukemiseen ja muokkaamiseen, minkä tekee siis joku muu kuin olio itse. Tarkoitan sellaisia olioita kuin vaikka shakkilaudan tilaa kuvaava olio. Toki esim. graafisen käyttöliittymän sisältämä olio voi klikkauksen seurauksena muuttaa jonkin toisen olion tilaa. Yleisesti ottaen on siis olemassa myös olioiden välistä tiedonsiirtoa, mutta enemmänkin metodit keskustelevat, sillä ne välittävät toisilleen tietoa parametreina ja paluuarvoina.

Itse shakkilaudan hoitamisesta selviät, jos ymmärrät mikä on olio. Toki jos koneen tulee itse pelata ihmistä vastaan, niin siihen tarvitaan jo sellaista tietoa, jota ei jokaisella ole, ja kohtuullisesti pelaava shakkiohjelma on myös tavattoman iso. Mutta jos haluat toteuttaa graafisen käyttöliittymän tai jotain verkkokommunikaatiota, niin sitten pitää oliot opiskella paremmin ja ymmärtää periytyminen, rajapinnat ym. ja opiskella melkoinen määrä Javan luokkia, joilla nuo asiat tehdään.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta