Ciao a tutti,sto cercando di creare il gioco Snake ma ho qualche problema nel collegare le pagine tra di loro, cioè vorrei che aprendo una pagina d'introduzione e poi cliccando su "Clicca sull'immagine per iniziare" mi facesse partire il giochino....ma nn ci salto fuori....c'è qlc che puo darmi una mano??
il main è in un altra pagina e se potete dare un occhiata anche al codice di Snake perchè nn so se è giusto......Grazie mille....!!

codice:
/** File Introduzione.java.
*Contiene la classe Introduzione.
*/

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.Image;
import java.awt.Graphics;
/**Apre un frame di introduzione al programma.
*/
public class Pagina extends JFrame implements ActionListener{
private JFrame f;
	//Crea la finestra e vi inserisce la copertina del programma
public Pagina (){

		this.f=f;
		Toolkit tk= Toolkit.getDefaultToolkit();
		
		try{
			Dimension d=new Dimension();
			d=tk.getScreenSize();
            
            }
        catch(Throwable e){}
		
		setTitle("Snake");
		setDefaultCloseOperation(f.DO_NOTHING_ON_CLOSE );
		Container c= getContentPane();
				
		Image intro=tk.getImage("Snake.jpg");
		JButton b=new JButton(new ImageIcon (intro));
		c.add(b);
		b.setActionCommand("inizia");
		b.addActionListener(this);
		setBounds(150,100,700,600);
		c.setLayout(new FlowLayout());
		JLabel la=new JLabel("Clicca sull'immagine per iniziare              ");
		c.add(la);
		JButton b2=new JButton("          Informazioni           ");
		b2.addActionListener (this);
		c.add(b2);
		JButton b3=new JButton("    Esci    ");
		c.add(b3);
		b3.addActionListener(this);
		show();
		}
	/**Genera l'evento detrminato dalla pressione di un bottone.
	*Ci sono tre opzioni: vedere le informazioni, uscire direttamente, aprire il programma.
	*/
public void actionPerformed(ActionEvent e){
		
		String scelta=e.getActionCommand();
		if(scelta.equals("inizia")){
			dispose();
			f.show();
			}
		if(scelta.equals("    Esci    ")){
			System.exit(0);
			}
		if(scelta.equals("          Informazioni           ")){
			new Informazioni();
			}
		}
	}

Pagina del gioco:
codice:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.Color.*;
import java.io.*;
import javax.imageio.*;
import java.util.*;
import java.awt.geom.*;
public class SnakePit extends Main {
  SnakeFrame m = new SnakeFrame();
  //m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  //m.show();
}
 class SnakeFrame extends JPanel
 {
  public SnakeFrame()
  {
   setTitle("Snake");
   setSize(299,177);
   SnakePanel punt2 = new SnakePanel();
   Container punt = getContentPane();
   punt.add(punt2);
  }
 }
  class SnakePanel extends JPanel
  {
   public SnakePanel()
   {
    last = new Point2D.Double(100,100);
    lines = new ArrayList();
    cibo = new ArrayList();
    percorso = new int[291][143];
    x1=100;
    y1=100;
    x2=100;
    y2=100;
    risp=0;
    for(r=0;r<289;r++)
    {
     for(colonne=0;colonne<141;colonne++)
     {
      percorso[r][colonne]=0;
     }
    }
    if(c==1)
    lines.clear();
    KeyHandler listener = new KeyHandler();
    addKeyListener(listener);
    setFocusable(true);
    Timer t = new Timer(20);
    TimerAction listener2 = new TimerAction();
    t.addTimerListener(listener2); 
   }
    public void add(int dx, int dy)
    {
     if(dx != x || dy != y)
     {
      if(dx != -x || dy != -y)
      {
       x=dx;
       y=dy;
       Point2D end = new Point2D.Double(last.getX() + dx,last.getY() + dy);
       Line2D line = new Line2D.Double(last,end);
       lines.add(line);
       if(dx == -1)
       percorso[x1][y1]=-2;
       if(dx == 1)
       percorso[x1][y1]=2;
       if(dy == -1)
       percorso[x1][y1]=-1;
       if(dy == 1)
       percorso[x1][y1]=1;
       lines.remove(0);
       repaint();
       x1=(int)(end.getX());
       y1=(int)(end.getY());
       last=end;
       if(dx == -1)
       percorso[x1][y1]=-2;
       if(dx == 1)
       percorso[x1][y1]=2;
       if(dy == -1)
       percorso[x1][y1]=-1;
       if(dy == 1)
       percorso[x1][y1]=1;
      }
     }
    }
    public void incr(int z)
    {
     incremento = z;
    }
    public void paintComponent(Graphics g)
    {
     super.paintComponent(g);
     Graphics2D g2 = (Graphics2D)g;
     Rectangle2D limite = new Rectangle2D.Double(0,0,290,141);
     g2.draw(limite);
     Rectangle2D limite2 = new Rectangle2D.Double(1,1,288,139);
     g2.draw(limite2);
     //Rectangle2D limite3 = new Rectangle2D.Double(2,2,286,137);
     //g2.draw(limite3);
     for(int i=0;i<lines.size();i++)
     g2.draw((Line2D)lines.get(i));
     for(i=0;i<cibo.size();i++)
     { 
      g2.draw((Rectangle2D)cibo.get(i));
     }
    }
    private Point2D last,last2;
    private ArrayList lines,cibo;
    private static int incremento = 1;
    private class KeyHandler implements KeyListener
    {
     public void keyPressed(KeyEvent event)
     {
      SnakeFrame punt = new SnakeFrame();
      int keyCode = event.getKeyCode();
      int d;
      d= incremento;
      if(keyCode == KeyEvent.VK_LEFT) add(-d,0);
      else if(keyCode == KeyEvent.VK_RIGHT) add(d,0);
      else if(keyCode == KeyEvent.VK_UP) add(0,-d);
      else if(keyCode == KeyEvent.VK_DOWN) add(0,d);
     }
     public void keyReleased(KeyEvent event) {}
     public void keyTyped(KeyEvent event)
     {
     }
    }
   private class TimerAction implements TimeListener
   {
    public void timeElapsed(TimerEvent event)
    {
     if (getWidth()==0)  
     {
      return;
     }
     if(percorso[x1+x][y1+y] == 0)
     {
      if((last.getX()) < 290 && (last.getY()) < 149 && (last.getX()) > 1 && (last.getY()) > 1)
      {
       Point2D end = new Point2D.Double(last.getX() + x,last.getY() + y);
       Line2D line = new Line2D.Double(last,end);
       lines.add(line);
       x1=(int)(end.getX());
       y1=(int)(end.getY());
       if(lines.size()> nemiciCont)
       {
        //System.out.println("lalla" + percorso[x2][y2]);
        if(percorso[x2][y2] == -2)
        {
         percorso[x2][y2]=0;
         x2=x2-1;
        }
        if(percorso[x2][y2] == 2)
        {
         percorso[x2][y2]=0;
         x2=x2+1;
        }
        if(percorso[x2][y2] == -1)
        {
         percorso[x2][y2]=0;
         y2=y2-1;
        }
        if(percorso[x2][y2] == 1)
        {
         percorso[x2][y2]=0;
         y2=y2+1;
        }
        //System.out.println(percorso[x2][y2]);
        lines.remove(0);
       }
       repaint();
       if(x == -1)
       percorso[x1][y1]=-2;
       if(x == 1)
       percorso[x1][y1]=2;
       if(y == -1)
       percorso[x1][y1]=-1;
       if(y == 1)
       percorso[x1][y1]=1;
       last=end; 
      }
      if((last.getY() + y) >= 141)
      {
       lines.clear();
       nemiciCont=10;
       last = new Point2D.Double(100,100);
       crash=1;
      }
       if((last.getX() + x) >= 289)
      {
       lines.clear();
       nemiciCont=10;
       last = new Point2D.Double(100,100);
       crash=1;
      }
      if((last.getX() + x) <= 0)
      {
       lines.clear();
       nemiciCont=10; 
       last = new Point2D.Double(100,100);  
       crash=1;  
      }
      if((last.getY() + y) <= 0)
      {
       lines.clear();
       nemiciCont=10;
       last = new Point2D.Double(100,100);
       crash=1;
      }
     }
     else if(percorso[x1+x][y1+y]!=0)
     {
      lines.clear();
      nemiciCont=10;
      last = new Point2D.Double(100,100);
      x1=100;
      y1=100;
      x2=100;
      y2=100;
      crash=1;
     }
      if(crash==1)
      {
       crash=0;
       x=0;
       y=0;
       for(r=0;r<289;r++)
       {
        for(colonne=0;colonne<141;colonne++)
        {
         percorso[r][colonne]=0;
        }
       }
      }
      if(b==0)
      {
       do
       {
        w = generator.nextInt(284);
        z = generator.nextInt(136);
        if(percorso[w][z]==0 && percorso[w+1][z+1]==0 && percorso[w+2][z+2]==0 && percorso[w+3][z+3]==0 && percorso[w+4][z+4]==0 && percorso[w+5][z+5]==0)
        risp=1;          
       }
       while(risp != 1);
       risp=0;
       Rectangle2D rect = new Rectangle2D.Double(w,z,5,5);
       cibo.add(rect);
       repaint();
       b=1;
      }
      if((last.getX() + x) >= w && (last.getX() + x) <= w+5 && (last.getY() + y) >= z && (last.getY() + y) <= z+5)
      {
       cibo.remove(0);   
       b=0;
       nemiciCont= nemiciCont +50;
      }
     }
    }
   private Random generator = new Random();
   private int x,y,w,z;
   private int c,i,nemiciCont=10,b=0,crash=0,r,colonne;
   private int[][] percorso;
   private int x1,y1,x2,y2,risp;
   Graphics2D g2,g3;
  }
  class TimerEvent extends AWTEvent
  {
   public TimerEvent(Timer t){ super(t,TIMER_EVENT);}
   public static final int TIMER_EVENT
   = AWTEvent.RESERVED_ID_MAX+5555;
  }
   interface TimeListener extends EventListener
   {
    public void timeElapsed(TimerEvent event);
   }
   class Timer extends JComponent implements Runnable
   {
    public Timer(int i)
    {
     listenerList = new EventListenerList();
     interval = i;
     Thread t = new Thread(this);
     t.start();
    }
     public void addTimerListener(TimeListener listener)
     {
      listenerList.add(TimeListener.class,listener);
     }
     public void removeTimerListener(TimeListener listener)
     {
      listenerList.remove(TimeListener.class,listener);
     } 
     public void run()
     {
      while(true)
      {
       try{ Thread.sleep(interval);}
       catch(InterruptedException e){}
       TimerEvent event = new TimerEvent(this);
       EventQueue queue
       = Toolkit.getDefaultToolkit().getSystemEventQueue();
       queue.postEvent(event);
      }
     }
      public void processEvent(AWTEvent event)
      {
       if(event instanceof TimerEvent)
       {
        EventListener[] listeners = listenerList.getListeners(TimeListener.class);
        for(int a=0;a<listeners.length;a++)
        ((TimeListener)listeners[a]).timeElapsed((TimerEvent)event);
       }
        else
        super.processEvent(event);
      }
       private int interval;
       private EventListenerList listeners;
}