Erro Java, personagem nao se move

Bom eu sou novato em prog e estou fazendo o curso da danki code, fazendo esse curso cheguei em uma parte onde eles ensinam a fazer uma “copia” do jogo pong, e estou com um erro de fazer o meu personagem se mover!!

package pack;

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

public class Game extends Canvas implements Runnable,KeyListener{

public static int WIDTH = 240;
public static int HEIGHT = 140;
public static int SCALE = 4;

public Player player;

public BufferedImage layer = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);

public Game() {
	this.setPreferredSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE));
	this.addKeyListener(this);
	player = new Player(100,HEIGHT-10);
}

public void tick() {
	player.tick();
}

public void render() {
	BufferStrategy bs = this.getBufferStrategy();
	if(bs == null) {
		this.createBufferStrategy(3);
		return;
	}
	Graphics g = layer.getGraphics();
	player.render(g);
	
	g = bs.getDrawGraphics();
	g.drawImage(layer, 0,0, WIDTH*SCALE,HEIGHT*SCALE,null);
	
	bs.show();
}


public static void main(String[] args) {
	Game game = new Game();
	JFrame frame = new JFrame("Pong do manel");
	frame.setResizable(false);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.add(game);
	frame.pack();
	frame.setLocationRelativeTo(null);
	frame.setVisible(true);
	
	new Thread(game).start();
}

@Override
public void run() {
	while(true) {
		tick();
		render();
		try {
			Thread.sleep(1000/60);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}


@Override
public void keyPressed(KeyEvent e) {
	if(e.getKeyCode() == e.VK_RIGHT) {
		System.out.println("Pressed RIGHT");
		player.right = true;
	}
	else if(e.getKeyCode() == e.VK_LEFT) {
		System.out.println("Pressed LEFT");
		player.left = true;
	}
}

@Override
public void keyReleased(KeyEvent e) {
	// TODO Auto-generated method stub
	
}

@Override
public void keyTyped(KeyEvent e) {
	// TODO Auto-generated method stub
	
}

}

import java.awt.Color;
import java.awt.Graphics;

public class Player {

public boolean right,left;


public int x,y;

public Player(int x,int y) {
	this.x = x;
	this.y = y;
}

public void tick() {
	if(right) 
	{
		x++;
	}
	else if(left) 
	{
		x--;
	}
}


public void render(Graphics g) {
	g.setColor(Color.BLUE);
	g.fillRect(x,y, 40, 10);
	
}

}

Pequenos ajustes:

Classe Game:

package pack;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

public class Game extends Canvas implements Runnable, KeyListener {

    private static final long serialVersionUID = 1L;

    public static int WIDTH = 240;
    public static int HEIGHT = 140;
    public static int SCALE = 4;

    public Player player;

    public BufferedImage layer = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

    public Game() {
        this.setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
        this.addKeyListener(this);
        player = new Player(100, HEIGHT - 10);
    }

    public void tick() {
        player.tick();
        // ao final de cada tick, reseta o movimento, senão ele não pára de se mover
        player.right = false;
        player.left = false;
    }

    public void render() {
        BufferStrategy bs = this.getBufferStrategy();
        if (bs == null) {
            this.createBufferStrategy(3);
            return;
        }
        Graphics g = layer.getGraphics();

        // limpar a tela
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, WIDTH * SCALE, HEIGHT * SCALE);

        // renderizar jogador
        player.render(g);

        g = bs.getDrawGraphics();
        g.drawImage(layer, 0, 0, WIDTH * SCALE, HEIGHT * SCALE, null);

        bs.show();
    }

    public static void main(String[] args) {
        Game game = new Game();
        JFrame frame = new JFrame("Pong do manel");
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(game);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        new Thread(game).start();
    }

    @Override
    public void run() {
        while (true) {
            requestFocus(); // focar o canvas pra receber entrada do teclado
            tick();
            render();
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void keyPressed(KeyEvent e) {
        switch (e.getKeyCode()) {
            case KeyEvent.VK_RIGHT:
                player.right = true;
                System.out.println("Pressed RIGHT");
                break;
            case KeyEvent.VK_LEFT:
                player.left = true;
                System.out.println("Pressed LEFT");
                break;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {}

    @Override
    public void keyTyped(KeyEvent e) {}
}

Classe Player:

package pack;

import java.awt.Color;
import java.awt.Graphics;

public class Player {

    public boolean right, left;

    public int x, y;

    public Player(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public void tick() {
        if (right) {
            x++;
        }
        if (left) {
            x--;
        }
    }

    public void render(Graphics g) {
        g.setColor(Color.BLUE);
        g.fillRect(x, y, 40, 10);

    }
}

No código original da postagem simplesmente mudei 1 linha e funcionou

Player.java

public void render(Graphics g) {
g.setColor(Color.blue);
g.fillRect(x, y, 40, 10); //Assim funcionou, antes, (x, y, width, height) não funcionava.

Provavelmente width e height estavam com valor zero.