Le blog d'Arcade Village

JAVA : Comment transformer une applet en programme ( Partie 1).

02/04/2019
Cet article nécessite de connaitre Java.

Les applets ne sont plus supportées par les navigateurs récents. Dans la plupart des cas, le couple HTML+Javascript les remplace sans difficulté.
Mais j'ai écrit une quarantaine d'applets de jeux en java et repartir à zéro était décourageant.
J'ai donc recherché une méthode simple pour pouvoir les proposer sous la forme de programmes téléchargeables.
L'idée était :
- de garder le langage java
- de modifier au minimum le programme de jeu
- de pouvoir proposer plus d'une dizaine de jeux rapidement sans investir trop de temps. Je crée ces jeux sur mon temps libre... Mais comment ? Et la passion ? Et bien la passion naît de la création et refaire ce que j'ai déjà fait n'est pas très passionnant. Par contre, trouver une astuce pour proposer les jeux m'intéressait.

Mon exemple utilise le programme de jeu Hebi. Vous pouvez télécharger AVJukeBox pour le tester.
Une applet java se présente ainsi (j'ai volontairement supprimé le code inutile à la démonstration) :


public class Hebi extends Applet implements GameListener, ActionListener
{
avub ub; // This class allows the save of the best score in arcade village
Label lmsg;
HebiCanvas hc = null;
HebiDecors d = null;
OneImgProvider imgdico = null;
int phase;
StatusBar sp;
Color c = Color.blue;
Color ink = Color.yellow;
Button b;
AppletCookieMgr ck=null;

public void init()
{
hc = new HebiCanvas(); // Canvas générique de tous mes jeux

String s = getParameter("bg");
if ( s != null )
{
try
{
c = new Color( Integer.parseInt(s,16) );
}
catch( Exception e )
{
}
}
s = getParameter("ink");
if ( s != null )
{
try
{
ink = new Color( Integer.parseInt(s,16) );
}
catch( Exception e )
{
}
}
ck = new AppletCookieMgr(this.getDocumentBase());
try
{
ck.load();
}
catch( Exception e )
{
}
setBackground(c);
setForeground(ink);



//===========================================================

code java d'ajout des composants (bouton, panels, ect...)

//===========================================================


if ( !loadData() ) return;

this.addKeyListener( hc );
hc.setGameListener(this);

add( "Center", hc );
onNewGame();
doLayout();
validate();
}

public void stop()
{
hc.stopThread();
}

public boolean loadData()
{

//===========================================================

Code java où se chargent les images et autres fichiers du jeu.

//===========================================================
}

//
// Hebi contient un canvas pour le jeu, un panel pour le score et un panel pour les boutons de jeu
//

public void onNewGame()
{
sp.setScore(0);
sp.setLife(3);
setLevel(0);
repaint();
}


//===========================================================

..... Encore un peu de code java sans intérêt pour la démonstration

//===========================================================

}



La première étape est de créer un programme qui encapsule cette applet. Cette opération est très simple, car l'applet est un composant et peut donc être inclus dans une Frame.
Voici le code du programme principal :


package avjukebox;
import javax.swing.JFrame;
public class avjukebox
{
static JFrame fenetre;


public static void main(String[] args)
{
fenetre = new JBMainFrame();
fenetre.addWindowListener(new JBWindowAdapter(fenetre));
fenetre.setLocationRelativeTo(null);
fenetre.setVisible(true);
fenetre.doLayout();
}
}

Puis celui de l'objet JBMainFrame qui appelle l'applet Java

public JBAppletPanel(...)

dd = new CCApplet();
....
this.add( dd); // Ajoute l'applet
doLayout(); // Force ce panel à se dessiner
dd.init(); // Appel init de l'applet
validate();

Cette étape n'était pas suffisante car les applets récupérent des données de la page HTML et il a fallu créer un nouvel objet Applet.
Je vous présenterai cet objet dans le prochain article.