|
#1
|
|||
|
|||
Игра "Вирусы"
Здравствуйте, уважаемые форумчане! Сразу извиняюсь, если перепутал ветку форума для создания топика, но, кажется, эта ветка самое то. В общем в двух словах суть вопроса:
Есть идея игры - надо реализовать. Теперь поподробнее: Когда-то давно (в годах 90-х) эту игру мне показал один человек, с которым мы познакомились в Крыму. Для игры нужен был листок бумаги в клетку, ручка и карандаш (или две ручки разного цвета). Сразу говорю - нет, это не игра в "точки". Программный аналог игры я искал в интернете, но так и не смог найти. В общем, я пытался реализовать ее на Delphi 7, но не хватило умений, хотя получалось поначалу. Игра по сути простая, как два пальца, немного по принципу похожа на "сапер" виндовсовский. В общем, все, кому интересна идея и есть знания (выше среднего) в программировании на Дельфе, пишите в личку или на мой е-маил, все подробно опишу и если надо будет, скину свои наработки (в коде все подробно обозначал, для чего какая переменная или функция). Единственно, я изначально не планировал коммерческое использование данной программы, поэтому все на добровольных началах и без всякого выкачивания денег в виде "ключей", "лицензии" и прочей ерунды. Максимум - в описании просьба добровольного пожертвования и естественно, имя того, кто примет участвие в реализации идеи (это по желанию)))) |
#3
|
|||
|
|||
Нет, не та, что по ссылке. Чуть попозже напишу здесь, в чем суть игры. Хотя, если заинтересованных нет, то и смысла тоже нет.
|
#4
|
||||
|
||||
а может заинтересованным лень писать в личку и емайл)
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
я кажется такую делал, там ставят по очереди по два или три крестика вроде, и можно вражеские зачёркивать
один раз играл в такую под dos, и даже потом начал делать её на дельфи, но там появились какие-то неуловимые баги на пустом месте, поэтому забросил помню, что сами крестики и зачёркивание делал с использованием случайных чисел, остальное уже забыл в чем суть игры в любом случае интересно узнать |
#8
|
|||
|
|||
Да нет, народ, игра прикольная, только не та)))
В общем, рассказываю (и с картинками на паинте, ибо лень разрисовывать): Берем лист бумаги в клетку и рисуем стандартное поле 10х10 клеток. Это стандартное поле, но может быть и 20х20 или в форме ромба или других прикольных размеров. По углам - стартовые позиции игроков. Вот на рисунке их 2 - красный и синий. Игроков может быть и трое и четверо и даже шестеро, единственно чтобы все были разного цвета. Правила простые как двери: игроки ходят по-очереди, по три крестика (вируса) за ход. Вирусы должны ставиться только в клетках, соседние с которыми уже заняты вашим вирусом. В результате поначалу получается что-то вроде этого: Если ты или противник "дотягивается" вирусом к вражескому, так что они на соседних клетках (по вертикали, диагонали, горизонтали и т.д.), то ход на вражеский вирус превращает его в "болото" твоего цвета: Вот тут красный игрок "схавал" вирус синего и превратил его в свое "болото". Болото статично и ничего с ним сделать уже нельзя, но болото имеет два состояния - "подключенное" и "неподключенное". Подключенное болото - одна или группа соседствующих клеток с болотом одного цвета, возле которого есть хотя бы один вирус соответствующего цвета. Через такое болото можно продолжать дальше "пожирать" вирусы противника. Вот на этом рисунке красное болото подключено, а синее (одна клетка) - нет, но так как ход синего игрока, то он может исправить ситуацию в свою пользу. С помощью болот можно делать "консервы" - это когда 1 вирус противника полностью окружен чужим болотом. В игре проигрывает тот игрок, которому больше некуда походить. В общем, такова концепция игры. Кому не лень, можете попробовать сыграть сами с собой на листке бумаги. Я пару раз пыталься реализовать эту игру програмно, но на определенном этапе наступал "эпик фэйл". |
#9
|
||||
|
||||
Реализация довольно проста. Например:
Игра идёт по клеткам. Можно либо хранить клетки каждого игрока, либо к каждой клетке её состояние. Второе имхо более логично. Какие бывают состояния? 0 - свободно. 1 - красный крест 2 - красное болото 3 - синий крест 4 - синее болото 5 - зеленый крест 6 - ... Можно поставить так, но лучше сместить на 1, что было: -1 - свободно. 0 - красный крест 1 - красное болото 2 - ... В таком случае принадлежность клетки к игроку вычислить легко как S div 2 (а лучше S shr 1), состояние - как S mod 2 (или S and 1), а -1 - свободно (где S - состояние). Для состояния клетки достаточно 1 байта, поэтому делаем двумерный массив байтов. На каждом ходу проверям возможность хода: - Клетка - не болото; - Рядом с выбранной клеткой должна быть хотя бы одна своего цвета; - Если эта клетка - болото, то любым алгоритмом наподобие закраски ищем крест нужного цвета в округе (для маленького поля можно даже не париться и сделать рекурсией). Ну и переходы состояния довольно простые: - из пустой только в крестик (т.е. S:=N*2, где N - номер игрока); - из крестика только в болото (т.е. S:=N*2+1). jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 12.04.2012 в 18:38. |
#10
|
||||
|
||||
Вот я тут набросал за пару часов, правда конец игры не определяется и графика лажовая
ЗЫЖ Delphi XE Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#11
|
||||
|
||||
а не логичней ли определять победителя по количеству клеток с вирусом и болотом, а не кто последний ходил?
Пишу программы за еду. __________________ |
#12
|
|||
|
|||
Спасибо Bargest и Aristarh Dark за помощь. Попробую разобраться что к чему. Все дело в том, что я пытался реализовать программу основываясь на своих очень средних знаниях.
Пытался сделать так: 1. Создаю массив БитБаттонов 10х10 (обычные батоны не подходят, ибо не меняется цвет надписей) 2. Создаю зависимости для каждой клетки посредством алгоритма (я там по координатам расчитывал), записиваю их все в файл текстовый. 3. Создал алгоритм расчета возможного хода, варианты всех возможных ходов тоже записал в текстовый файл. А потом начались приколы в виде торможения программы, когда занятых клеток больше чем 6-7. Это из-за того, что программа по новой после каждого хода просчитывает данные и переписывает их в файл. Тут я протупил или с алгоритмом, или в самом листинге напортачил. Я знаю, что все это можно как-то сделать с выделением памяти и т.д., но делал, как умел. Хотелось сразу сделать как более универсальной, но не хватило умения. |
#13
|
||||
|
||||
Я тоже зделал что-то. Такое приблизительно? Делал "на быструю руку", возможны недочеты.
Последний раз редактировалось YVitaliy, 19.04.2012 в 00:35. |
#14
|
|||
|
|||
Понравилась идея YVitaliy показывать куда можно ходить, а идея такой игрушки похоже заняла многих, вот моя реализация на WinApi, Потратил часа 2-3 наверно. Плюсы: Реализован на WinApi и имеет размер 20 кб, реализовано практически все в том числе и победы.
Минусы: код не оптимизирован, ужасная функция определение победы(просто устал жутко, голову ломать не хотелось) и нету реализации подключенного неподключенного болота, у меня все одно) П.С может замутить конкурс на лучшую реализацию такой игры |
#15
|
||||
|
||||
Я тогда вииграю, 100% Да!!! У меня тоже нет VCL компонентов кстати (кроме главной формы)!!! З.Ы А там что, по три хода должно быть у каждого игрока за раз? Значит, нужно доделать...
Последний раз редактировалось YVitaliy, 12.04.2012 в 22:19. |