Robocode: програмирай свой танк-робот на Java!

вторник, 5 февруари 2008

Поради спецификата на играта, вероятността неспециалист (тоест, непрограмист :)) да прояви интерес към нея клони към нула, затова няма да пестя термините. Накратко:

Същност: Заглавието би трябвало да си казва всичко, но за неспециалистите и онези, които не могат да разшифроват телеграфичния ми стил: Свръхстилизирана игра с танкове, като играчът не управлява пряко танка, а пише програма, която контролира движението и стрелбата - един вид ИИ. Подробности — по-долу.

Сайт: robocode.sourceforge.net (има и статия за нея в Уикипедия)

Авторски права: Свободна (Common Public License; щях да се радвам повече, ако беше GNU GPL)

Платформа: Java (всяка ОС за PC, на която може да се инсталира JRE 1.5 и нагоре)

Размер: ~7 MB в разархивиран вид; идва в JAR архив ~3 MB (разбира се, отделно може да се изтегли и изходния код)

Битките изглеждат ето така:
Screenshot - A battle in Robocode
(това е най-малкия възможен размер “бойно поле” - 400×400 пиксела, ботовете са част от демонстрационните, които идват с инсталацията)

Мултиплейър: Няма възможност за игра в мрежа, но танковете могат да се пакетират, така че с помощта на някакъв вид пренос на данни (e-mail, IM, memory stick…) можете да си спретнете съревнования с ботовете на приятелчетата. Хранилището съдържа адски много чужди танкове. Има и организирани състезания с класация, както и отделни задачи/предизвикателства.

Най-елементарния код на бот (генерираното по подразбиране съдържание при New » Robot, със зададени моя псевдоним и име на робот):

package daggerstab;
import robocode.*;
//import java.awt.Color;

/**
 * MainGauche - a robot by (your name here)
 */
public class MainGauche extends Robot
{
	/**
	 * run: MainGauche's default behavior
	 */
	public void run() {
		// After trying out your robot, try uncommenting the import at the top,
		// and the next line:
		//setColors(Color.red,Color.blue,Color.green);
		while(true) {
			// Replace the next 4 lines with any behavior you would like
			ahead(100);
			turnGunRight(360);
			back(100);
			turnGunRight(360);
		}
	}

	/**
	 * onScannedRobot: What to do when you see another robot
	 */
	public void onScannedRobot(ScannedRobotEvent e) {
		fire(1);
	}

	/**
	 * onHitByBullet: What to do when you're hit by a bullet
	 */
	public void onHitByBullet(HitByBulletEvent e) {
		turnLeft(90 - e.getBearing());
	}

}

Все още съм в процес на разучаване на играта, но дори и след това, при времето, което мога да ̀и отделя, представянето на танковете ми ще е на нивото на експортна версия на T-55 в ръцете на арабски танкист. :twisted: Все пак нямам нищо против да премеря сили с други хора на моето ниво.

Ако някой иска повече информация - сайта на играта или коментарите тук.


Зомбита с квадратни глави

вторник, 20 февруари 2007

(Не, това не е политически пост. Не. Въобще. ;) Останалото - под прегъвката…)

Прочетете остатъка от публикацията »


Алфа-Центавърска басня

понеделник, 12 февруари 2007

Снощи за пореден път си припомних, че повечето игри (и в частност компютърните такива) са опростен вариант на реалността - шахът е абстрактна, силно формализирана симулация на бойно поле, а компютърните стратегически игри - все по-убедителна… Направи правилата достатътчно сложни, направи начина на игра по-многостранен… и не се изненадвай, когато възникне ситуация, притежаваща стряскащи паралели с реална такава…

В началото на снощната игра на Alpha Centauri компютърът ми даде начална позиция на някакъв забутан остров. Сух терен, минимум ресурси… Карай, казах си, поне другите фракции няма да ми досаждат за известно време. Садих гори, измъквах максимума от оскъдните находища, тормозех туземната флора и фауна, разселих се из океана при първа възможност… В началото фракцията ми беше една от най-слабите, но после… Успях да завърша първите два “секретни проекта” и технологиите и икономиката ми получиха тласък напред. Бавно, но сигурно започна да нараства стълбчето на диаграмата, което представяше моето развитие, сравнено с това на останалите… И докато те прахосваха ресурси в борба помежду си, аз се развивах на изолирания си остров… В един момент се оказа, че аз имам най-малко градове от всички, но моите са гъсто населени, икономиката ми е силно развита и като резултат - компютърният статистик определя мощта ми като “ненадмината”.

И тук, както казват американците, “лайното удари вентилатора” - в звездния ми момент се оказа, че не мога да постигна дипломатическа победа, което е странно, защото играех с най-дипломатичната (на теория) фракция - миротворческите сили на комисар Правин Лал (”комисар” като “член на комисия” на ООН ;-) ). Не знам защо никой от другите не желаеше да гласува за мен - дали заради обществения строй (”Демокрация” ;-) ), дали защото бях най-силен от всички, или заради егоистичното ми нежелание да се обвързвам с когото и да било от тях. Може би имаше нещо общо и с “планеторазрушителите”, които се гушкаха в моите ракетни силози…

Бяха оцелели само четири други фракции - председателят Янг председателстваше от някоя затънтена килия на Индустрии Морган, а Бог явно не беше благосклонен към сестра Мириам, защото спартанците я бяха измели от лицето на Планетата. По някакъв начин успях да се скарам едновременно с три от четирите - морганитите, спартанците и Планетарния Университет (кучият син Захаров изтъргува една камара технологии с мен, но се нацупи, когато му отказах последната). Опитите ми да сключа съюз с геянците се оказаха неуспешни и аз направих глупост - започнах война на няколко фронта едновременно.

Да, именно - не на два, а на няколко фронта. Стоварих десантни части на три различни бряга из Планетата. Опитите ми да им разчистя път от въздуха имаха временен успех - гадовете се научиха и нафрашкаха базите си с противовъздушни подразделения. Тъй като се бях развил на изолиран остров не можех да доставям бързо подкрепления и моите сили изнемогваха на чужда територия, неспособни не само да продължат, но и да задържат завоюваното.

Горе-долу по това време се усетих, че: а) Въпреки че мощта ми е все още “ненадмината” и значително по-голяма от тази на всеки мой противник, взет поотделно, сборната им мощ е по-голяма от моята; б) дипломатическата победа е невъзможна; в) като следствие от а) и б) войната ще се проточи доста и вероятно ще се наложи да използвам “планеторазрушителите”; г) предвид в), най-уместно е да запазвам играта и да си лягам, защото става късно. :)

Каква е поуката от баснята и връзката на цялата скучна-за-непосветения история с първия абзац оставям на читателя да прецени сам…