Вот и 10 октября. В Новосибирске идёт снег.. А он похож на тетрис, было бы круто еслиб снег собрав линию тоже исчезал).
На протяжении выходных я немного переписал код, стало почище.. пофиксил багу). но всё стоит по прежнему на этапе простого падения фигуры вниз.
На буднях по сути я только дорабатывал внешний вид,…
Ну иначе было бы странно как всё помещается в эмулируемой игре ;) В игре Chrono Trigger к примеру порядка 25 треков, длящихся примерно по 1.5 мин, тексту почти на 3 МБ, Добавим ко всему этому монстров, персонажей, локации, код, эффекты, звуковые эффекты - и получаем ром для супер нинтендо весом всего 4.03 МБ. Святая простынь...
Melissa,
В эмуляторе, впрочем думаю как и в приставке денди имеется набор инструментов (генераторы звука), которые воспроизводят определенные звуки, всего их вроде 11 штук.
В роме же содержатся инструкции(ноты? :D) для генератора какой тональности и какой длительности издать звук. (команды)
Т.е поидее качество звука эмулятора зависит от качества этих самых генераторов(инструментов) (квадраты, триангл, шум и другие) и от возможности звуковой карты издать эти звуки.
Наступило 3 октября, теперь я понимаю, что мне категорически не хватает времени на конкурс.
Неудобно по времени начался, для меня, на полмесяца-месяц раньше бы.. (сейчас много всего IRL на голову свалилось, некогда заниматься, но я стараюсь выкроить время.)
Начнём с того что я переделал модели как планировал,…
Массив юнитов переделал), вообще все функции переписываю сижу. Такой трэшак там..
Сам понимаю что стрёмно составил, но что-то нормальное в голову не приходит, как написать). Я без образования в этой сфере, помог бы кто :D.
Если кто подскажет как правильно написать, я только рад буду научиться)...
мои тугие функции
//Двумерный массив внутри 1 массива.
//X от 1 до 32
//Y от 1 до 32
function mx takes integer x, integer y returns integer
return 32*(x-1)+(y-1)
endfunction
//Игровая система координат, принимает INT, возвращает реальный X или Y на середину тайла
//X 1 Y 1 - самый нижний левый тайл на карте
function xy takes integer x returns real
//call DisplayTextToForce( GetPlayersAll(), R2S(-1856+(I2R(x)*128)))
return -2112+(I2R(x)*128)
endfunction
//Спавн блок-юнита
function spawnblockunit takes integer x, integer y, integer ut, integer color returns nothing
local integer id = mx(x,y)
call DisplayTextToForce( GetPlayersAll(), "ID - "+I2S(id))
set udg_Unit[id] = CreateUnit(Player(0), udg_BlockType[ut], xy(x), xy(y), 270)
call SetUnitUserData( udg_Unit[id], color )
call cu(udg_Unit[id])
endfunction
//спавн next-фигуры
function NextFigure takes integer p returns nothing
call DisplayTextToForce( GetPlayersAll(), "NEXT FIGURE player - "+I2S(p))
set udg_NextFigure[p] = GetRandomInt(1, 7)
if ( udg_NextFigure[p] == 1 ) then
call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],4,7)
call spawnblockunit(udg_NextX[p],udg_NextY[p],3,7)
call spawnblockunit(udg_NextX[p]+1,udg_NextY[p],3,7)
call spawnblockunit(udg_NextX[p]+2,udg_NextY[p],2,7)
else
endif
if ( udg_NextFigure[p] == 2 ) then
call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],4,4)
call spawnblockunit(udg_NextX[p],udg_NextY[p],9,4)
call spawnblockunit(udg_NextX[p]+1,udg_NextY[p],2,4)
call spawnblockunit(udg_NextX[p],udg_NextY[p]-1,6,4)
else
endif
if ( udg_NextFigure[p] == 3 ) then
call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],11,8)
call spawnblockunit(udg_NextX[p],udg_NextY[p],14,8)
call spawnblockunit(udg_NextX[p]-1,udg_NextY[p]-1,13,8)
call spawnblockunit(udg_NextX[p],udg_NextY[p]-1,12,8)
else
endif
if ( udg_NextFigure[p] == 4 ) then
call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],4,6)
call spawnblockunit(udg_NextX[p],udg_NextY[p],3,6)
call spawnblockunit(udg_NextX[p]+1,udg_NextY[p],14,6)
call spawnblockunit(udg_NextX[p]+1,udg_NextY[p]-1,6,6)
else
endif
if ( udg_NextFigure[p] == 5 ) then
call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],11,10)
call spawnblockunit(udg_NextX[p],udg_NextY[p],3,10)
call spawnblockunit(udg_NextX[p]+1,udg_NextY[p],2,10)
call spawnblockunit(udg_NextX[p]-1,udg_NextY[p]-1,6,10)
else
endif
if ( udg_NextFigure[p] == 6 ) then
call spawnblockunit(udg_NextX[p],udg_NextY[p],11,9)
call spawnblockunit(udg_NextX[p]+1,udg_NextY[p],2,9)
call spawnblockunit(udg_NextX[p]-1,udg_NextY[p]-1,4,9)
call spawnblockunit(udg_NextX[p],udg_NextY[p]-1,12,9)
else
endif
if ( udg_NextFigure[p] == 7 ) then
call spawnblockunit(udg_NextX[p]-1,udg_NextY[p],4,2)
call spawnblockunit(udg_NextX[p],udg_NextY[p],14,2)
call spawnblockunit(udg_NextX[p],udg_NextY[p]-1,13,2)
call spawnblockunit(udg_NextX[p]+1,udg_NextY[p]-1,2,2)
else
endif
endfunction
//движение юнита с точки xy в точку xy
function MyMoveUnitXY takes integer xold, integer yold, integer xnew, integer ynew returns nothing
local integer oldid = mx(xold, yold)
local integer newid = mx(xnew, ynew)
SetUnitX(udg_Unit[oldid], xy(xnew))
SetUnitY(udg_Unit[oldid], xy(ynew))
set udg_Unit[newid] = udg_Unit[oldid]
set udg_Unit[oldid] = null
endfunction
//сдвиг юнита по оси X
function MyMoveUnitX takes integer xold, integer yold, integer offset returns nothing
local integer oldid = mx(xold, yold)
local integer newid = mx(xold+offset, yold)
SetUnitX(udg_Unit[oldid], xy(xold+offset))
set udg_Unit[newid] = udg_Unit[oldid]
set udg_Unit[oldid] = null
endfunction
//сдвиг юнита по оси Y
function MyMoveUnitY takes integer xold, integer yold, integer offset returns nothing
local integer oldid = mx(xold, yold)
local integer newid = mx(xold, yold+offset)
SetUnitY(udg_Unit[oldid], xy(yold))
set udg_Unit[newid] = udg_Unit[oldid]
set udg_Unit[oldid] = null
endfunction
//Перенос блока с положения Next на место Start
function MoveBlockToStart takes integer p, integer figa returns nothing
call MyMoveUnitXY(udg_NextX[p],udg_NextY[p],udg_StartX[p],udg_StartY[p])
if (figa == 1 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p],udg_StartX[p]+1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+2,udg_NextY[p],udg_StartX[p]+2,udg_StartY[p])
endif
if (figa == 2 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p],udg_StartX[p]+1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p],udg_NextY[p]-1,udg_StartX[p],udg_StartY[p]-1)
endif
if (figa == 3 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p]-1,udg_StartX[p]-1,udg_StartY[p]-1)
call MyMoveUnitXY(udg_NextX[p],udg_NextY[p]-1,udg_StartX[p],udg_StartY[p]-1)
endif
if (figa == 4 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p],udg_StartX[p]+1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p]-1,udg_StartX[p]+1,udg_StartY[p]-1)
endif
if (figa == 5 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p],udg_StartX[p]+1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p]-1,udg_StartX[p]-1,udg_StartY[p]-1)
endif
if (figa == 6 )
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p],udg_StartX[p]+1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p]-1,udg_StartX[p]-1,udg_StartY[p]-1)
call MyMoveUnitXY(udg_NextX[p],udg_NextY[p]-1,udg_StartX[p],udg_StartY[p]-1)
endif
if (figa == 7 )
call MyMoveUnitXY(udg_NextX[p]-1,udg_NextY[p],udg_StartX[p]-1,udg_StartY[p])
call MyMoveUnitXY(udg_NextX[p],udg_NextY[p]-1,udg_StartX[p],udg_StartY[p]-1)
call MyMoveUnitXY(udg_NextX[p]+1,udg_NextY[p]-1,udg_StartX[p]+1,udg_StartY[p]-1)
endif
endfunction
//задача функции перевести фигуру "некст" в состояние "текущая"
function NextToCurrent takes integer p returns nothing
set udg_CurrentFigure[p] = udg_NextFigure[p]
set udg_CurrentID[p] = mx(udg_StartX[p],udg_StartY[p])
set udg_CurrentTurn[p] = 1
call MoveBlockToStart(p, udg_CurrentFigure[p])
endfunction
//проверка юнита в оффсетах от Current по X,Y
function NullCheck takes integer p, integer x, integer y returns boolean
if udg_Unit[mx(tx(udg_CurrentID[p])+x,ty(udg_CurrentID[p])+y)]==null
return true
endif
return false
endfunction
С цветами тоже загвоздка выходит..
Содержание чёрного в перепадах цветов не одинаковое, поэтому цвет, получающийся при смешении альфы с самым ярким в наборе местами даёт не тот результат.
Похоже что этим способом не получится сделать 1 в 1. Только похоже..
Вот и наступило 26 сентября, а это значит что именно сегодня участники конкурса карт «Мини-игры» должны поделиться информацией о том как обстоят у них дела на этапе разработки.
Мне наверное в каком то роде не повезло так как остальным, я действительно начал работу…
Вчера добрался до компутера, начал делать, катастрофически застрял на алгоритмах).
Если кто поможет с алгоритмами буду очень благодарен, голову сломал уже (:
структура это класс объекта
например структура яблоко
просто яблоко не определённое
а экземпляр структуры(объект) это определённое яблоко
яблоко имеет свойства(поля) например цвет,вкус
и имеет действия(методы) например оно может портиться,может упасть
Я это понимаю в принципе, поверхностно. У меня в голове аналогия с бд, 1 строка, несколько полей).
Просто я на примерах учусь, мне нужно пару примеров повторить, пощупать).
awesomesk1ll,
структура это класс объекта
например структура яблоко
просто яблоко не определённое
а экземпляр структуры(объект) это определённое яблоко
яблоко имеет свойства(поля) например цвет,вкус
и имеет действия(методы) например оно может портиться,может упасть
прочитай тот файл что я скинул
вот он xgm.guru/files/705/97998/comments/178733/vJass.doc
это переведённый док по вджассу(структуры это часть вджасса)
без них код будет очень сложным в дальнейшим
так же можешь посмотреть примеры юза структур
Комментарии проекта Dendy
Dendy - Неделя четвёртая - Тетрис
Приятного просмотра =).
Неделя третья - Тетрис
На протяжении выходных я немного переписал код, стало почище.. пофиксил багу). но всё стоит по прежнему на этапе простого падения фигуры вниз.
На буднях по сути я только дорабатывал внешний вид,…
Ред. Melissa
В игре Chrono Trigger к примеру порядка 25 треков, длящихся примерно по 1.5 мин, тексту почти на 3 МБ, Добавим ко всему этому монстров, персонажей, локации, код, эффекты, звуковые эффекты - и получаем ром для супер нинтендо весом всего 4.03 МБ. Святая простынь...
Ред. awesomesk1ll
В эмуляторе, впрочем думаю как и в приставке денди имеется набор инструментов (генераторы звука), которые воспроизводят определенные звуки, всего их вроде 11 штук.
В роме же содержатся инструкции(ноты? :D) для генератора какой тональности и какой длительности издать звук. (команды)
Т.е поидее качество звука эмулятора зависит от качества этих самых генераторов(инструментов) (квадраты, триангл, шум и другие) и от возможности звуковой карты издать эти звуки.
Неделя вторая - Тетрис
Неудобно по времени начался, для меня, на полмесяца-месяц раньше бы.. (сейчас много всего IRL на голову свалилось, некогда заниматься, но я стараюсь выкроить время.)
Ред. awesomesk1ll
Сам понимаю что стрёмно составил, но что-то нормальное в голову не приходит, как написать). Я без образования в этой сфере, помог бы кто :D.
Содержание чёрного в перепадах цветов не одинаковое, поэтому цвет, получающийся при смешении альфы с самым ярким в наборе местами даёт не тот результат.
Похоже что этим способом не получится сделать 1 в 1. Только похоже..
Ред. Buulichkaa
а что это за лолокостыль с колор апдейтом?? про базы данных слышали?
вот тебе норм вброс
Неделя первая - Тетрис
Ред. awesomesk1ll
Если кто поможет с алгоритмами буду очень благодарен, голову сломал уже (:
Ред. awesomesk1ll
Просто я на примерах учусь, мне нужно пару примеров повторить, пощупать).
Ред. nvc123
структура это класс объекта
например структура яблоко
просто яблоко не определённое
а экземпляр структуры(объект) это определённое яблоко
яблоко имеет свойства(поля) например цвет,вкус
и имеет действия(методы) например оно может портиться,может упасть
прочитай тот файл что я скинул
вот он xgm.guru/files/705/97998/comments/178733/vJass.doc
это переведённый док по вджассу(структуры это часть вджасса)
без них код будет очень сложным в дальнейшим
так же можешь посмотреть примеры юза структур