Enquanto estava construindo o objeto "snake" que é referente ao protagonista do meu jogo. Tive contato com uma estrutura de dados que ainda não havia ouvido falar: deque
.
Quando usar deque
?
É usado quando precisamos de inserção ou remoção eficiente no inicio ou no fim da sequência. E reparando, isso faz sentido para o contexto da snake, tendo em vista que o protagonista irá crescer conforme se alimenta no jogo. Porém, essa é a melhor opção? Vamos dar uma olhada em outras estruturas que já ouvi falar:
O que é array
?
É uma estrutura fixa, o seu tamanho não pode ser alterado e é conhecido em tempo de compilação. É o mais eficiente em questão de desempenho, mas não pode remover ou adicionar mais itens. Podemos chegar a conclusão que pro contexto que estamos buscando não é o ideal.
E o vector
?
Esse é bastante semelhante ao deque
. É usado quando precisamos de dinamicidade, porém a remoção ou inserção só acontece no final. Então, talvez seja essa a melhor escolha pro nosso protagonista, tendo em vista que sempre que se alimentar, irá crescer no final. PORÉM! E quando a snake tem que se mover? Uma boa ideia seria remover o item do final, e lança-lo ao inicio, dando sensação de movimento.
Por enquanto minha classe está assim:
#ifndef SNAKE_H
#define SNAKE_H
#include "raylib.h"
#include <deque>
class Snake {
public:
std::deque<Vector2> body = { Vector2{6,9}, Vector2{5,9}, Vector2{4,9} };
void Draw();
};
#endif
Irei ponderar essa questão de utilizar vector
ou deque
.
Exemplos de uso de vector
, deque
e array
:
#include <vector>
std::vector<int> vec = {1, 2, 3};
vec.push_back(4); // Adiciona no final
#include <deque>
std::deque<int> dq = {1, 2, 3};
dq.push_front(0); // Adiciona no início
dq.push_back(4); // Adiciona no final
int arr[3] = {1, 2, 3}; // Tamanho fixo
arr[0] = 0; // Modifica o primeiro elemento
Há outras estruturas como: list
, set
, map
e etc... Mas atendem propósitos distintos, e não entrarei nesses méritos por enquanto.
Curiosidade
Vocês sabiam que se pesquisar snake
no Google, aparece um jogo super bem feito e com desafios diários bem interessantes? Achei bem legal 😄.