Здравствуйте, гость ( Вход | Регистрация )

2 страниц V < 1 2  
Ответить в эту темуОткрыть новую тему
> 2048 скрипт на языке пилота
XaЛBa
сообщение 7.2.2020, 5:40
Сообщение #21


**

Neophyte
Сообщений: 32
Регистрация: 12.4.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.293



нашол, два брейка с низу лишних, забыл про них совсем
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
XaЛBa
сообщение 8.2.2020, 19:37
Сообщение #22


**

Neophyte
Сообщений: 32
Регистрация: 12.4.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.293



и так, с этапом сдвига разобрался, работает на ура, пошел на этап работать с зеркальным отображением - с лева в право. Думал что пройдет вариант с for #j 4 2 -1 , но это не прокатило, в общем, сделал так
Код
 //   ПРАВО
log clear
set delimiter ' '
load_array %test test.txt    //загружаю массив для теста
log open 1 1 450 300
for #i 1 4            //вывод в лог массива
    log %test [#i] Исходник
end_for

//==делаем зеркало==//
set %tmp %test          //возьмем данные их исходника
init_arr %mirror        //промежуточный массив
set size(%mirror)       //обнулить
for #i 1 4              //
    for #j 1 4
        set #a size (%tmp) - #j + 1
        set %mirror [#i #j] %tmp [#i #a]
    end_for
end_for

set %tmp %mirror       //закрепим перемещение
set size(%mirror)      //очистим промежуточный
for #i 1 4             //вывод в лог массива
    log %tmp [#i] Зеркальный
end_for
save_array %tmp tmp.txt    //сохраним массив

//==cсмещение в ЛЕВО==//
for #i 1 4               //строчка
    for #j 2 4           //ячейка
        set #jj #j - 1   //левее ячейка
        while #j > 1     //зациклюсь
            if  %tmp [#i #j] = 0   //пропущу нули
                break
            else                    //леввая и правая равны
                if  %tmp [#i #j] = %tmp [#i #jj]
                    set %tmp [#i #jj] %tmp [#i #j] + 1
                    set %tmp [#i #j]  0
                    set #j #j - 1
                    break
                end_if
                if  %tmp [#i #jj] = 0   //левее ноль
                    set %tmp [#i #jj] %tmp [#i #j]
                    set %tmp [#i #j]  0
                    set #j #j - 1
                else
                    break
                end_if
                set #j #j - 1
            end_if
        end_while
    end_for
end_for
for #i 1 4                //вывод в лог массива
    log %tmp [#i] в ЛЕВО  //что вышло
end_for
//gosub summa
//потом обратно сделать зеркало

end_script
все бы хорошо, да не очень , не хочет работать нормально если .... пример строки
1 2 2 3 Исходник, переворачивает шикарно 3 2 2 1 Зеркальный, а вот сдвиг, уже не так весело 3 3 1 0 в ЛЕВО. Делал так, брал Зеркальный массив и прогонял его через чистый сдвиг в Лево - работает на ура 4 1 0 0 . вот и ни как не пойму, весь блок перелопатил, сэйв-файл смотрел, вссе нормально, в чем тут несовместимость зеркальности со сдвигом, просимо помощи клуба знатоков. З.Ы. танцы с бубном и вызов духа святого Акакия - не помог
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 8.2.2020, 23:46
Сообщение #23


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Сдвиг влево
Код
log clear
log mode compact
set delimiter ' '

//load_array %arr C:\test.txt    // массив для теста
init_arr %arr (1) 4 0 4 0
init_arr %arr (2) 0 2 2 0
init_arr %arr (3) 2 2 2 2
init_arr %arr (4) 8 8 0 0

log open 1 1 450 350

log Исходник
for #i 1 4            //вывод в лог массива
    log %arr [#i]
end_for

//==смещение ВЛЕВО==//
log
log Сложение
for #j 1 4       // для всех строк
    for #i 1 3
        set #ii #i + 1
        if  %arr[#j #i] = 0
            continue
        end_if

        while  %arr[#j #ii] = 0
            set #ii #ii + 1
            if  #ii > 4
                break 2
            end_if
        end_while

        if  %arr[#j #i] = %arr[#j #ii]  // если два соседних элемента равны
            set %arr[#j #i] %arr[#j #i] * 2   // складываем их
            set %arr[#j #ii] 0  // обнуляем второй
        end_if
    end_for
end_for

for #i 1 4
    log %arr [#i]
end_for

log
log Сдвиг влево
for #k 1 4     // для всех строк
    for #j 1 3   // повторить 3 раза
        for #i 1 3  // сдвиг элементов
            set #ii #i + 1
            if  %arr[#k #i] = 0
                set %arr[#k #i] %arr[#k #ii]
                set %arr[#k #ii] 0
            end_if
        end_for
    end_for
end_for

for #i 1 4
    log %arr [#i]
end_for
end_script

Сдвиг вправо
Код
log clear
log mode compact
set delimiter ' '

// load_array %arr C:\test.txt    // массив для теста
init_arr %arr (1) 4 0 4 0
init_arr %arr (2) 0 2 2 0
init_arr %arr (3) 2 2 2 2
init_arr %arr (4) 8 8 0 0

log open 1 1 450 350

log Исходник
for #i 1 4            //вывод в лог массива
    log %arr [#i]
end_for

//==смещение ВПРАВО==//
log
log Сложение
for #j 1 4       // для всех строк
    for #i 4 2 -1
        set #ii #i - 1
        if  %arr[#j #i] = 0
            continue
        end_if

        while  %arr[#j #ii] = 0
            set #ii #ii - 1
            if  #ii < 1
                break 2
            end_if
        end_while

        if  %arr[#j #i] = %arr[#j #ii]  // если два соседних элемента равны
            set %arr[#j #i] %arr[#j #i] * 2   // складываем их
            set %arr[#j #ii] 0  // обнуляем второй
        end_if
    end_for
end_for

for #i 1 4
    log %arr [#i]
end_for

log
log Сдвиг вправо
for #k 1 4     // для всех строк
    for #j 1 3   // повторить 3 раза
        for #i 4 2 -1  // сдвиг элементов
            set #ii #i - 1
            if  %arr[#k #i] = 0
                set %arr[#k #i] %arr[#k #ii]
                set %arr[#k #ii] 0
            end_if
        end_for
    end_for
end_for

for #i 1 4
    log %arr [#i]
end_for
end_script
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
XaЛBa
сообщение 9.2.2020, 4:05
Сообщение #24


**

Neophyte
Сообщений: 32
Регистрация: 12.4.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.293



видимо я постоянно копируюя и видоизменяя, запузырил Брейк, и в результате, из 3 2 2 1 не выходило 4 1 0 0
if %tmp [#i #j] = %tmp [#i #jj]
set %tmp [#i #jj] %tmp [#i #j] + 1
set %tmp [#i #j] 0
set #j #j - 1
break
end_if,
когда идет сравнение двух одинаковых, и по этому он что то объединял а что то нет, как сам пожелает вернее понял, после первого объединения одинаковых, он уходит дальше смотреть условия, а не возвращаеться левее), вощем, пока выход такой - как принудительно его лечить через goto на set #j #j - 1. Из твоих вариантов пока смотрел только на Лево, и там такаже фингня вышла 2 2 2 2 стало 4 4 0 0 , а по сути надо 8 0 0 0, и соответственно, 3 2 2 1 (если не линейно складывать), также выдает 3 3 1 0. А, нет, вру, смотрел я в Право, буду разбираться позже , почему у тебя for #i 4 2 -1 работает, а у меня отказался. но это уже мелочи,
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 9.2.2020, 9:44
Сообщение #25


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
такаже фингня вышла 2 2 2 2 стало 4 4 0 0 , а по сути надо 8 0 0 0

Т. е. ты в эту игру не играл? http://game2048.ru/ Собери ряд из одинаковых чисел и посмотри как он сдвигается.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
XaЛBa
сообщение 9.2.2020, 10:49
Сообщение #26


**

Neophyte
Сообщений: 32
Регистрация: 12.4.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.293



все, плин, это я перегрелся, реально меньше надо за компом сидеть, тупанул, 2 2 2 2 сделает 3 3 0 0, значит было все верно, сам уже над собой ржакаю
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
XaЛBa
сообщение 23.2.2020, 5:01
Сообщение #27


**

Neophyte
Сообщений: 32
Регистрация: 12.4.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.293



проще джаву изучиь чем переписать https://temofeev.ru/info/articles/ii-i-2048...eta-otsechenie/
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V < 1 2
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 2:26
Designed by Nickostyle