На текущий момент одновременно идёт более ста скачиваний! 8-O
Я буду раздавать дистрибутивы ещё недели две, а то и месяц. Кто не смог скачать сейчас — возращайтесь завта, думаю, основной наплыв скачиваний спадёт. Сейчас я остановил раздачу торентов. Весь мой скромный канал отдан хабражителям :-)
Qt-проекту место на Qt-Apps. Залейте туда хотябы исходники (со сборкой не получится, т.к. там ограничение в 750Кб) — посмотрим, как они справятся с хаброэффектом.
Заодно люди, занимающиеся непосредственно Qt, может что-нибудь дельное подскажут.
Qt-Apps — это мой следующий шаг :-) Я там уже хостью кое-что. Пока я хотел показать отечественным специалистам pre-версию. И, как видите, народ обнаружил неточности (см. upd3)
Нуу… 10 из 10 — это вам везёт :-) Но сейчас человек выигрывает действительно чаще 50%. Дело в том, что компутер смотрит на один ход вперёд. Он старается сделать наиболее разумно текущий выстрел. Он не старается простроить стратегию игры. Реализация стратегии — следующий шаг.
Не думали «обучить» программу? заставить компьютер поиграть с самим собой, или с пользователями, и выудить из результатов несколько тактик, приводящих к успеху?
Ну и грабить корованы тоже неплохая идея ))
Это очень обширная тема. Есть несколько наработок. Самое интересное, заставить комп собирать статистику: как пользователь расставляет корабли. На пример, компутер может прочухать, что пользользователь никогда не ставит ничего на A1… Можно заставить компутер подражать пользователю, когда он (компутер) расставляет свои корабли; скажем, придерживать тактики «все корабли — в кучу»… Но оказывается, что игра становится менее интересной. Она становится более предсказуемой. Я не смог придумать такую обучаемость, которая делала бы игру интересней. Но думать продолжаю.
НУ и нахрена было не выложить на какой-нить файлообменник (хотя бы?), эдак по 700 байт в секунду долго тянуть будем…
Какой канал в инет у стрима, это ж адсл, да еще не симметричный? Издевательство.
Ну потому, что сотни народу тянут одновременно. Извините, не ожидал такого резонанаса. Сделайте закладку — приходите вечером.
Мне кажется, что уже позжно перекладывать на файлообменник — хабраэффект спадает за несклько часов.
Сейчас скачивают 179 человек :-) Хорошо ещё я не apache использую, a lighttpd; а то бы тормозил не только канал, а ещё и ОС, путаясь между сотнями апачевских детёнышей :-)
Приведу только два самых больших недостатка.
Со стороны пользователя основной минус — тормоза. По крайней мере год назад оно очень тормозило на абсолютно ровных местах.
Со стороны разработчика — жутко неудобно, что нельзя выгрузить сорцы. Ну неужели нельзя было прикрутить SVN? Это же элементарная культура!
Когда они это доделают — буду пользоваться, а пока… не вдохновляет.
Есть стратегия достаточно простая и эффективная
но конечно не 100% выигрыш,
(НЕ основанная на подглядывании и нейросетях)
человек готов ее изложить и оформить за инвайт на хабре.
опять же при условии что автор ее возьмет на вооружение.
имелось ввиду как раз деньги после стульев.
т.е. если понравилось и будет использоваться целиком или ее часть.
но нужно согласие и наличие свободного инвайта.
на мой взгляд поле слишком мелкое, вот бы возможность растянуть окошко побольше а то целиться приходится в клеточки. В принципе комп играет нормально, но со стратегией расстановки по краям поля я его всегда выигрываю, т.к. в первой половине игры краям уделяется очень мало внимания.
Такие вещи делаются уже как сервисы. Вот это я написал году так 1999: www.rt.mipt.ru/~ivan/SeaBattle/
Аналогично, честный AI. Сорцы где-то есть если поискать. Написано на java, если бы делал сейчас то на javascript. Винды нет, так что чесно скажу вашу програму не запускал.
Упомянутое в upd3 некомпилирование по причине непроприсанной stdlib.h в arena.cpp вылезло и у меня, под виндой в qt creator'е «из коробки».
Windows XP SP3, Qt Creator 1.3.0, Qt 4.6.0, компилировал g++, собирал mingw32-make.
Что понравилось: Очень меня порадовало автозаполнение поля (с кучей вариантов). Комп играл примерно на одном уровне со мной. Что не понравилось: нелогичные цвета для кораблей (красный — подбит, жёлтый — потоплен), ИМХО, логичней было бы наоборот, невозможность растянуть окошко. Какие идеи у меня есть: «конструктор» с готовыми кораблями, чтобы не требовалась проверка перед началом игры, а просто можно было расставить нужное количество кораблей нужного типа с соблюдением границ и т.п. Ну или просто программа не давала бы нарисовать неверно корабли, изначально. Т.к. я постоянно норовил пририсовать себе лишний кораблик, а то и два, а программа не говорила мне, ЧЯДНТ :-)
1) А какие цвета вы считаете логичными? Я пробовал некоторые схемы и сразу скажу: схема «потоплен-красный; ранен-жёлтый» не очень удобная, так как жёлтый меньше бросается в глаза, а именно его-то и надо добивать. карсный же маячит совершенно зазря. Схема «ранен-красный; потоплен-чёрный» лучше… но мрачновата :-) Вы можете поиграться с цветами в файле src/gui/flags_colors.cpp (первые же строчки, там RGB-цвета). Присылайте ваши варианты! А вообще, надо бы скины сделать :-) но это в следующей версии.
2) Про конструктор я не очень понял, но я пробовал делать, чтобы человека контролировало при каждом тыке при расстанове кораблей. И это оказалось не удобно. Прежде чем что-то поставить надо что-то стереть. А со стиранием может быть проблема. Скажем вы уже поставили все однотрудные, и хотите поставить двухтрубный… но для этого надо поставить первую трубу, а это однорубный, а их уже ставить нельзя :-) Или у вас стоят все корабли, но вы хотите убрать трёхтрубный, но стереть трубу не можете, пока у вас стоят все двухтрубные… В общем, полный затык :-)
Тогда нужно делать какой-то механизм выбора корабля. Причём понятный механизм; ибо никто не станет перед игрой читать инструкцию. Кроме того, проблема остаётся: Если сразу корабли расставить не удалось, то их захочется подвигать. Если контролировать каждое дижение, то может оказаться, что чтобы поменять местами трёхтрубный и четырёхтрубный, их надо на время поставить поперёк существующих, а это — нельзя… В общем, я долго думал сам и экспериментировал на окружающих :-) Человеку проще всего просто нарисовать корабли, как он это делат на бумаге — по клеточкам. По крайней мере, я не смог найти ничего лучшего.
>Тогда нужно делать какой-то механизм выбора корабля.
Да. Что-нибудь в виде тулбара или меню.
>Если контролировать каждое дижение, то может оказаться, что чтобы поменять местами трёхтрубный и четырёхтрубный, их надо на время поставить поперёк существующих, а это — нельзя…
Можно один из них временно удалить, переставить второй, вернуть первый обратно. В принципе, могу на досуге попробовать набросать черновичок конструктора. Так, как его вижу.я :)
Вот и получается, что вместо очевидного тыка туда, где хочется поставить корабль, требуется совершенно неочевидный поход в меню :( Сейчас вся игра управляется тремя кнопками, а тут появится такой наворот… поймёт ли это пользователь, который хочет просто поиграть?
> Можно один из них временно удалить, переставить второй, вернуть первый обратно.
Причём вернуть придётся через тот поход в меню… И как удалить? Правой кнопкой (левая, наверно будет двигать)?
> В принципе, могу на досуге попробовать набросать черновичок конструктора.
Если у вас хватит куража и вы его набросаете — дайте знать; мне было бы интересно посмотреть.
(я спорю не потому, что хочу потроллить :-) а потому, что надеюсь найти лучшее решение)
Вот тут набросал кой-чего: pastebin.com/m3fb1ec45
Чтобы посмотреть, код нужно сохранить в отдельный файл (например, editor.cpp) и использовать в качестве главного файла (вместо fairseabattle.cpp).
Сделано несколько хаков, но цель была показать основную идею, а не чётко вписаться в существующую концепцию :)
1. сделал свой собственный класс для главного поля (ConstructorField вместо ArenaWidget) — лень было разбираться, как у Вас хранятся поля :)
2. сделал публичным метод void ArenaCellWidget::set_color(QColor const &); чтобы быстро перерисовывать клетки в нужный цвет
Вроде бы всё.
Длина корабля выбирается кнопкой на тулбаре. Поворот — с клавы, кнопка «R» (в принципе можно кнопкам выбора кораблей добавить выпадающее меню с вертикальным и горизонтальным вариантом).
Что нужно доделать (если захотите воспользоваться концепцией):
1. нужно считать количество уже установленных кораблей и делать соответствующую кнопку неактивной, если количество достигло разрешённого (при удалении, соответственно, возвращать обратно)
2. более строго выбирать разрешённые поля — у меня сейчас можно ставить корабли вплотную :)
3. починить баг с поворотом корабля, когда курсор находится вблизи уже существующего корабля
4. много других багов… :)
1) Я всё же не очень понял, как его прикрутить и что такое main.moc (последняя строка)
2) Судя по описанию, идея стОящая. Я пока всё же хочу остановиться, стабилизировать то, что есть, а потом двинуться дальше. Но вашу идею я бы хотел поместить в SVN в devel. Себе и другим разработчикам на заметку. Вы не возражаете? Как вас представить в README? Или напишите какой-нибудь copyright в сорцах что-ли, а то будет выглядеть, не красиво, как буд-то я умалчиваю имена контрибьюторов :-)
Почти понял вашу задумку. Вот как я вижу добавку вашего прототипа в devel-дерево user.rol.ru/~alvm/editor-10-01-12.tgz
там я уже сделал хакнутый публичный set_color, но всё равно пока не собирается. Глянте… я на main.moc грешу :-)
1. Сохраняем в основной каталог под именем, скажем, editor.patch
2. Делаем patch -p0 < editor.patch
3. qmake && make && ./fairseabattle
Запуск редактора сделан отдельной кнопкой на тулбаре, основной код не затронут. «Хакнутый» класс вынесен в отдельный namespace, так что основной код, опять же, не потревожен.
Гаццкий pastebin… префикс "@@" в строке он, видите ли, интерпретирует как собственную команду, а то, что это служебные символы в дифф-ах, ему почему-то неведомо :)
Не копируйте текст со страницы, жмите лучше «download» — скачается нормально, без пропущенных символов.
Не-не-не! отставить! Всё работает! :-)
Положу этот патч в исходники с инструкцией. Пусть люди посмотрят, кому интересно. Возможно что-то посоветуют, или доделают, или просто мне на память будет потому, что идея хороша. Мне кажется, что так расставлять проще. Надо оттестировать на людях :-)
Это одна из вещей, запланированных на ближайшее время. Там в коде даже комментарии есть, в каком месте надо сохранять, а в каком восстанавливать конфигурацию.
На первый взгляд могу сказать следующее: слишком много цветов — рассеивается внимание. Цветов должно быть три — красный(подбитые) синий(отсутствие) и серый(неизвестная зона).
Разница в цвете между выстрелом, и просто окружением корабля — не несёт никакой информационной нагрузки — удобнее было бы просто синим. Плюс было бы здорово, если бы убитый корабль — состоял из белых квадратиков, зачёркнутых красным крестом (как в детстве) — это касается как своих кораблей так и врага.
Спасибо! Уже несколько человек посетовало на радугу.
Можете взять новую версию из SVN там почти на 100% реализована именно ваша идея, хотя с такой чёткостью её никто и не высказывал, но, видимо, имели ввиду именно это :-)
Морской бой с искусственным интеллектом — по-честному