Flood-it!

Entertainment for 5 minutes, hours, days
  • интересно. под фантомом сначала вообще ничего не произошло - запускаю - ноль эмоций, висит на считывании события. посмотрел в код - оказывается, ты рисуешь только по событию перерисовки - видимо (и это нигде не документировано) - Колибри изначально посылает нити (даже если у неё нет окна) событие перерисовки окна... добавил, теперь рисуется. :)
  • У любой программы есть окно. Даже если оно не определено и не рисуется.
  • (ну, такое-то окно вообще у всего на свете есть.:)
  • dzavalishin wrote:интересно. под фантомом сначала вообще ничего не произошло - запускаю - ноль эмоций, висит на считывании события. посмотрел в код - оказывается, ты рисуешь только по событию перерисовки - видимо (и это нигде не документировано) - Колибри изначально посылает нити (даже если у неё нет окна) событие перерисовки окна... добавил, теперь рисуется. :)
    А можно скрин программы Flood-it в Фантоме?
    Из хаоса в космос
  • Flood-it! fv2.3
    Делать было нефиг, а руки чесались. Переписал версию 2.2 на fasm, а заодно внёс некоторые изменения:
    1. Окно справки теперь закрывается, если закрыть основное окно.
    2. Окно проверяет "свернутость в заголовок" надёжным способом.
    3. Генератор псевдослучайных чисел полностью переписан (хз как называется этот тип PRNG, но вроде он работает :) ); теперь он работает быстрее и не использует команду rdtsc.
    4. Благодаря п. 3, теперь Flood-it! теоретически можно запустить на любом 32-битном x86-совместимом процессоре, а не только на P6+ как раньше.
    5. Прорисовка сообщения о победе/прогрыше (fail/win) теперь построчная (раньше каждый блок рисовался отдельно).
    6. В игру теперь можно полноценно играть без мыши - только используя клаву
    Cкриншот:
    Flood-it!.png
    Flood-it!.png (6.11 KiB)
    Viewed 6953 times
    Из-за того, что в этой порядком оптимизированной программе небольших размеров, написанной на ассемблере, избыточности мало, то и размер закупаковонного файла чуть больше 4*512 байт. Так что в четыре сектора втулить не получится :lol:
    flood-it!-fv2.3.7z (13.38 KiB)
    Downloaded 307 times
    Leency, по поводу С/С-- версии:
    а) при вызове потока справки указатель на вершину стека устанавливается, на самом деле, на дно стека, #stack нужно заменить на #stak+#stak_size (или как там ;) ), ведь в данном случае стек растёт сам знаешь куда
    б) лучше проверять свернуто ли окно в заголовок по байту со смещением +70, который лежит в буфере возвращаемом сисфункцией 9
    в) кстати loose_matrix надо переименовать в loss_matrix, а то получается какая-то "расхлябанная" матрица :)

    P.S. Не сразу понял, что в C-- выражение x-a*b равнозначно (x-a)*b, а не x-(a*b), т. к. с C-- раньше не работал.
  • Joaquin wrote:Flood-it! fv2.3
    Делать было нефиг, а руки чесались. Переписал версию 2.2 на fasm, а заодно внёс некоторые изменения:
    Это Flood-it на Си - твой код огорчает его. :cry:
  • Mario wrote:
    Joaquin wrote:Flood-it! fv2.3
    Делать было нефиг, а руки чесались. Переписал версию 2.2 на fasm, а заодно внёс некоторые изменения:
    Это Flood-it на Си - твой код огорчает его. :cry:
    ты по поводу чего-то вроде

    Code: Select all

    imul	esi, ebx
    add	esi, edx
    add	esi, edx
    
    ?
  • Дима забей! Это просто еще одно мое "ценное" замечание, которое будет выпилено при очередном карательном рейде, с мотивировкой "говорите по существу".
  • Mario wrote:
    Joaquin wrote:Flood-it! fv2.3
    Делать было нефиг, а руки чесались. Переписал версию 2.2 на fasm, а заодно внёс некоторые изменения:
    Это Flood-it на Си - твой код огорчает его. :cry:
    Это как понять? В архиве, который я выложил, нет ни одного фрагмента на C.
    SoUrcerer wrote:ты по поводу чего-то вроде

    Code: Select all

    imul   esi, ebx
    add   esi, edx
    add   esi, edx
    
    ?
    А вот это я тупанул немного. Разумеется это надо заменить на:

    Code: Select all

    imul esi
    lea [esi+edx*2]
    
  • Специально описняю - сообщение касается тебя чуть более чем никак. Дальше должен сам додумать.
  • Кстати, большая просьба потестировать работу генератора случайных чисел на вменяемость - все цвета должны использоваться и поле должно быть заполнено хаотично. Если их меньше или поле заполнено повторяющимися блоками, напишите, пожалуйста.
  • Joaquin wrote:Кстати, большая просьба потестировать работу генератора случайных чисел на вменяемость - все цвета должны использоваться и поле должно быть заполнено хаотично.
    По какой формуле ты генерируешь числа? Когда-то в интернете я нашел такую x(k+1) = (a*x(k)+c) mod m с рекомендуемыми параметрами a=22695477, c=1, m=2^32

    Code: Select all

    rand_x dd 0
    
    align 4
    rand_next:
    ;x(k+1) = (a*x(k)+c) mod m
    ; a=22695477, c=1, m=2^32
    push eax
            mov eax,dword[rand_x]
            imul eax,22695477
            inc eax
            mov dword[rand_x],eax
    pop eax
            ret
  • IgorA wrote:По какой формуле ты генерируешь числа?
    Алгоритм я ниоткуда не копировал, а написал сам (лень было разбираться с существующими формулами), поэтому не в курсе как он называется. Вычисление происходит таким образом:
    определение переменной seed:

    Code: Select all

    seed = 0xBABEFACE
    randomize, который вызывается каждый раз во время начала новой игры, делает следующее:

    Code: Select all

    seed = seed xor (current_time xor tick_count),
    где current_time = текущее время, tick_count = значение счётчика времени  ("число сотых долей секунды, прошедших с момента запуска системы")
    
    функция random, принимающая значения min и max (max должен быть больше min для корректного результата), делает такие вещи:

    Code: Select all

    seed = (seed*5+0xFADEBEEF) rol 11
    return (abs(seed) mod (max-min+1))+min
    
    В общем, реализация деревянная, поэтому не уверен, что генератор работает идеально...
  • Joaquin wrote:Flood-it! fv2.3
    Делать было нефиг, а руки чесались. Переписал версию 2.2 на fasm, а заодно внёс некоторые изменения:
    1. Окно справки теперь закрывается, если закрыть основное окно.
    2. Окно проверяет "свернутость в заголовок" надёжным способом.
    3. Генератор псевдослучайных чисел полностью переписан (хз как называется этот тип PRNG, но вроде он работает :) ); теперь он работает быстрее и не использует команду rdtsc.
    4. Благодаря п. 3, теперь Flood-it! теоретически можно запустить на любом 32-битном x86-совместимом процессоре, а не только на P6+ как раньше.
    5. Прорисовка сообщения о победе/прогрыше (fail/win) теперь построчная (раньше каждый блок рисовался отдельно).
    6. В игру теперь можно полноценно играть без мыши - только используя клаву
    Cкриншот:
    Flood-it!.png
    Из-за того, что в этой порядком оптимизированной программе небольших размеров, написанной на ассемблере, избыточности мало, то и размер закупаковонного файла чуть больше 4*512 байт. Так что в четыре сектора втулить не получится :lol:
    flood-it!-fv2.3.7z
    Leency, по поводу С/С-- версии:
    а) при вызове потока справки указатель на вершину стека устанавливается, на самом деле, на дно стека, #stack нужно заменить на #stak+#stak_size (или как там ;) ), ведь в данном случае стек растёт сам знаешь куда
    б) лучше проверять свернуто ли окно в заголовок по байту со смещением +70, который лежит в буфере возвращаемом сисфункцией 9
    в) кстати loose_matrix надо переименовать в loss_matrix, а то получается какая-то "расхлябанная" матрица :)
    а) как узнать размер стека я не знаю, но он ведь всегда равен 100, или нет? Заменил CreateThread(#help,#stak); на CreateThread(#help,#stak+100); ничего не изменилось. Всё работает и я решил оставить как было раньше. Тут пусть lev разбирается, он круче))
    б) сделано
    в) сделано.
    6 - и в мою тоже можно :)
    4 - определяется флагом компиляции, но Колибри кажись и так нельзя на старых процессорах запускать, потому и стоит высокий флаг
    1 - можно реализовать, но стоит ли игра свеч
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 5 guests