Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 08.02.2013
Сообщений: 49
1

игра по типу демократии

16.10.2013, 17:39. Просмотров 925. Ответов 8
Метки нет (Все метки)

Добрый день, я решил сделать игру по типу демократии (есть поле, например 10х10, и каждый ход генерируется фигурка, ее надо переносить на поле, и если будет рядом с ней еще 2 таких же картинок, то они преобразуются в другую картинку выше рангом). Так вот, мне нужна помощь в том, как проверить, если ли рядом с картинкой в соседних ячейках еще 2 таких же картинки (чтобы они все были с общими сторонами) и удалить их. Как реализовать этот момент?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2013, 17:39
Ответы с готовыми решениями:

Игра полоска, по типу спичек
игра с компьютером на полоске stringgrid, можно закрашивать до 3 ячейки. короче когда компьютер...

Простая игра по типу игры в кости
Нужно написать игру на с++. Есть два игрока у каждого по 500 очков. По очереди бросают кости 2...

Игра по типу телешоу Поле Чудес
Всем привет ребята, сразу скажу знания пхп у меня не сильные по этому прошу помощи в реализации...

Какие нации в Civilization 5 Brave New World больше всего склонны к Демократии?
Хочу поиграть за Россию в порядке, против всех демократических стран)

8
46 / 45 / 26
Регистрация: 16.06.2012
Сообщений: 177
16.10.2013, 18:12 2
Двумерным массивом
Pascal
1
array[0..9] of array[0..9] of byte;
0
Заблокирован
16.10.2013, 18:36 3
yaran,
Для этого нужно делать игру как следует. Игровое поле для отображения. А для игры нужен двумерный массив. Вся игра будет происходить в нём.
К примеру у масcива имя Space

Каждая ячейка имеет статус
0- ничего нет
1 и далее ранги
И вот проверяем ячейку
Delphi
1
2
3
4
5
6
7
CyrRang:= Space[x,y]; //Получаем статус ячейки
if (Space[x-1,y]= CyrRang) and  (Space[x+1,y]= CyrRang) then
                                             begin;
                                             Space[x,y]:=0;
                                             Space[x-1,y]:=0;
                                             Space[x+1,y]:=0;  
                                             end;
После того, как ход сделан и весь массив принял текущее состояние, цикл сканирует его и каждый элемент отображает на игровом поле.

Добавлено через 3 минуты
enk,
Не путайся под ногами

Двухмерный массив объявляется так
Delphi
1
Space: array[0..11, 0..11] of byte;
Дело тут вот в чём Игровое поле 10 на 10
Но.. у него есть края. И дело в том, что при сравнении на краю... с чем будешь сравнивать.
А так лучше присобачить к игровому поле "стенки" вот они и будут по линиям 0 и 11 там записано значение, скажем 255
Сделать это надо так.
Объявляете массив-константу. В нём "рисуете" исходное поле.
При начале игры или при следующей игре он копируется в ваше игровое поле.

И вообще, подобные игры делаются на "таблицах"
Исходный рисунок - таблица
Игровое поле - таблица.
Только не путайте с компонентом таблица.
Таблица - это многомерные массивы, хранящие исходные и изменяемые в процессе данные
1
1 / 1 / 0
Регистрация: 08.02.2013
Сообщений: 49
16.10.2013, 18:37  [ТС] 4
спасибо, будем пробовать
0
46 / 45 / 26
Регистрация: 16.06.2012
Сообщений: 177
17.10.2013, 15:27 5
Цитата Сообщение от Lirrk Посмотреть сообщение
Двухмерный массив объявляется так
Delphi
1
Space: array[0..11, 0..11] of byte;

Не по теме:

Ах, сударь, простите, что помешал! Конечно же только так, и никак более! И TArray<array of byte> тоже нельзя, нет.



Добавлено через 45 секунд
Цитата Сообщение от Lirrk Посмотреть сообщение
Но.. у него есть края. И дело в том, что при сравнении на краю... с чем будешь сравнивать.
Проверять на выход за границы массива не модно или стало слишком сложно?

Добавлено через 4 минуты
Цитата Сообщение от Lirrk Посмотреть сообщение
Объявляете массив-константу. В нём "рисуете" исходное поле.
В суть игры не углублялся, но какой смысл, если стартовое поле всегда будет одинаковое? Может всё-таки не константу? И заполнять в цикле случайными фигурами, а при создании новой игры заполнять заново.
0
Заблокирован
17.10.2013, 15:42 6
enk,
Зачем проверять. когда проще ограничить? Представьте что у вас лабиринт. Вы там тоже будете проверять? А если вы не знаете где стенка и она может быть где угодно? так же и здесь. Самые лучшие и быстрые игры сделаны на основе таблиц. Если игровое поле стандартно, тогда константа. Если меняется. Тогда можно и генерировать. Это не принципиально. Я высказал свой подход. Он освоен на огромном опыте. Я тоже когда-то проходил через всё это. Я тоже писал много чего не так. И со временем у меня выработались принципы написания игр. А со временем я узнал, что многие подходы применяются профессионалами. Ну раз нравится наступать на грабли, то пожалуйста. Не нужны простые оптимальные решения - пожалуйста. Я не против.
0
46 / 45 / 26
Регистрация: 16.06.2012
Сообщений: 177
17.10.2013, 15:47 7
Кликните здесь для просмотра всего текста
Цитата Сообщение от Lirrk Посмотреть сообщение
enk,
Зачем проверять. когда проще ограничить? Представьте что у вас лабиринт. Вы там тоже будете проверять? А если вы не знаете где стенка и она может быть где угодно? так же и здесь. Самые лучшие и быстрые игры сделаны на основе таблиц. Если игровое поле стандартно, тогда константа. Если меняется. Тогда можно и генерировать. Это не принципиально. Я высказал свой подход. Он освоен на огромном опыте. Я тоже когда-то проходил через всё это. Я тоже писал много чего не так. И со временем у меня выработались принципы написания игр. А со временем я узнал, что многие подходы применяются профессионалами. Ну раз нравится наступать на грабли, то пожалуйста. Не нужны простые оптимальные решения - пожалуйста. Я не против.

Не по теме:

Просто дак дерзко и активно начали отстаивать свою позицию, как будто она одна единственная.

0
Заблокирован
17.10.2013, 15:48 8
enk,
Из тех, что предложено - да. Предложите лучше - заткнусь.
0
46 / 45 / 26
Регистрация: 16.06.2012
Сообщений: 177
17.10.2013, 21:20 9
Действительно есть разница в том, как объявлять массив?
Цитата Сообщение от enk Посмотреть сообщение
Space: array[0..11, 0..11] of byte;
Это даст хоть +0.1% к производительности, по сравнению с объявлением по-другому?
Цитата Сообщение от Lirrk Посмотреть сообщение
Представьте что у вас лабиринт.
В данной конкретной задаче это не требуется, т.к. чётко задан размер матрицы. И можно просто проверять
Delphi
1
2
if (y < length(matrix)) then
  if (x < matrix[y]) then
Хотя, вариант со стенками тоже не плох, можно в цикле 0..1 сделать
Delphi
1
case matrix[y + i1, x + i2] of...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2013, 21:20

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Игра по типу "Поле чудес"
В окне программы вводится несколько звёздочек - ******, которые скрывают слово ( например CABBAGE -...

Выражение должно относиться к целочисленному типу или типу перечисления без области видимости
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { int N; double Y = 0;...

Выражение должно относиться к целочисленному типу или типу перечислений без области видимости
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class lVector { int Vector1;...

Выражение должно относиться к целочисленному типу или типу перечисления без области видимости
Добрый день,столкнулся с проблемой &quot;Выражение должно относиться к целочисленному типу или типу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.