02.10.2008 17:54:32
Robocode tankilahing - mäng Java õppimiseks
Sai hiljuti sellise huvitava mänguga Java õppimise eesmärgil tutvust tehtud ja peab ütlema, et asi on täitsa huvitav ning annab hea motivatsiooni koodi kirjutamiseks ning erinevate funktsioonide uurimiseks. Vaikselt olen oma lõbuks asjaga tegelenud ning nüüd juba saab mu aretatud elukas mõnele asjale pihta ka Kuna siin foorumis on pidevalt küsitud, mis keelega oleks kõige parem programmeerimise õppimist alustada, siis minu arvates on Java selleks vägagi sobiv variant, eriti veel kui on olemas selline mäng, kus oma oskusi ning teadmisi pidevalt täiendada saab.
Robocode is an Open Source educational game started by Mathew Nelson (originally provided by IBM). Currently contributions are being made by various people; officially Flemming N. Larsen is working on Robocode to keep it current and fix the bugs. The game is designed to help people learn to program in Java and enjoy the experience. It is very easy to start - a simple robot can be written in just a few minutes - but perfecting a bot can take months or more.
Competitors write software that controls a miniature tank that fights other identically-built (but differently programmed) tanks in a playing field. Robots move, shoot at each other, scan for each other, and hit the walls (or other robots) if they aren't careful. Though the idea of this "game" may seem simple, the actual strategy needed to win is not. Good robots can have thousands of lines in their code dedicated to strategy. Some of the more successful robots use techniques such as statistical analysis and attempts at neural networks in their designs.
Olen ka umbes kuu aega tegelenud sellega. Päris huvitavaid funktsioone olen jõudnud valmis kirjutada. Näiteks on võimalik määrata areenil mingi kindel ala, kus piirides tank randomiga sõitma hakkab, suhteliselt raske on isegi 1vs1 maailmameistril (Shadow) sellisele liikumisele pihta saada, kuna seda ei anna ennustada... Praegu tegelen funktsiooniga, mis ütleb vastase koordinaadid tema kauguse ja radari pöördenurga järgi.
Aga üks haige asi, mis ma tähele olen pannud, on see, et X ja Y koordinaadid on valetpidi... X on vertikaal ja Y horisontaal. _________________ "Believe you can, believe you can't; either way, you're right." - Henry Ford
Kui räägid koordinaatidest, siis saab küll. X = getY; ja Y = getX; Siiski suutsin ma mitu tundi jännata ühe keerulise trigonomeetriat täis funktsiooniga otsides buge, enne kui taipasin X ja Y teljestikku kontrollida.. _________________ "Believe you can, believe you can't; either way, you're right." - Henry Ford
Otsustasin teha katse praegu ja tundub, et eksisin, mitte X Y polnud tagurpidi, vaid mul olid nad ilmselt funktsiooni tõmmatud tagurpidi. Nimelt oli raske otse kontrollida, kuna output window'i ei ilmunud ühtegi teadet, mitte vähemalt enne, kui avastasin, et igal tankil on oma output window paremasse äärde ära peidetud. Aga jah, koordinaadid on õigetpidi ikka. Kui hunnik funktsioone üksteisega läbi põimida ja kuskil nagu silmnähtavalt numbreid kontrollida ei saa, siis ajab juhtme kokku küll.
Nimelt oli raske otse kontrollida, kuna output window'i ei ilmunud ühtegi teadet, mitte vähemalt enne, kui avastasin, et igal tankil on oma output window paremasse äärde ära peidetud. Aga jah, koordinaadid on õigetpidi ikka. Kui hunnik funktsioone üksteisega läbi põimida ja kuskil nagu silmnähtavalt numbreid kontrollida ei saa, siis ajab juhtme kokku küll.
Mul oli sama jama, kui proovisin seinte vältimiseks koodijuppi valmis kirjutada, pidevalt sõitis ikka seina ja tegi muid imetrikke.
Bluebull kirjutas:
...1vs1 maailmameistril (Shadow) ...
Hmm, mul sellist masinat polegi veel arvutis, peab selle ka alla sikutama. Mul kõige tegijam 1v1 bot Dookius hetkel, kes siiani kõigile teistele suht kindlalt ära teinud.
Oleks aega näpiks ka. Idee tundub huvitav.
Kes siin rohkem tegelenud on.. kas nii ka saab, et a'la et kaks sõpra teevad oma AI tankile ja lasevad mõlemad tankid üksteise vastu võitlema?
Nagu 1 vs 1
Minu robot vs. Walls siis. Kuigi sellest ja teistest sample bot'idest saab ilusti jagu, siis arenguruumi on veel küllaga.
Bluebull sa oma robotit kuskile üles ei taha laadida? Saaks omavahel ka siis sõbralikult pisut mõõtu võtta
Hehe, pidasin siin siis väikese titaanide heitluse maha Su robotile on jah päris raske pihta saada, siblib teine ringi mis hirmus. Panen oma tanki ka siia välja, kes tahab saab katsetada: aatomik.V2ikePahalane_1.0.jar
Võrreldes varasema robotiga kasutan nüüd lukustuvat radarit ja muutsin natuke kuuli tulistamisvõimsuse algoritmi. Plaanis on "wall smoothing" ka sinna sisse pookida, aga hetkel natuke vähe aega olnud, et seda lõpuni valmis meisterdada.
Edit: tõstsin faili rapidshare'i ümber.
viimati muutis aatomik 30.10.2008 16:29:54, muudetud 2 korda
hea et avastasin kähku et advenced robot-i klassi on mõttekam kasutada..
Alguses sügasin päris pikalt pead, et wtf , nii on võimatu teha midagi ..
a siis natuke uurides teiste koode leidsin selle asja..
Enivei, kahju, et aega nõudev asi on.
Ilgelt huvitav viimased päevad peale keskööd ennast mitu korda unustanud ligi kella neljani uurima/pusima ..
Ja tõesti hea.. pean JAVA-t ka selle käigus õppima...
mis veel ägedam, peab trigonomeetria ka nüüd meelde tuletama.. kuna oleks vaja juba midagi ägedamat looma hakata..
Tegin ka 10 raundi nende vahel, jube häbi hakkas enda roboti pärast. Vajab kõvasti täiendamist..
Aga lükkasin su roboti abc.shadow'iga kokku ja avastasin, et su robotil on natuke liiga ühtepidi liikumine. See tähendab, et shadow ennustas u. 60%-80% ajast õigesti, kuhu ta laskma peab. Jube kiiresti said raundid läbi. _________________ "Believe you can, believe you can't; either way, you're right." - Henry Ford
aatomik,
su victory tants on tglt päris äge ...
algul mõtlesin ,et lihtsalt random liikumisel tekkind teema, kuid ta teeb ju seda alati :p
Eriti mõnitav tank
btw : tegelen ta defatimisega hetkel.. 8)
-EDIT-
-krt, sul hea radari asi tglt.. ilusti fokuseeritud samas ei ole liiga lai area kaetud..
Aga lükkasin su roboti abc.shadow'iga kokku ja avastasin, et su robotil on natuke liiga ühtepidi liikumine. See tähendab, et shadow ennustas u. 60%-80% ajast õigesti, kuhu ta laskma peab. Jube kiiresti said raundid läbi.
Ma vastase kuulide eest põiklemisele eriti veel aega pühendanud pole, praegult on jah liikumine üsna kergesti ettearvatav. Kusjuures panin su tanki ka shadowiga kokku ja kuna su masina liikumine on suht "random", siis talle on juba palju raskem pihta saada.
iceincube kirjutas:
su victory tants on tglt päris äge ...
algul mõtlesin ,et lihtsalt random liikumisel tekkind teema, kuid ta teeb ju seda alati :p
Eriti mõnitav tank icon_biggrin.gif
Väike võidutants sai sinna külge poogitud jah, see praktiliselt sama, mida sample tankidest Tracker kasutab
Edit:
Aretasin oma masinale nüüd sellise lihtsama kuulide eest põiklemise funktsiooni ka külge. Probleem, millele aga lehendust pole veel leidnud on vastase kuuli asukoha kindlaks tegemine. Kood ise on järgmine:
Keegi teab miks mul java crashib pooltel kordadel kui ma peale roboti muutmist seda complier testi teen? Hetkel ei sa eriti aru kuidas asi toimib ka muidu aga midagi hakkab koitma loen vaikselt õpetusi ja proovin aga väga häiriv on see kokku jooksmine. Pole varem javaga kokku puutunud aga ilmselt pean mingi raamatu kätte võtma ja otsast lugema hakkama.Tulevikus võib koolis sellest kasu ka olla.
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.