С чего начать написании игры 2048 на JavaScript?

Решился написать игру 2048, и все бы хорошо, но не знаю с чего начать.
The-Most-Downloaded-App-on-iTunes-Is-Now
Я напишу с чего бы начал я, а вы напишите с чего начали бы вы:

var data = []; //масив для хранения данных

data = [,,,,,,,,,,,,,,,,] //поле 4x4


Хм, нужны будут методы, тогда:

var twentyFortyeight = {}; //создаем объект

twentyFortyeight.data = [,,,,,,,,,,,,,,,,]; //поле 4x4

twentyFortyeight.ready = function(){
  //twentyFortyeight.data[0] = 2;
  //twentyFortyeight.data[1] = 2;
  //for(){console.log('выводим 4 элемента массива');}
};
twentyFortyeight.ready();
// 2 2 0 0
// 0 0 0 0
// 0 0 0 0
// 0 0 0 0
twentyFortyeight.up = function(){
//
}
twentyFortyeight.left = function(){
  if(twentyFortyeight.data[3]==undefined || twentyFortyeight.data[3]===twentyFortyeight.data[3-1]){}
  //data[1] равен data[0], значит складываем, помещаем сумму в data[0], удаляем data[1]
//проверка на равенство каждого 4 элемента массива на равенство с предедущим
}


Напишите что по вашему мнению действительно ускорит разработку игры. К примеру использования DDT или любых других проффесиональных приспособлений. Как видете я начал со статичной разбора алгоритма игры, но в дальнейшем нужно все прийти к динамической адресации в массивах...
  • Вопрос задан
  • 6810 просмотров
Пригласить эксперта
Ответы на вопрос 5
ManWithBear
@ManWithBear
Swift Adept, Prague
Всю игру оборачиваете в отдельную сущность.
Геттеры: кол-во размерностей игрового поля, размер соответствующей размерности, текущее состояние поля.
Методы: создание новой игры(массив размерностей), применить вектор движения(вектор)

Это всё что вам нужно. В итоге вы получаете не унылую игру в поле 4на4, а абстракцию над ней с возможностью игры в любом кол-ве размерностей.

UPD Ещё наверняка понадобится геттер состояния игры (игра продолжается или игра закончена)

UPD2 Получился банальный пример ответа на вопрос "Зачем линейка/математика программисту" :D
Ответ написан
Комментировать
pstn
@pstn
Веб-разработчик
Можно глянуть как сам автор сделал, код довольно понятный, да и комментарии присутствуют.

Конкретно по вопросу: создать объект игрового поля (сетки), описать события для управления в игре, сделать игровые состояния (победа, проигрыш, в процессе). Потом можно уже колдовать над функцией добавления новой ячейки в поле, которая размещается в любую свободную клетку (например, на подходах к 2048 увеличить вероятность появления новой ячейки к самым крупным и т.п.).
Ответ написан
Комментировать
@agershun
Можно начать с прохождения курса на Udacity, который посвящен разработке 2048 на JavaScript

https://www.udacity.com/course/ud248
Ответ написан
Комментировать
@korotkin
Нужно не страдать фигней в ide, а взять лист бумаги.
Шаблон приложения уже есть, отлично. Дальше нарисовать диаграмму, как это все между собой взаимодействует (flow diagram, например).
Составить план (диаграмма Ганта вполне подойдет) и двигаться по нему.
На первый взгляд эти действия покажутся лишними. Поверьте, когда вы завершите, всплывет много подводных камней.
Ответ написан
@romkaby
Как то ради интересна на яваскрипте сделал 2048, тонкости не помню, но принцип был такой:
data - двумерный массив 4х4, где хранились все "кубики"
blocked - такой же массив 4х4 для пометки секторов, где в этот момент уже было сложение кубиков

Далее при нажатии пробегаюсь по всем кубикам начиная от края ближнего к той стороне, куда сдвигаем (т.е. если нажали "вниз", то просмотриваю все столбцы по кубикам снизу вверх).

При этом
1.1) Если есть пустота - сдвигаю,
1.2) Если нет пустоты - проверка какой именно кубик
1.2.1) Если кубик != нашему - оставляем все на месте
1.2.2) Если это такой же кубик, то проверяем массив blocked на предмет того, что этот кубик мы получили путем сложения, или он и был до этого таким
1.2.2.1) Если кубик и был таким - наш удваиваем, перемещаем (анимация), а тот удаляем, меняем данные в data + ставим блок в массив blocked
1.2.2.2) Если кубик уже умноженный на этом ходе - оставляем все как есть

Собственно вся логика, ну и проверка на проигрыш по принципу "если некуда ходить - лузер" и на выигрыш при получении блока 2048.

Если интересно самому покопаться, добиться - дерзайте, ничего сложного нету, главное - построить логику и она не обязательна будет схожа с тем, что я описал. Если интересно посмотреть готовый вариант - могу скинуть линк на свой вариант, но за чистоту кода не отвечаю, написан за один вечер)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы