Ciao a tutti,

cercherò di essere chiaro così da potervi permettere di aiutarmi meglio

compilato il codice sottostante, creo una applet che è piccolo giochino, ovvero col mouse devi cliccare sul quadratino nello schermo che si sposta dopo ogni "click",
il codice funziona perfettamente tranne in un particolare ovvero, se riavvio l'app il numero dei "Clicksbagliati" non riparte da zero anzi aumenta di 2 ad ogni "click" anche se è corretto, ho ovviato a questo problema con il main e gioco.init così il gioco non si può riavviare ma ovviamente è la soluzione diciamo rapida, potreste aiutarmi e dirmi dove e perchè sbaglio?

e se volessi implementare, come inserisco un'immagine al posto dello sfondo blue creato con set.background?
e se volessi rendere il gioco più difficile ovvero che ad ogni click il rettangolo diventa più piccolo?
qualsiasi aiuto è ben accetto, grazie a tutti in anticipo

codice:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;






public class RightAngle extends Applet implements Runnable, MouseListener{
        
    public static void main(String[] args) {
               JFrame frame = new JFrame("RightAngle");
               RightAngle gioco = new RightAngle();
               frame.add(gioco);
               frame.setSize(400, 400);
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setResizable(false);
               frame.setVisible(true);
               
               gioco.init();
}
       int x, y; //posizione della scatola
       
       int dimensione = 20; 
       
       int contaClick;          
       int contaClicksbagliati;  
       
       Thread aggiorna;          
       
       boolean running;        


       int contaSecondi;       
       
       public void init() {
               setBackground(Color.BLUE);
                
               cambiaPosizione();  //imposta la posizione del rettangolo
               addMouseListener(this); 
               running = true;                
               
               contaClick = 0;
               contaClicksbagliati = 0;
               
               aggiorna = new Thread(this);
               aggiorna.start();        
       }
       void cambiaPosizione(){
               x = (int) (Math.random()*(getWidth()-dimensione)); //imposta una posizone casuale
               y = (int) (Math.random()*(getHeight()-dimensione)); //imposta una posizone casuale
       }
       
       
       public void run() {
               contaSecondi = 20;
               
               while(contaSecondi > -1&&contaClicksbagliati<3){
                       try {
                               Thread.sleep(1000);  
                               contaSecondi--;   
                               repaint();                
                               
                       } catch (InterruptedException e){}
                       
               }
               running = false; //il gioco è terminato
               repaint();               
       }
       
       public void paint(Graphics g) {
              
               g.setColor(Color.WHITE);
               g.drawRect(0, 0, getWidth()-1, getHeight()-1);
               
               
               if(running&&contaClicksbagliati<3){
                       g.setColor(Color.WHITE);
                       g.fillRect(x, y, dimensione, dimensione);
                       g.setColor(Color.BLACK);
                       g.drawRect(x, y, dimensione-1, dimensione-1);
               }else  {
                       //altrimenti scrive game over
                       g.setColor(Color.RED);
                       g.setFont(new Font("[GAME OVER]", Font.BOLD, 20));
                       g.drawString("[GAME OVER]", (getWidth()/2)-65, getHeight()/2);
               }
                
               
               g.setFont(new Font("default", Font.BOLD, 16));
               g.setColor(Color.WHITE);
               g.drawString("Sec rimanenti: "+(contaSecondi+1), 10, 20); //il +1 evita che venga scritto -1 sullo schermo
               g.drawString("Click giusti: ", 10, getHeight()-20);
               g.drawString("Click errati: ", 120, getHeight()-20);
               g.setColor(Color.GREEN);
               g.drawString(""+contaClick,105,getHeight()-20);
               g.setColor(Color.RED);
               g.drawString(""+contaClicksbagliati,210,getHeight()-20);
               
       }
              
       
       
       public void mousePressed(MouseEvent e)
       
       {
               
               if(cliccato(e.getX(), e.getY()) && running){
                       contaClick++;
                       
                       cambiaPosizione();
                       repaint();
               }
               else{
                   
                       contaClicksbagliati++;
                       
               }
       }


       
       boolean cliccato(int clickX, int clickY) {
               if(clickX >= x && clickX < x + dimensione &&
                  clickY >= y && clickY < y + dimensione){
                       return true;        
               }else{
                       return false;
                        
               }
               
       }
      
}