Opensnake

Description

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

Codes Sources

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.