Boa tarde, sou iniciante e não consigo encontrar o erro no codigo

Boa tarde

Este é o codigo, ele não gera o grafico que preciso e não consigo encontrar que parte está errada, conseguem me esclarecer, por favor?

> identar texto pré-formatado por 4 espaços package projectZelda;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;

import com.gcstudio.entities.Entitie;
import com.gcstudio.entities.Player;
import com.gcstudio.graficos.Spritesheet;

public class Game extends Canvas implements Runnable {
	
	private static final long serialVersionUID = 1L;
	public JFrame frame;
	private Thread thread;
	private boolean isRunning = true;
	private final int WIDTH = 240;
	private final int HEIGHT = 160;
	private final int SCALE = 3;
	private	BufferedImage image;
	
	public List<Entitie> entities;
	public Spritesheet spritesheet;
	
	public Game() {
		
		setPreferredSize(new Dimension(WIDTH*SCALE,HEIGHT*SCALE));
		initFrame();
		
		image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
		entities = new ArrayList<Entitie>();
		spritesheet = new Spritesheet("/spritesheet.png");
		
		Player player = new Player(32,0,16,16,spritesheet.getSprite(32, 0, 16,16));
		entities.add(player);
	}
		public void initFrame() {
		
		frame = new JFrame("Marizelda");
		frame.add(this);
		frame.setResizable(false);
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
	}
	
	public synchronized void start() {
		thread = new Thread(this);
		isRunning = true;
		thread.start();
		
	}
	
	
	public synchronized void stop() {
		isRunning = false;
		try {
		thread.join();	}
		catch (InterruptedException e) {
			e.printStackTrace();
		}
		
	}
	
	public static void main(String args[]){
		Game game = new Game();
		game.start();
	}
		
	public void tick() {
		for (int i = 0;i<entities.size();i++) {
		Entitie e = entities.get(i);
		e.tick();
		}
		
	}
	public void render() {
		BufferStrategy bs = this.getBufferStrategy();
		if(bs == null) {
			this.createBufferStrategy(3);
			return;
		}
		Graphics g = image.getGraphics();
		g.setColor(new Color(50,0,0));
		g.fillRect(0,0,WIDTH,HEIGHT);
		
		
		
		for (int i = 0;i<entities.size();i++) {
			Entitie e = entities.get(i);
			e.render(g);
			}
			
			g.dispose();
	}
	
	
		public void run(){
			long lastTime = System.nanoTime();
			double amountOfThicks = 60.0;
			double ns = 1000000000 / amountOfThicks;
			double delta = 0;
			int frames = 0;
			double timer = System.currentTimeMillis();
			while(isRunning) {
			long now = System.nanoTime();
			delta+= (now - lastTime)/ns;
				lastTime=now;
				if(delta>=1){
					tick();
					render();
					frames++;
					delta--;
								
				}
				if(System.currentTimeMillis()-timer >= 1000) {
					System.out.println("FPS: "+frames);
					frames = 0;	
					timer+=1000;
				}
			}
			stop();
		}

}

Qual é a mensagem de erro?

O problema e que não aparece a mensagem ou informação demonstrando o ponto errado, revisei as linhas e não encontro.

E porque você conclui que tem algo errado?

estou tentando criar uma tela com cores porém somente gera a tela padrão do JFrame sem a cor em si, utilizei outro código e consegui gerar um painel colorido porém o player também não aparenta aparecer.

Acredito mais que seja um erro de programação feito por min, mas não consigo encontrar solução para resolve-lo mesmo pesquisando na internet.

Bom, você estendeu um Canvas, mas não sobrescreveu o método paint(Graphics) dele.

Mas como você está usando um JFrame, sugiro que sua classe estenda JPanel ao invés de Canvas pois no Canvas você terá que implementar buffers de desenho para evitar o flickering.

No JPanel basta sobrescrever o método paintComponent(Graphics) que estará tudo OK.

Obrigado pela dica, vou salvar.