Game Developer, Programmer

“Above all, video games are meant to be just one thing: Fun for everyone.”

Satoru Iwata

Current Projects

  • Bit/terness – A 2D puzzle platformer made for the Chillennium 2023 game jam. Won best in game design.
  • Memories of Ember – A solo-developed strategy RPG which is still in early development. ETA 2024.

About Me

My name is Jackson Gray, and I have always had an interest in creative activities and an interest in technology. I found a love for computer science in high school, and have been working towards bachelor degrees in Computer Science and Computer Game Development at Lamar University since 2019.

I started learning programming in Java and quickly discovered that I excel in object-oriented programming. Given that I specialize in Java and C#, I use this approach often to implement creative solutions to complex problems.


Programming Example

The following code snippet is from a project where I had to demonstrate the function of how a CPU cache indexes binary addresses. I needed to have a list of address blocks and find the least recently used (LRU) block. To accomplish this, I implemented this solution, which I feel demonstrates my programming style well.

    /* LRUQueue is a modified ArrayList with three unique properties:
     * 1: When a value is offered to the LRUqueue, it checks if the value is already in the queue. If it is, it removes it from the queue. The value is then put at the end.
     * 2: When a value is polled from the LRUqueue, it removes the value at index 0 (the least recently used value) and places it at the end (most recently used).
     * 3: The LRUQueue has a trueIndexArray, in which it keeps all of its values in a static order. This allows a method to reliably retrieve any given object in the LRUQueue.
     */
    public class LRUQueue<E> extends ArrayList<E>{
        private Object[] trueIndexArray;
        public LRUQueue(){
            trueIndexArray = new Object[0];
        }

        public E peek(){
            return get(0);
        }

        public void offer(E o){
            if(this.contains(o)){
                remove(o);
            }
            else{
                Object[] newTrueIndexArray = new Object[trueIndexArray.length+1];
                for(int i = 0; i < trueIndexArray.length; i++){
                    newTrueIndexArray[i] = trueIndexArray[i];
                }
                newTrueIndexArray[newTrueIndexArray.length-1] = o;
                trueIndexArray = (E[])newTrueIndexArray;
            }
            add(o);
        }

        public E poll(){
            E temp = remove(0);
            add(temp);
            return temp;
        }
        
        public E peekIndex(int i){
            return (E)trueIndexArray[i];
        }
    }

Here, have my resume!