ФлеймФорумРазработка игр

Пятнашки

Страницы: 1 2 Следующая »
#0
14:36, 29 апр 2006

Кто нить реализовывал?
Проблема в том, чтобы по случайной их перестановке сразу же сказать можно ли такие пятнашки расставить обратно или нет. Нарыл в инете что нужно смотреть на четность числа инверсий, но что то я так и не понял что за инверсии. Мож кто подскажет?

#1
15:39, 29 апр 2006

Элементарно - берешь исходную позицию и переставляешь - стопудово можно будет обратно переставить ;)

#2
15:41, 29 апр 2006

А тебе что - надо разбросать их чтобы потом можно было "решить"?
Их всегда можно расставить обратно ;) ...если только ты их вообще не по-рандому разбрасываеш на поле.
Представь, что у тебя есть пятнашки, дырка и они фиксированы(так что ты можеш двигать только ближайшие к дырке пятнашки на место этой самой дырки)
и распаложены в стартовой позиции:
1    2  3  4
5    6  7  8
9  10 11 12
13 14 15  0  (0 - дырка)
Чтобы их разбросать - делаеш некий цикл, который будет решать - какую из ближайших(к дырке) пятнашек двигать на дырку и двигать ли вообще :)
усё

#3
16:08, 29 апр 2006

Да ё-мае :)
У нас препод такой, что он потребовал сделать так, чтобы расстановку пятнашек можно сделать вручную, т.е. не от дырки - получается рандомно. Если бы я сам раскидывал их понятно дело такой проблемы бы не встало. )

#4
16:43, 29 апр 2006

ищи тут: http://systemhalt.nm.ru/

#5
16:45, 29 апр 2006

Уже обсуждалось.
Если перестановка получена из перестановки

1   2  3  4
5   6  7  8
9  10 11 12
13 14 15  x

то она собирается. Если перестановка получена из перестановки

1   2  3  4
5   6  7  8
9  10 11 12
13 15 14  x

то она не собирается.

#6
17:43, 29 апр 2006

kronos_vano
Число инверсий ето количество таких чисел что их индексы i<j но a>[j]
вот у Coriolan в первом случае 0 инверсий, во 2ом 1. Т.е. можно просто считать количетво инверсий, если четно то намана все если не то плохо.

#7
17:57, 29 апр 2006

Щас не буду полный код давать, ну в общем алгоритм действий такой:
Заданы переменные: 1 - текущий номер, 15 - позиции.
По циклу прибавляеться текущий номер и генерируеться место, которое записываеться в соответствующую переменную. Перед этим нужно проверить, не равна ли этому числу другая позиция. Если нет, то записать, если да, то заного. В общем доработать это и все в порядке!

#8
14:36, 30 апр 2006

У меня получилось так:

function CheckField:boolean;
var
  d,i,j:integer;
begin
  d:=0;
  // Определяем число инверсий
    for i:=1 to 15 do
      if field[i]<>0 then
      begin
        j:=i;
        while j<=field[i] do
        begin
          inc(j);
          if (field[i]>field[j])and(field[j]<>0)
          then inc(d);
        end;
      end;
  result:=((d mod 2)=0);
end;

Осталась теперь проблема как заставить компьютер переводить пятнашки  в исходное состояние :)

#9
16:31, 30 апр 2006

kronos_vano
>Осталась теперь проблема как заставить компьютер переводить пятнашки в исходное состояние :)

Что ты имеешь ввиду под словами "в исходное состояние"?
Если чтобы все встали по порядку, то просто создаешь функцию, присвояющую всем переменным - позициям соответствующие позиции, первой - первую, второй - вторую и.т.д.
Если чтобы выстроились как после генерации мест, то создай еще столькоже переменных и после генерации присваивай их равными соответственно.

#10
14:27, 2 мая 2006

Если менять местами по 2 фишки чётное число раз - то позиция собираема, а место без фишки не учитывай. т.е. если в процедуру перестановки попадает место без фишки, то она не отрабатывает

#11
22:37, 9 мая 2006

На правах UP-а.
Так и не смог реализовать функцию проверяющую возможность расставить пятнашки в нормальный вид. Мож кто поделиться? Выше описанная мною не работает...
Инверсии инверсии... как только я эти инверсии не считал - не работает и все (. Не понимаю как их считать (

#12
22:56, 9 мая 2006

kronos_vano
та блин, ссылку же уже приводил: http://systemhalt.nm.ru/other.html (с сорцами на бейсике и на делфи)

#13
23:02, 9 мая 2006

NightmareZ
Если чесна я там не нашел того что нада ща еще раз гляну...

#14
0:05, 10 мая 2006

kronos_vano
Возьми исходную складываемую конфигурацию и просто 100-200 раз переставь случайную фишку (с одной из 4-х сторон от пустой клетки) на пустое место. Так ты точно будешь знать, что ЭТО можно сложить. И не надо ничего проверять.

Страницы: 1 2 Следующая »
ФлеймФорумРазработка игр

Тема в архиве.