Canavar adında bir class oluşturup constructor ile parametre olarak resim linki ve x y değerlerini vermen gerekirdi normalde.
Aynı şekilde
p=new Oyuncu();
p2=new Oyuncu2();
burası da yanlış. Tek bir oyuncu classı yapıp kullanacağın yerde parametrik olarak initialize etmen gerekir.
ImageIcon img =new ImageIcon();
img =new ImageIcon("icerik//Resimler//zemin.png");
zemin=img.getImage();
img =new ImageIcon("icerik//Resimler//duvar.png");
duvar=img.getImage();
img =new ImageIcon("icerik//Resimler//dpu.png");
dpu=img.getImage();
img =new ImageIcon("icerik//Resimler//hedef.gif");
hedef=img.getImage();
img =new ImageIcon("icerik//Resimler//esya.png");
esya=img.getImage();
img =new ImageIcon("icerik//Resimler//kutu.png");
kutu=img.getImage();
img =new ImageIcon("icerik//Resimler//havuz.gif");
havuz=img.getImage();
img =new ImageIcon("icerik//Resimler//a.png");
a=img.getImage();
img =new ImageIcon("icerik//Resimler//b.png");
b=img.getImage();
img =new ImageIcon("icerik//Resimler//c.png");
c=img.getImage();
img =new ImageIcon("icerik//Resimler//d.png");
d=img.getImage();
img =new ImageIcon("icerik//Resimler//esya2.png");
esya2=img.getImage();
img =new ImageIcon("icerik//Resimler//bitis2.gif");
bitis2=img.getImage();
Böyle bir kod yazmak yerine
zemin = ImageIO.read(new File("icerik//Resimler//zemin.png"));
duvar = ImageIO.read(new File("icerik//Resimler//duvar.png"));
dpu = ImageIO.read(new File("icerik//Resimler//dpu.png"));
hedef = ImageIO.read(new File("icerik//Resimler//hedef.png"));
esya = ImageIO.read(new File("icerik//Resimler//esya.png"));
Şeklinde bir kod yazmak daha uygun.
Birde kullandığın IDE de auto indent mekanizması ile kodları okunabilir halde atarsan daha iyi olur.
Fazla inceleme fırsatım olmadı, fakat sana tavsiyem object oriented programming yaklaşımını temelden iyice öğren.
Sonrasında Solid prensiplerini araştır, design patternleri araştır.