Задать вопрос

С чего начать написании игры 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 или любых других проффесиональных приспособлений. Как видете я начал со статичной разбора алгоритма игры, но в дальнейшем нужно все прийти к динамической адресации в массивах...
  • Вопрос задан
  • 6947 просмотров
Подписаться 18 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 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.

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

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

Похожие вопросы