Java programozás - Szoftverfejlesztés fórum

üzenetek

hozzászólások


andriscs
(aktív tag)

Hi!

Kicsit átírtam a kódot, hogy világosabb legyen, tettem bele megjegyzéseket. Természtesen értem, ogy mit csinála kód, a látszólagos kuszasága ellenére eléggé szimpla kód, csak sokat ismétlődik, apróbb változásokkal. Szóval a koncepció az, hogy minden kattintás után a függvény végigfut a tömbelemeken, ls megvizsgálja, hogy van-e valamelyik irányban 4 egyforma jel. A lényeg (tehát a keresés) mindenhol ugyanaz, csak az irány változik, szóval lényegében 8x fut le ugyanaz a kód, nagyon minimális eltéréssel. Ami a for ciklusok feltételeit illeti, az azért annyira bonyolult, mert ugye nem léphetek túl a tömb határain, tehát pl. az 1,1 elemtől nem tudok 4-et balra menni, mert az már kilépne a tömbből. Tehát biztonsági intézkedések miatt van a hosszfigyelés. Ha még valami nem tiszta, akkor magyarázok, de itt az új kód (ez már csak max. 4 egyforma elemet talál):

public boolean searchEngine() //need to check
{

for(col=0;col<size;col++) //oszlopokon lépked
{
for(row=0;row<size;row++) //sorokon lépked
{
for(int count=1;row+count<game.length && count<4;count++) //soron jobbra
{ //ameddig nem éri
if (game[row+count][col]==(game[row][col])) //el a tömb szélét v. 4 jelet
{
clone1++; //ha van egyforma, növeli
if (clone1==3) return true; //min. 3 kell, hogy összesen 4 legyen
}
else clone1=0; //ha nincs egyforma, nullázza a számlálót
}
for(int count=1;row-count>-1 && count<4;count++){ //elemtől balra megy
if (game[row-count][col]==(game[row][col])) //stb...
{
clone2++;
if (clone2==3) return true;
}
else clone2=0;
}
for(int count=1;col+count<game.length && count<4;count++)
{
if (game[row][col+count]==(game[row][col]))
{
clone3++;
if (clone3==3) return true;
}
else clone3=0;
}
for(int count=1;col-count>-1 && count<4;count++)
{
if (game[row][col-count]==(game[row][col])) {
clone4++;
if (clone4==3) return true;}
else clone4=0;
}
for(int count=1;(row+count<game.length) && (col+count<game.length) && count<4;count++)
{
if (game[row+count][col+count]==(game[row][col]))
{
clone5++;
if (clone5==3) return true;}
else clone5=0;
}
for(int count=1;(row-count>-1) && (col-count>-1) && count<4;count++)
{
if (game[row-count][col-count]==(game[row][col])) {
clone6++;
if (clone6==3) return true;}
else clone6=0;
}
for(int count=1;(row+count<game.length)&& (col-count>-1) && count<4;count++)
{
if (game[row+count][col-count]==(game[row][col]))
{
clone7++;
if (clone7==3) return true;}
else clone7=0;
}
for(int count=1;(row-count>-1) && (col+count<game.length) && count<4;count++)
{
if (game[row-count][col+count]==(game[row][col]))
{
clone8++;
if (clone8==3) return true;}
else clone8=0;
}
}
}

return false;
}


Kr1xX
(csendes tag)

http://sztyan.uw.hu/Andris.rar


Kr1xX
(csendes tag)

Annyi hozzáfűznivalóm van, hogy tiszta lappal indultam, mert nekem úgy könnyebb. Egy 10x10-es integer mátrixban keres egymás mellett 4 ugyan olyan számot, és ha talál, akkor azt írja ki a konzolra, hogy talált, egyébként, hogy nem. Még annyi megjegyzés, hogy felesleges pl vízszintnél jobbról + balról viszgálgatni, mert ha balról jobbra haladva találunk egymás mellet 4 ugyanolyan értéket, akkor nyílván jobbról balrahaladva is :). Ugyanez igaz a többi irányra. Tesztelgessed, állítsd át a mátrix értékeit kölönböző helyeket azonos értékűre, és kerestesd meg vele. Nekem műxött. Próbáld értelmezni a kódot, hátha tudtam segíteni...


andriscs
(aktív tag)

Hi!

Csak most olvastam, hogy válaszoltál, ezért lehet, hogy így éjjel nem látom át tisztán, de nagyon köszönöm a segítséget, örülök, hogy vannak ilyen segítőkész emberek. Remélem, hogy nálam is működni fog!


andriscs
(aktív tag)

Hi!

Nem tudtam megállni, és teszteltem, úgy néz ki működik. Ahogy átnéztem a kódodat, rájöttem, hogy az enyém túlságosan körülményes, a tied viszont lényegretörő. Az egyik tanáromnak is írtam már, aki azt ajánlotta, hogy vigyázzak, mivel én String tömben tárolom a dolgokat, és a sima == csak referencia, inkább használjak equals() tagfüggvényt, mert az ő szavaival élve a ''programom egy időzített bomba''. Remélem, hogy azzal már rendesen működni fog, most már csak egy alap mesterséges intelligencia kell bele, aztán mehet a dolog.
Apró megjegyzés, hogy rájöttem (mivel ma tanultuk :) ), hogy hogyan lehet képet betölteni (kicsit eltér az Applet-ek képbetöltésétől): Szóval valahogy így kell:
Image img=Toolkit.getDefaultToolkit().getImage(''kep.jpg'');
utána pedig paint()-ben g.drawImage(img,0,0,this). Apró szépséghiba, hogy a kép nem jelenik meg. Vajon miért nem? Add metódus nincs képekhez, requestFocus() nem kell neki, tehát elvileg már látnom kellene a képet. De mégsem látok semmit. Ötlet?


andriscs
(aktív tag)

Hi!

Nem akarom elvenni a kedved, hogy újra átnézd, de ezt is be lehet csapni, mert sikerült olyasmiket csinálnom, aminél elfogadta megoldásnak. Pl itt nincs sehol 4 hosszú sor, mégis nyert az 'O' játékos:


andriscs
(aktív tag)

Hi!

Most megtettem azt, hogy String helyett int tömböt használok, most viszont nem mindig találja meg az átlókat a program. Érdekes...


andriscs
(aktív tag)

Hi!

Rájöttem, hogy miért nem találta meg az átlókat. Azért, mert a lefele balról jobbra függvény csak a mátrix felső háromszögét járja be, az alsót nem, és ugyanez igaz a másik irányra is. Szóval ezt kellene még megoldani. De az lehet, hogy már holnapra marad.:)


Kr1xX
(csendes tag)

Fúha. Énis éjszaka írtam, szóval biztosan nem hibátlana szoftver, én is inkább kezdő lökésnek szántam. Most per pillanat nincs indőm vele foglalkozni, de majd még átnézem a kódomat. Ha nem sikerül megoldanod a problémát csak szólj... addig is gondolkozom a megodáson, de ezt igazából csak úgy lehetne, ha írom a progit közben. ja egy kis ízelítés a progijaimból ha érdekel: http:sztyan.uw.hu ott van egy menüpont legalul, hogy Java progik amiket én írtam. Nézd meg. AMúgy én sem vagyok még benne a Javaban teljesen, Szeptemner óta tanuklom a nyelvet. Sok sikert!


Fko
(tag)

Sziasztok! Ha Java-val kapcsolatos kérdésetek van, gyertek el a most induló Bővebben: link oldalra és tegyétek fel ott is a kérdést.


andriscs
(aktív tag)

Hi!

Sajnos nekem sem volt időm arra, hogy átnézzem újra a kódot, viszont az egyik tanárom elmondta, hogy mi a hiba az eredeti programomban. Ezt beidézem:
''a program azért hibás, mert nem a megfelelő feltétel esetén törlöd a számlálót.
Vegyük például a clone1-et. Ha például 3 darab 0 van egy oszlop végén, pl.
mint itt a harmadik oszlopban, akkor az első elemtől lefelé indulva talál két egyezést,
így clone1 értéke 2. Majd mivel a tábla széléhez ér, a második elmetől
kezdve keres egyezést, és talál egyet, így clone1 értéke már 3, és igazzal tér vissza.

{{'0', 'x', '0', 'x', '0'},
{'x', '0', 'x', '0', 'x'},
{'0', 'x', '0', 'x', '0'},
{'x', '0', '0', 'x', '0'},
{'0', 'x', '0', '0', '0'}}''


Szóval ezért hibás a dolog. A nagy kérdés az, hogy hogyan lehet kijavítani! :)
De valszeg érdemeseb a te progidat továbbfejleszteni. A lényege az lenne, hogy amikor a te progid balról jobbra megy felülről lefele, akkor utána egy jobbról balra felfelé ugyanolyan ciklus kell. És ugyanez a másik irányban is, csak ott meg fordítva. Remélem érthető.


Kr1xX
(csendes tag)

Azt nem értem hogy iért kell balról jobbra után még egy jobbról balra??? Lehet, hogy még én nem vágom, de ha van 4 egyforma balról jobbra, akkor minek vizsgáljam jobbról balra hisz ugyanúgy meg fogja találni azt a 4-et. Az én elképzelésem szerint elég tehát vízszintesen, függőlegesen és kétféle átlósan vizsgálni...egyébként meg ha balról jobbából jobbról balrát akarsz, azt nagyon kicsi változtatással meg tudod csinálni a kódomból, egy két paraméterváltoztatásával...


andriscs
(aktív tag)

Hi!

Jó a te kódod, hogy vízszintesen, majd függőlegesen utána meg átlósan keresel, de az átlósak nem keresik meg mindet, mert pl a balról jobbbra le csak így fut le: 0-0,1-1,2-2,..., majd utána 0-1,1-2 stb., tehát nem megy végig a 3-0... stb irányokban. Ezért csak a felső karéjt ellenőrzi, tehát kimarad az alja. Erre kellene egy ugyanilyen kereseés, csak fordítva (jobbról balra felfelé, illetve balról jobbra felfelé). Ennyi. Ezt kellene megcsinálni, dfe a héten nem nagyon van rá időm.


Kr1xX
(csendes tag)

Áhhá. Vágom már. Én sem tudom, hogy érek rá a héten, de majd utánanézek. Most feladták a leckét a suliban is :( ....


andriscs
(aktív tag)

Hi!

Oké, annyira nem sürgős, nekem is a héten zh van, szóval csak utána fogok foglalkozni vele. Ráadásul elkezdtük a Swing tárgyalását, így most azon gondolkodom, hogy át kellene írnom az AWT-t Swing-re, de az megint plusz munka...:F


andriscs
(aktív tag)

Hi!

Addig is míg megoldjuk a négyzetháló problémát, valaki elárulja nekem, hogy ha van egy Frame, aminek beállítok egy képet háttérnek, és a Frame déli részére berakok egy panel-t, amin van két gomb, akkor hgoyan tudok a panelra is képet rátölteni? Mert ugye amikor a képet kirajzoltatom a g.drawImage(img,0,0,this)-el, akkor a háttérre rakja ki a képet. Viszont ha ezt használom g.drawImage(img,0,0,p), ahol p a panel, akkor miért nem rajzolja rá a panelre?


blemidon
(tag)

Csak azt a területet repainteld, ahol változás volt (tehát a kigyó elejét és végét), ne az egész appletet rajzold újra.


Kr1xX
(csendes tag)

Köszi, már megoldottam.


Kr1xX
(csendes tag)

Őszintén szólva még soha nem használtam panelt (nem is tudtam hogy van rá lehetőég), így hát ebben nem tudok segíteni. Ha meg van a megoldás, akkor azért publikáld, mert érdekel! :))


andriscs
(aktív tag)

Hi!

Sajnos még nem akadtam rá a panel-es megoldásra, viszont óriási hírem van: hétvégén SIKERÜLT olyan algoritmust írnom, amelyik rendesen keres a négyzethálón, tehát sikerül hibamentesen kerestetni vele ( kb. 3 órát gondolkodtam rajta). Eddig még nem tudtam megszívatni, szóval most már talán menni fog a dolog. Ráadásul a kép betöltése is sikerül, tehát már háttér is van. Ha kész lesz a progi, akkor majd publikálom :)
Természetesen most MI-t kellene bele rakni. Van elképzelésem, de ha valakinek van valami szuper ötlete, akkor ne kíméljen!

üzenetek