Question: How can you implement a queue in GameMaker?

Answer

GameMaker Language (GML) does not have a built-in queue data type, but it is possible to implement a queue using arrays or lists. Below is an example of how you could implement a queue with an array.

// Create a new queue var queue = []; // Function to add elements to the end of the queue function queue_enqueue(element) { array_push(queue, element); } // Function to remove and return the element at the start of the queue function queue_dequeue() { if (array_length_1d(queue) > 0) { var element = queue[0]; queue = array_delete(queue, 0, 1); return element; } return undefined; // Return undefined if the queue is empty } // Function to get the element at the start of the queue without removing it function queue_peek() { if (array_length_1d(queue) > 0) { return queue[0]; } return undefined; // Return undefined if the queue is empty }

Alternatively, you can use the ds_list data structure as a queue in GameMaker, as it has functions that closely match queue operations: ds_list_add for enqueue, and ds_list_delete for dequeue. Here's an implementation using ds_list:

// Create a new queue var queue = ds_list_create(); // Function to add elements to the end of the queue function queue_enqueue(element) { ds_list_add(queue, element); } // Function to remove and return the element at the start of the queue function queue_dequeue() { if (!ds_list_empty(queue)) { var element = ds_list_find_value(queue, 0); ds_list_delete(queue, 0); return element; } return undefined; // Return undefined if the queue is empty } // Function to get the element at the start of the queue without removing it function queue_peek() { if (!ds_list_empty(queue)) { return ds_list_find_value(queue, 0); } return undefined; // Return undefined if the queue is empty }

Remember to destroy your ds_list when you're done with it to prevent memory leaks:

ds_list_destroy(queue);

In both examples, queue_enqueue adds an element to the end of the queue, queue_dequeue removes and returns the element from the beginning of the queue, and queue_peek gets the element at the front of the queue without removing it.

Choose arrays if you're looking for a faster performance for smaller queues, and ds_list if you require more complex data operations or expect the queue to become quite large.

Was this content helpful?

Start building today

Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.