Минималистичный подход к игре в стиле змеи - PullRequest
5 голосов
/ 23 января 2011

Два дня назад я получил свой программируемый калькулятор TI-82 STATS (который на самом деле больше похож на TI-83) и хотел запрограммировать игру Snake со встроенным языком TI-BASIC.

Хотя мне пришлось выяснить: TI-BASIC чрезвычайно медленный.Моя первая реализация была настолько медленной, что это даже не было проблемой для игрока!Основным узким местом для меня является управление списком (массивом), содержащим координаты тела змеи.

Я пробовал две вещи:

  • Когда змея движется, обновляйтеположение головы, затем переберите массив из хвостовой позиции и установите myList[ N ] в myList[ N - 1 ], чтобы заставить змею казаться движущейся.

Это, однако, становится неиграбельным послесписок получает около 4 частей.(слишком медленно)

  • Затем я попытался реализовать какую-то очередь / очередь с использованием функций манипулирования списками в TI-BASIC, например, выскочить из конца и добавить что-то в начало массива.

Это сработало немного лучше, но со временем становится слишком медленным.

TL; DR / фактический вопрос:

  • Знаете ли вы хитростьтак что игра не замедляется с увеличением длины змеи? Я видел, что это возможно в других играх, сделанных в TI-BASIC

Ответы [ 3 ]

3 голосов
/ 19 января 2012

Использовать круговой буфер . Для уточнения:

Получить массив, достаточно большой, чтобы вместить максимум змеи. Установите два указателя, один для головы, один для хвоста.

Сначала хвост находился в клетке № 1, а голова - в клетке № 3. Когда змея движется, переместите указатель головы вправо и запишите новую координату. Затем, если пищи нет, переместите указатель хвоста также вправо. Если один из указателей пытается выйти за пределы правого конца массива, перенесите их в начало.

1 голос
/ 08 июня 2015

Трюк, который, скорее всего, сработает, вместо того, чтобы [N - 1] делать [N - 2] или большее число, чтобы вычислить время, математически двигаясь быстрее (вы также должны настроить размер головы так, чтобы иди быстрее

0 голосов
/ 18 января 2015

Простой прием при работе со списками для повышения скорости заключается в полном использовании функций, предоставляемых в меню LIST.В частности, seq может обеспечить значительные преимущества в производительности по сравнению с циклом for, который выполняет ту же цель.Другие функции, которые я считаю полезными - cumSum и ΔList.

...