Un serpent à la sauce Norty.
J'ai repris des sons provenant de Worms Armaggedon.
Il s'agit d'une applet.
Source / Exemple :
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class nort extends java.applet.Applet implements Runnable, KeyListener
{
Thread t;
int Indic = 1;
Graphics Gmem;
Image ii;
int jeu[][] = new int[50][33]; // tableau du jeu ; 0=rien ; 1=ver ; 2=mur ; 3=pastille
int oldX[] = new int[1500]; // ancien X
int oldY[] = new int[1500]; // ancien Y
int sens; // sens du ver ; 1=droite ; 2=bas ; 3=gauche ; 4=haut
int X;
int Y;
int old; // longueur du ver
int countold;
int cadrepm; // pour option "cadre +/-
int gobX; // position pastille
int gobY;
int gobXN;
int nbgobpernivo; //nombre de pastille par stage
int pointsforthisgob; //points our une pastille
int totalpoints; //total des points
int nivo;
int nbvie;
int vitesse;
int modifOK;
AudioClip s1,s2,s3,s4,s5,s6;
String S="";
public void init()
{
ii = createImage(getSize().width,getSize().height);
Gmem = ii.getGraphics();
String Ss=getParameter("son1");
s1=getAudioClip(getCodeBase(),Ss);
Ss=getParameter("son2");
s2=getAudioClip(getCodeBase(),Ss);
Ss=getParameter("son3");
s3=getAudioClip(getCodeBase(),Ss);
Ss=getParameter("son4");
s4=getAudioClip(getCodeBase(),Ss);
Ss=getParameter("son5");
s5=getAudioClip(getCodeBase(),Ss);
Ss=getParameter("son6");
s6=getAudioClip(getCodeBase(),Ss);
s4.play();
init_intro();
initnewstage();
addKeyListener(this);
}
//Démarrage du Thread
public void start()
{
if(t==null)
{
t = new Thread(this);
t.start();
}
}
//Arrêt du Thread
public void stop()
{
//if(t!=null)
//{
//Indic =0;
//t=null;
//}
}
public void run()
{
requestFocus();
while(Indic==1)
{
attendre(40+(5-vitesse)*20);
}
}
public void attendre(int t) //fonction d'attente + rafraichissement applet
{
repaint();
try
{
Thread.sleep(t);
}
catch(InterruptedException ie)
{
}
}
//Pour éviter les scintillement
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
//gestion des sens
if (sens==1) {
X++;
if (X==50) {
s6.play();
testfin();
} else {
aff();
}
}
if (sens==2) {
Y++;
if (Y==33) {
s6.play();
testfin();
} else {
aff();
}
}
if (sens==3) {
X=X-1;
if (X==-1) {
s6.play();
testfin();
} else {
aff();
}
}
if (sens==4) {
Y=Y-1;
if (Y==-1) {
s6.play();
testfin();
} else {
aff();
}
}
g.drawImage(ii,0,0,this); //Affichage de l'image
modifOK=0;
}
//Keypressed
public void keyPressed(KeyEvent evt) { // gestion des touches
int key = evt.getKeyCode(); // test sur 'sens' pour pas tourner directement dans le sens inverse
if (modifOK==0) {
switch (key) { // et se mordre la queue bêtement
case KeyEvent.VK_DOWN:
if (sens!=4) { sens=2;modifOK=1; }
break;
case KeyEvent.VK_UP:
if (sens!=2) { sens=4;modifOK=1; }
break;
case KeyEvent.VK_LEFT:
if (sens!=1) { sens=3;modifOK=1; }
break;
case KeyEvent.VK_RIGHT:
if (sens!=3) { sens=1;modifOK=1; }
break;
}
}
if (key==107) {vitesse(1);}
if (key==109) {vitesse(2);}
}
public void keyTyped(KeyEvent evt) {
}
public void keyReleased(KeyEvent evt) {
}
//Gestion de l'affichage
public void aff() {
Gmem.setColor(Color.black);
Gmem.fillRect(X*14+cadrepm,Y*14+cadrepm,14-2*cadrepm,14-2*cadrepm);
if (pointsforthisgob>0) { pointsforthisgob--; }
Gmem.setColor(Color.gray);
Gmem.fillRect(50,463,100,12);
Gmem.setColor(Color.black);
Gmem.drawString("" + totalpoints + " (" + pointsforthisgob + ")",50,473);
if (jeu[X][Y]==3) { // si touche une pastille
s1.play();
totalpoints+=pointsforthisgob;
Gmem.setColor(Color.gray);
Gmem.fillRect(50,463,110,24);
Gmem.fillRect(X*14,Y*14,14,14);
Gmem.setColor(Color.black);
Gmem.drawString("" + totalpoints + " (" + pointsforthisgob + ")",50,473);
gobXN++;
if (gobXN==nbgobpernivo) { // stage terminé
nivo++;
s3.play();
if (nivo==6 ) {
Indic=3;
} else {
initnewstage();
Indic=2;
}
} else {
Gmem.drawString("" + gobXN + "/" + nbgobpernivo,50,485);
gobXY();
}
}
if (Indic==1) {
jeu[oldX[old-1]][oldY[old-1]]=0;
if (countold!=0) {
countold--;
old++;
}
int i;
for (i=1;i<(old-1);i++) { // décale tout
oldX[old-i]=oldX[old-1-i];
oldY[old-i]=oldY[old-1-i];
}
oldX[1]=X;
oldY[1]=Y;
Gmem.setColor(Color.white); // efface
Gmem.fillRect(oldX[old-1]*14,oldY[old-1]*14,14,14);
if ((jeu[X][Y]==1) || (jeu[X][Y]==2)) { // si touche le mur, on arrête tout
if (jeu[X][Y]==1) {s5.play();}
if (jeu[X][Y]==2) {s6.play();}
testfin();
}
jeu[X][Y]=1;
}
if (Indic==2) { Indic=1; }
if (Indic==3) { //partie terminée, fin des stages
Gmem.setColor(Color.green);
Gmem.drawString("Partie terminée",310,485);
s2.play();
}
if (Indic==0) { //partie terminée, mur ou ver touché
Gmem.setColor(Color.red);
Gmem.drawString("Partie terminée",310,485);
}
}
public void gobXY() { // tirage au sort d'une pastille
Double D; // vérification si pas déjà un mur ou un ver dans le tableau à cet endroit
D=new Double(50*Math.random());
gobX=D.intValue();
D=new Double(33*Math.random());
gobY=D.intValue();
while (jeu[gobX][gobY]!=0) {
D=new Double(50*Math.random());
gobX=D.intValue();
D=new Double(33*Math.random());
gobY=D.intValue();
}
Gmem.setColor(Color.pink);
if ((gobXN+1)==nbgobpernivo) {
Gmem.fillOval(gobX*14,gobY*14,14,14);
} else {
Gmem.fillRect(gobX*14,gobY*14,14,14);
}
jeu[gobX][gobY]=3;
pointsforthisgob=96+(32*vitesse);
countold=5;
}
public void initnewstage() {
int i;
int j;
Gmem.setColor(Color.white);
for (i=0; i<50; i++) {
for (j=0; j<33; j++) {
jeu[i][j]=0; // rempli le jeu de blanc
Gmem.fillRect(i*14,j*14,14,14); // et l'écran aussi
}
}
//initialisation variables
sens=1;
X=20;
Y=7;
gobXY();
old=20;
for (i=0;i<1499;i++) {
oldX[i]=0;
oldY[i]=0;
}
gobXN=0;
Gmem.setColor(Color.gray);
Gmem.fillRect(50,488,50,12);
Gmem.setColor(Color.black);
Gmem.drawString("" + nivo,50,497);
//définition des murs selon le nivo
if (nivo==2) {
for (i=12;i<=38;i++) {
DessCarre(i,15);
}
} else if (nivo==3) {
for (i=6;i<=27;i++) {
DessCarre(13,i);
DessCarre(37,i);
}
} else if (nivo==4) {
for (i=0;i<=35;i++) {
DessCarre(i,26);
DessCarre(49-i,6);
}
for (i=17;i<=33;i++) {
DessCarre(i,16);
}
} else if (nivo==5) {
for (i=7;i<=27;i++) {
DessCarre(8,i);
DessCarre(42,i);
}
for (i=0;i<=10;i++) {
DessCarre(25,i);
DessCarre(25,32-i);
}
}
}
public void DessCarre(int x,int y) {
jeu[x][y]=2;
Gmem.setColor(Color.black);
Gmem.fillRect(x*14,y*14,14,14);
Gmem.setColor(Color.red);
Gmem.drawRect(x*14+1,y*14+1,11,11);
}
public void init_intro() {
nivo=1;
cadrepm=1;
modifOK=0;
nbgobpernivo=30;
totalpoints=0;
pointsforthisgob=96+(32*vitesse);
Indic=1;
nbvie=3;
vitesse=2;
attendre(1);
//dessins des caractéristiques du bas
Gmem.setColor(Color.gray);
Gmem.fillRect(0,463,700,502);
Gmem.setColor(Color.black);
Gmem.drawString("Points :",2,473);
Gmem.drawString("Gobgob :",2,485);
Gmem.drawString("Niveau :",2,497);
Gmem.drawString("" + gobXN + "/" + nbgobpernivo,50,485);
affvie();
vitesse(0);
Gmem.setColor(Color.gray);
Gmem.fillRect(310,473,100,12);
}
public void affvie() {
Gmem.setColor(Color.gray);
Gmem.fillRect(650,463,50,12);
Gmem.setColor(Color.black);
Gmem.drawString("Vie : " + nbvie,650,473);
}
public void testfin() {
nbvie--;
affvie();
if (nbvie==0) {
Indic=0;
} else {
initnewstage();
}
}
public void vitesse(int a) {
//a==vide => rien
//a==1 => vitesse + 1
//a==2 => vitesse - 1
//vitesse de 1 à 5
if ((a==1) && (vitesse<5)) {vitesse++;}
if ((a==2) && (vitesse>1)) {vitesse--;}
Gmem.setColor(Color.gray);
Gmem.fillRect(650,475,50,12);
Gmem.setColor(Color.black);
Gmem.drawString("Vitesse : " + vitesse,626,485);
}
}
Conclusion :
Touche fléchées pour jouer.
Touche +/- pour augmenter la rapidité
Plus c'est rapide, plus les pastilles marquent des points
30 pastilles à récupérer par stages
Attention aux murs, seulement 3 vies
Retrouvez-moi sur :
http://www.realnorty.com
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.