Jeu du serpent avec choix du niveaux [vc++ 6.0]

Description

le jeu dessine le niveau choisie a partir du fichier Niveaux.bmp(la capture d'ecran montre le niveau 6)
on donc peut editer les niveaux avec paint par exemple ou meme en rajouter a la suite(en rajoutant 40 pixel a la hauteur de l'image pour chaque niveau suplementaire)
sinon il y a toujours les 9 niveaux de difficulté correspondant a la vitesse du serpent
et il se joue avec les touche 4,5,6,8 du numpad

maj: voila une version ou on peut jouer a 2 joueur, le joueur 2 se sert des touches z,q,s,d
ca marche bien mais parfois ca bug?

maj: j'ai remis la version 1 joueur(la version 2 joueurs est toujours presente dans le zip) car avec 2 joueurs ya pas mal de bug

Source / Exemple :


#include "terrain.h"

#define QUITTER 'a' 

#define P1_HAUT '8'
#define P1_BAS '5'
#define P1_GAUCHE '4'
#define P1_DROITE '6'

#define P2_HAUT 'z'
#define P2_BAS 's'
#define P2_GAUCHE 'q'
#define P2_DROITE 'd'

/************** fonction utilisée dans jeu() *******************/
void info()
{
	gotoxy(0,MAX_H+2);
	textcolor(ROUGE_C,BG);
	cout<<"score j1:"<<P1_score<<endl
		<<"score j2:"<<P2_score<<flush;
	gotoxy(0,0);
}

bool P1_testC(char c,char tmp)
{
	if(c==P1_HAUT || c==P1_GAUCHE || c==P1_BAS || c==P1_DROITE || c==QUITTER)
    if(!((c==P1_DROITE && tmp==P1_GAUCHE)||(tmp==P1_DROITE && c==P1_GAUCHE)||(c==P1_HAUT && tmp==P1_BAS)||(tmp==P1_HAUT && c==P1_BAS)) || c==QUITTER)
		return true;
	return false;
}

bool P2_testC(char c,char tmp)
{
	if(c==P2_HAUT || c==P2_GAUCHE || c==P2_BAS || c==P2_DROITE || c==QUITTER)
    if(!((c==P2_DROITE && tmp==P2_GAUCHE)||(tmp==P2_DROITE && c==P2_GAUCHE)||(c==P2_HAUT && tmp==P2_BAS)||(tmp==P2_HAUT && c==P2_BAS)) || c==QUITTER)
		return true;
	return false;
}

int getDir(char c)
{
	switch(c)
	{
	case P1_HAUT   :return 1;
	case P1_BAS    :return 2;
	case P1_GAUCHE :return 3;
	case P1_DROITE :return 4;
	case P2_HAUT   :return 1;
	case P2_BAS    :return 2;
	case P2_GAUCHE :return 3;
	case P2_DROITE :return 4;
	}
}

void fin()
{
	textcolor(BLANC,BG);
	system("cls");
	gotoxy(15,15);
	cout<<"perdu!!!   score joueur1 ="<<P1_score<<" points"
		<<"  score joueur2 ="<<P2_score<<" points"<<endl<<endl;
	cout<<"                appuyez sur une touche pour recommencer"<<endl;
	getch();
}

void jeu()
{
	int P1_dir, P2_dir;
    char c,tmp1,tmp2;
    bool touche=false;
	char terrain[MAX_L][MAX_H];
	SERPENT s1(5,10,4,VERT_C,VERT), s2(5,17,4,BLEU_C,BLEU);
    
	srand(time(NULL));
	system("cls");
	setcursortype(1);
	P1_score=0;
	P2_score=0;
    init(terrain,nbniveaux(),niveau);
    s1.affiche();
	s2.affiche();
	s1.getCoord(terrain);
	s2.getCoord(terrain);
	genereCible(terrain);
	info();
	getch();
    P1_dir=DROITE_;
	P2_dir=DROITE_;
	tmp1=P1_DROITE;
	tmp2=P2_DROITE;

    while(c!=QUITTER )
    {
        while((!kbhit() || touche) ) 
        {
            touche=false;			
            s1.avance(P1_dir);
			s2.avance(P2_dir);
	     	s1.getCoord(terrain);
			s2.getCoord(terrain);
	        if(s1.colision(terrain) || s2.colision(terrain))
			{
				getch();getch();
				goto fin;
			}
			if(s1.mange(cible))
			{
				s1.grandir();
				P1_score+=difficulte;
				info();
				genereCible(terrain);
			}
			if(s2.mange(cible))
			{
				s2.grandir();
				P2_score+=difficulte;
				info();
				genereCible(terrain);
			}
			Sleep(30+(9-difficulte)*8);
        }
		c=getch();
		if(P1_testC(c,tmp1))
		{
			tmp1=c;
			P1_dir=getDir(tmp1);
		}
		if(P2_testC(c,tmp2))
		{
			tmp2=c;
			P2_dir=getDir(tmp2);
		}
        touche=true;
    }
fin:
	setcursortype(2);
}

/********************** programme principal ********************/
void main()
{
	int nbn=nbniveaux();

	system("title SNAKE III");
	setcursortype(2);
	for(;;){
	while(niveau<1 || niveau>nbn)
    {
        system("cls");
		cout<<endl<<endl<<"     niveau(1 a "<<nbn<<"):";
        cin>>niveau;// variable globale
	}
    while(difficulte<1 || difficulte>9)
    {
        system("cls");
        cout<<endl<<endl<<"     niveau de difficulte (1 a 9):";
        cin>>difficulte;// variable globale
    }
	jeu();
	fin();
	niveau=0;
	difficulte=0;}
}

Conclusion :


il faur bien sur ne pas oublier de redimensionner la fenetre pour qu'elle ait une hauteur de 45 lignes au moins

Codes Sources

A voir également

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.