/* ************************************************************************** AUTORE: Simona Pappalardo MAIL: pacana@libero.it ***************************************************************************** */ import java.lang.*; import java.awt.*; import java.awt.event.*; import java.applet.AudioClip; public class Applet extends java.applet.Applet implements Runnable { static int punteggio; static Color color;//per memorizzare il colore dello sfondo dell'applet static int livello; Tetrisgame game; Thread gameRunner; Image immagFuoriSchermo;//double buffering Graphics gFuoriSchermo;//double buffering AudioClip suono_apertura; AudioClip suono_gameover; AudioClip suono_riga; AudioClip suono_posiz_pezzo; AudioClip suono_cambio_liv; AudioClip suono_sfondo; int key; int maxX;//dim griglia int maxY;//dim griglia int x;//dim applet int y;//dim applet boolean gameOver; boolean eseguito1,eseguito2,eseguito3; boolean fine; boolean disegna; static boolean modifica_livello = false; Base pezzo; Font carattere1,carattere2; int appletX = 100;//posizione x dell'applet nello schermo int appletY = 50;//posizione y dell'applet nello schermo int elemBaseX = 10;//base di un quadratino che compone un pezzo int elemBaseY = 10;//altezza di un quadratino che compone un pezzo public Applet() { addKeyListener(new KeyListener() { public void keyPressed(KeyEvent e) { key=e.getKeyCode(); switch (key) { case 65: case 0: game = new Tetrisgame(maxX,maxY); stop(); start(); break; } if (!gameOver) { switch(key) { case 39://char freccia verso destra System.out.println("Ricevuto tasto"); disegna = game.pezzo.trasla_dx(); if(disegna) repaint(); break; case 37://char freccia verso sinistra disegna = game.pezzo.trasla_sx(); if (disegna) repaint(); break; case 38://char freccia verso il basso disegna = game.pezzo.ruota_antiorario(); if (disegna) repaint(); break; case 40: //char freccia verso l'alto System.out.println("Ricevuto tasto"); disegna = game.pezzo.ruota_orario(); if(disegna) repaint(); break; case 32: //char barra spaziatrice System.out.println("Ricevuto tasto"); disegna = game.pezzo.scendi_veloce(); if(disegna) repaint(); break; } } } public void keyTyped(KeyEvent e) { System.out.println("keyTyped" + e); } public void keyReleased(KeyEvent e) { System.out.println("keyReleased" + e); } }); } public void init() { color = getBackground(); punteggio = 0; carattere1 = new Font("MonoSpaced",Font.BOLD,20); carattere2 = new Font("SansSerif",Font.BOLD,10); fine = false; gameRunner = null; immagFuoriSchermo = createImage(size().width, size().height);//double buffering gFuoriSchermo = immagFuoriSchermo.getGraphics();//double buffering livello = 1; try { x = Integer.parseInt(getParameter("X")); } catch (NullPointerException e) {x=120;} try { y = Integer.parseInt(getParameter("Y")); } catch (NullPointerException e) {y=240;} /* e' necessario dividere la dim dell'applet per la dim di un singolo quadratino di dim elemBaseX per elemBaseY al fine di poter mappare un quadratino dell'applet in un quadratino di dim 1 x 1 della griglia */ maxX = (int) (x / elemBaseX);//dim griglia maxY = (int)(y / elemBaseY);//dim griglia eseguito1 = false; eseguito2 = false; eseguito3 = false; game = new Tetrisgame(maxX,maxY); //inizializzazione dei suoni suono_apertura = getAudioClip(getCodeBase(),"Apertura.au"); suono_gameover = getAudioClip(getCodeBase(),"GameOver.au"); suono_riga = getAudioClip(getCodeBase(),"Riga.au"); suono_posiz_pezzo = getAudioClip(getCodeBase(),"PosizPezzo.au"); suono_cambio_liv = getAudioClip(getCodeBase(),"ChangeLiv.au"); suono_sfondo = getAudioClip(getCodeBase(),"tetris1.mid"); } public void start() { if (gameRunner == null) { gameRunner = new Thread(this); gameRunner.start(); } } public void stop() { if (gameRunner.isAlive()) { if(suono_apertura != null) suono_apertura.stop(); if(suono_gameover != null) suono_gameover.stop(); if(suono_riga != null) suono_riga.stop(); if(suono_posiz_pezzo != null) suono_posiz_pezzo.stop(); if(suono_cambio_liv != null) suono_cambio_liv.stop(); if(suono_sfondo != null) suono_sfondo.stop(); gameRunner.stop(); gameRunner = null; } } public void run() { if(suono_apertura != null) suono_apertura.play();//avvio suono if(suono_sfondo != null) suono_sfondo.loop();//avvio suono gameOver = false; while(!gameOver) { if(modifica_livello) { try {Thread.sleep(3000); } catch (InterruptedException e){} modifica_livello = false; } game.creaPezzo(); //quando creo un pezzo azzero il contatore perchè ogni pezzo può chiamare la procedura scendi_veloce solo 1 volta Base.cont = 0; if (!gameOver) repaint(); while (!fine && !gameOver) { fine = game.avanza(); if (Tetrisgame.rigaPiena) { if(suono_riga != null) suono_riga.play(); // Tetrisgame.rigaPiena = false; } if(fine) if(suono_posiz_pezzo != null) suono_posiz_pezzo.play(); repaint(); gameOver = game.end(); if (gameOver) { if(suono_gameover != null) suono_gameover.play(); repaint(); break; } if(punteggio >= 0 && punteggio < 170) try {Thread.sleep(700); } catch (InterruptedException e){} if(punteggio>= 170 && punteggio < 370) try {Thread.sleep(300); } catch (InterruptedException e){} if(punteggio >= 370 && punteggio < 570) try {Thread.sleep(200); } catch (InterruptedException e){} if(punteggio >= 570) try {Thread.sleep(100); } catch (InterruptedException e){} } fine = false; } } public void update (Graphics g) { paint(g); } public void paint(Graphics g) { if (punteggio >= 170 && !eseguito1) { modifica_livello = true; // game.paint(gFuoriSchermo); if(suono_cambio_liv != null) suono_cambio_liv.play(); livello = 2; for (int i=0;i= 370 && !eseguito2) { modifica_livello = true; // game.paint(gFuoriSchermo); if(suono_cambio_liv != null) suono_cambio_liv.play(); livello = 3; for (int i=0;i= 570 && !eseguito3) { modifica_livello = true; // game.paint(gFuoriSchermo); if(suono_cambio_liv != null) suono_cambio_liv.play(); livello = 4; for (int i=0;i Spostamento a destra ",appletX,appletY+300); gFuoriSchermo.drawString("Freccia a sinistra --> Spostamento a sinistra ",appletX,appletY+320); gFuoriSchermo.drawString("Freccia in alto --> Rotazione in senso orario ",appletX,appletY+340); gFuoriSchermo.drawString("Freccia in basso --> Rotazione in senso antiorario ",appletX,appletY+360); gFuoriSchermo.drawString("Barra spaziatrice --> Discesa veloce ",appletX,appletY+380); if(!Tetrisgame.rigaPiena) { game.paint(gFuoriSchermo); Tetrisgame.rigaPiena = false; } gFuoriSchermo.setColor(Color.black); gFuoriSchermo.drawRect(appletX,appletY,maxX*10,maxY*10); gFuoriSchermo.setFont(carattere2); if(gameOver) { gFuoriSchermo.setColor(Color.red); gFuoriSchermo.setFont(carattere1); gFuoriSchermo.drawString("GAME OVER",106,(maxY/2)*10+appletY); gFuoriSchermo.setColor(Color.black); if(suono_sfondo != null) suono_sfondo.stop(); } g.drawImage(immagFuoriSchermo, 0, 0, this);//double buffering } }