Pitit serpent[vc++6.0]

Contenu du snippet

c'est un petit serpent tout bete sous forme de caractères

Source / Exemple :


//************************************************//
//Le pitit Serpent v 1.0		                       //
//************************************************//

//les includes

//#include <stdlib.h> //vous en aurez peut etre besoin de pour srand() et rand()
#include <stdio.h>	//pour printf()
#include <econio.h>	//setcursortype(), clrscr(), textbackground(), gotoxy()
#include <time.h>	//pour time()

//Les defines (ex: quand le prog voit murs il le remplace par 43)

#define debutx 1
#define finx 20
#define debuty 1
#define finy 20
#define murs 43
#define colorpomme 4

//les fonctions

void terrain(void);
void jeu(void);
void menu(void);
void init_vars_type1(void);
void init_vars_type2(void);
int aleatoire(int nbre,int valmin,int valmax);
void pomme(void);
void init_ecran(void);
void options(void);

//les variables du jeu

int ecran[finx][finy] = {0};
int serpent[2][400] = {0};
int B=19;
int A=0;
int x=10;
int y=5;
char touche=NULL;
int D=1;
int E=0;
int tete=1;
int colortete=12;
int corps=42;
int colorcorps=14;
int pommex=5;
int pommey=5;
int score=0;
int vitesse=120;
bool Directionx=1;
bool Directiony=0;

//variables utilisees pour la boucle for

int i=0;
int j=0;
int colonnex=0;
int ligney=0;

int main()
{
	setcursortype(NOCURSOR);	//on suprime le cuseur
	srand((unsigned)time( NULL));	//initialisation de la fonction srand
	menu();	//demarage au menu
	return 0;
}

//******************************************************************/

void init_ecran(void)
{
	for(i=0;i<finx;i++)
	{
		for(j=0;j<finy;j++)
		{
			ecran[i][j]=0;	//on remplit le tableau ecran de 0
		}
	}
	clrscr();	//on efface l ecran
}

//******************************************************************/

void init_vars_type1(void)	//variables a initialiser avant chaque partie
{
	B=19;
	A=0;
	x=10;
	y=5;
	D=1;
	E=0;
	Directionx=1;
	Directiony=0;
	pommex=5;
	pommey=5;
	score=0;
}
//******************************************************************/
void init_vars_type2(void)	//variables de la fonction option
{
	vitesse=120;
	colorcorps=14;
	colortete=12;
	corps=42;
	tete=1;
}
//******************************************************************/

void menu(void)
{
	clrscr();
	int flechey=10;	//position de la fleche =>
	textbackground(RED);
	gotoxy(31,1);
	printf("-------");
	gotoxy(31,3);
	printf("-------");
	gotoxy(31,2);
	printf("|");
	gotoxy(37,2);
	printf("|");
	textbackground(GREEN);
	gotoxy(32,2);
	printf("Snake");
	gotoxy(50,5);
	printf("by Myror");
	gotoxy(3,7);
	printf("Choisisser avec les touches '8'et'5':");
	textbackground(WHITE);
	gotoxy(12,10);
	printf("Jouer");
	gotoxy(12,11);
	printf("Regles du jeu");
	gotoxy(12,12);
	printf("Options");
	gotoxy(12,13);
	printf("Quitter");
	while(true)
	{
		gotoxy(9,flechey);
		printf("=>");
		touche=getch();
		switch(touche)
		{
			case'5':	//on descent =>
				gotoxy(9,flechey);
				printf("  ");	//on efface la => precedente
				flechey++;
				if(flechey==14)
					flechey=10;
				break;
			case'8':	//on monte =>
				gotoxy(9,flechey);
				printf("  ");
				flechey--;
				if(flechey==9)
					flechey=13;
				break;
			case 13:
				switch(flechey)
				{
					case 10:	//on initialise avant de commencer une partie
						init_ecran();
						terrain();
						init_vars_type1();
						jeu();
						break;
					case 11:
						clrscr();
						printf("\nLes regles du jeu pour ce serpent sont les memes que pour le serpent\n\n des portables. Le but est de saisir les pommes et autres bonus sur le terrain\n\n Les fleches de direction sont:\n\n 4->droite\n 6->gauche\n 5->bas\n 8->haut\n\n dans le jeu vous pouvez appuyer a tout moment sur 'q' pour quitter.\n\n\n\n\n\n\t\t\tveuillez saisir une touche pour retourner au menu");
						getch();
						menu();
						break;
					case 12:
						options();
						break;
					case 13:
						break;
				}
			case 'q':
				gotoxy(54,23);
				exit(1);
				break;
		}
	}
}

//******************************************************************/

void terrain(void)	//on dessine les 4 mur du terrain
{
	clrscr();
	for(i=1;i<=finx;i++)
	{
		ecran[i-1][debuty-1]=0;
		gotoxy(i,debuty);
		printf("%c",murs);
	}
	for(i=1;i<=finx;i++)
	{
		ecran[i-1][finy-1]=0;
		gotoxy(i,finy);
		printf("%c",murs);
	}
	for(i=1;i<=finy;i++)
	{
		ecran[debutx-1][i-1]=0;
		gotoxy(debutx,i);
		printf("%c",murs);
	}
	for(i=1;i<=finy;i++)
	{
		ecran[finx-1][i]=0;
		gotoxy(finx,i);
		printf("%c",murs);
	}
}

//*********************************************************************/

void jeu(void)
{
	int mouvement=0;	//variable d initialistion
	while(true)
	{
		do
		{
			Sleep(vitesse);
			mouvement++;
			x+=D;
			y+=E;
			
			//Si le serpent arrive sur un bords le faire reaparaitre de l'autre cote

			if(x==finx)
				x=debutx+1;
			else if(x==debutx)
				x=finx-1;
			else if(y==debuty)
				y=finy-1;
			else if(y==finy)
				y=debuty+1;

			if(ecran[x][y]==1)	//si le serpent se mords la queue le jeu est perdu
			{
				gotoxy(10,0);
				printf("perdu");
				getch();
				menu();
			}
			else if(ecran[x][y]==2 || mouvement==1)		//si le serpent mange une pomme ou si c est le premier mouvement
			{
				if(mouvement>1)		//seulement si le serpent a mange la pomme
				{
					if(A==0)
						A=399;
					else
						A--;	//il grandit
					score++;	//le score augmente d un point
				}
				pomme();	//on cree une pomme
			}
			gotoxy(40,5);
			textbackground(LIGHTBLUE);
			printf("Ton score: %d",score);	//on affiche le score
			
			//on affiche le serpent

			serpent[0][B]=x;
			serpent[1][B]=y;
			ecran[serpent[0][B]][serpent[1][B]] = 1;
			gotoxy(serpent[0][B],serpent[1][B]);
			textbackground(colortete);
			printf("%c",tete);
			gotoxy(serpent[0][B-1],serpent[1][B-1]);
			textbackground(colorcorps);
			printf("%c",corps);
			B++;
			if(B==399)
				B=0;
			ecran[serpent[0][A]][serpent[1][A]] = 0;
			gotoxy(serpent[0][A],serpent[1][A]);
			printf(" ");
			A++;
			if(A==399)
				A=0;
		}while(!kbhit());	//si une touche est pressee

		touche=getch();
		switch(touche)
		{
			case'8':
				if(Directiony!=1)	//Directionx et Directiony sert a ce que le joueur ne perde pas 
									//betement en appuyant par exemple sur 'bas' alors que le serpent monte
				{
					D=0;
					E=-1;
					Directionx=0;
					Directiony=1;
				}
				break;
			case'5':
				if(Directiony!=1)
				{
					D=0;
					E=1;
					Directionx=0;
					Directiony=1;
				}
				break;
			case'6':
				if(Directionx!=1)
				{
					D=1;
					E=0;
					Directionx=1;
					Directiony=0;
				}
				break;
			case'4':
				if(Directionx!=1)
				{
					D=-1;
					E=0;
					Directionx=1;
					Directiony=0;
				}
				break;
			case'q':
				gotoxy(0,0);
				exit(1);
		}
	}
}

//***********************************************************************/

int aleatoire(int nbre,int valmin,int valmax)
{
	valmax-=valmin;
	nbre=rand()%(valmax); //on met dans nbre un nombre entre 0 et valmax
	nbre+=valmin;
	return nbre;	//on retourne nbre compris entre valmin et valmax
}

//***********************************************************************/

void pomme(void)
{
	while(ecran[pommex][pommey]!=0)
	{
		pommex=aleatoire(pommex,debutx+1,finx-1);
		pommey=aleatoire(pommey,debuty+1,finy-1);
	}
	ecran[pommex][pommey]=2;	//on met '2' dans le tableau ecran au coordonnees de la pomme
	gotoxy(pommex,pommey);
	textbackground(colorpomme);
	printf("%c",149);	//on desssine la pomme
}

//************************************************************************/

void options(void)
{
	int nbreplot=0;
	int colorplot[7]={4,15,15,15,15,15,15};
	int colorniveau[10]={15,0,0,0,0,0,0,0,0,0};

	clrscr();
	textbackground(RED);
	gotoxy(31,1);
	printf("---------");
	gotoxy(31,3);
	printf("---------");
	gotoxy(31,2);
	printf("|");
	gotoxy(39,2);
	printf("|");
	textbackground(GREEN);
	gotoxy(32,2);
	printf("Options");
	gotoxy(5,5);
	printf("'4' et '6' pour modifier");
	gotoxy(5,6);
	printf("'8' et'5' pour passer a l'option suivante");
	textbackground(WHITE);
	gotoxy(5,9);
	printf("forme de la tete:");
	gotoxy(5,10);
	printf("forme du corps:");
	gotoxy(5,11);
	printf("couleur de la tete:");
	gotoxy(5,12);
	printf("couleur du corps:");
	gotoxy(5,18);
	printf("niveau de difficulte:");
	while(true)
	{
		//on dessine a l ecran toutes les options avec des variables pour la couleur et la forme
		//contrairement a ce que l on peut croire tout les caracterres sont dessines mais si on 
		//les voient pas c'est qu'ils sont en noirs (par exemple pour la vitesse)

		textbackground(colortete);
		gotoxy(24,9);
		printf("%c",tete);
		textbackground(colorplot[0]);
		gotoxy(23,9);
		printf("%c",17);
		gotoxy(25,9);
		printf("%c",16);

		textbackground(colorcorps);
		gotoxy(22,10);
		printf("%c",corps);
		textbackground(colorplot[1]);
		gotoxy(21,10);
		printf("%c",17);
		gotoxy(23,10);
		printf("%c",16);

		textbackground(colortete);
		gotoxy(26,11);
		printf("%c",219);
		textbackground(colorplot[2]);
		gotoxy(25,11);
		printf("%c",17);
		gotoxy(27,11);
		printf("%c",16);

		textbackground(colorcorps);
		gotoxy(24,12);
		printf("%c",219);
		textbackground(colorplot[3]);
		gotoxy(23,12);
		printf("%c",17);
		gotoxy(25,12);
		printf("%c",16);

		textbackground(colorniveau[0]);
		gotoxy(29,18);
		printf("%c",220);

		textbackground(colorniveau[1]);
		gotoxy(30,18);
		printf("%c",219);

		textbackground(colorniveau[2]);
		gotoxy(31,18);
		printf("%c",219);
		gotoxy(31,17);
		printf("%c",220);

		textbackground(colorniveau[3]);
		gotoxy(32,18);
		printf("%c",219);
		gotoxy(32,17);
		printf("%c",219);

		textbackground(colorniveau[4]);
		gotoxy(33,18);
		printf("%c",219);
		gotoxy(33,17);
		printf("%c",219);
		gotoxy(33,16);
		printf("%c",220);

		textbackground(colorniveau[5]);
		gotoxy(34,18);
		printf("%c",219);
		gotoxy(34,17);
		printf("%c",219);
		gotoxy(34,16);
		printf("%c",219);

		textbackground(colorniveau[6]);
		gotoxy(35,18);
		printf("%c",219);
		gotoxy(35,17);
		printf("%c",219);
		gotoxy(35,16);
		printf("%c",219);
		gotoxy(35,15);
		printf("%c",220);

		textbackground(colorniveau[7]);
		gotoxy(36,18);
		printf("%c",219);
		gotoxy(36,17);
		printf("%c",219);
		gotoxy(36,16);
		printf("%c",219);
		gotoxy(36,15);
		printf("%c",219);

		textbackground(colorniveau[8]);
		gotoxy(37,18);
		printf("%c",219);
		gotoxy(37,17);
		printf("%c",219);
		gotoxy(37,16);
		printf("%c",219);
		gotoxy(37,15);
		printf("%c",219);
		gotoxy(37,14);
		printf("%c",220);

		textbackground(colorniveau[9]);
		gotoxy(38,18);
		printf("%c",219);
		gotoxy(38,17);
		printf("%c",219);
		gotoxy(38,16);
		printf("%c",219);
		gotoxy(38,15);
		printf("%c",219);
		gotoxy(38,14);
		printf("%c",219);

		textbackground(colorplot[4]);
		gotoxy(28,18);
		printf("%c",17);
		gotoxy(39,18);
		printf("%c",16);

		textbackground(colorplot[5]);
		gotoxy(5,20);
		printf("valeurs par defauts");

		textbackground(colorplot[6]);
		gotoxy(60,23);
		printf("enregistrer");

		touche=getch();
		switch(touche)
		{
			case'5':	//les plots descendent
				colorplot[nbreplot]=WHITE;	//les plots < > precedent redevienne blanc
				nbreplot+=1;
				if(nbreplot==6+1)
					nbreplot=0;
				colorplot[nbreplot]=RED;	//les plot de selections devienne rouge
				break;
			case'8':	//les plots montent
				colorplot[nbreplot]=WHITE;
				nbreplot-=1;
				if(nbreplot==0-1)
					nbreplot=6;
				colorplot[nbreplot]=RED;
				break;
			case'6':
				if(nbreplot==0)
				{
						tete+=1;
						if(tete==7)	//les caracteres 7,8,9,10,26,27,32,255 ne vont pas pour la tete
							tete=11;
						else if(tete==26)
							tete=28;
						else if(tete==32)
							tete=33;
						else if(tete==255)
							tete=1;
						break;
				}
				else if(nbreplot==1)
				{
					corps+=1;
					if(corps==7)	//les caracteres 7,8,9,10,26,27,32,255 ne vont pas pour le corps
						corps=11;
					else if(corps==26)
						corps=28;
					else if(corps==32)
						corps=33;
					else if(corps==255)
						corps=1;
					break;
				}
				else if(nbreplot==2)
				{
					colortete+=1;	//le choix de la couleur de la tete
					if(colortete==16)
						colortete=1;
					break;
				}
				else if(nbreplot==3)
				{
					colorcorps+=1;	////le choix de la couleur de le corps
					if(colorcorps==16)
						colorcorps=1;
					break;
				}
				else if(nbreplot==4)
				{
					if(vitesse>30)	//le changement de couleur en fonction de la vitesse
						vitesse-=10;
					if(vitesse<=120)
						colorniveau[0]=WHITE;
					else
						colorniveau[0]=BLACK;
					if(vitesse<=110)
						colorniveau[1]=WHITE;
					else
						colorniveau[1]=BLACK;
					if(vitesse<=100)
						colorniveau[2]=WHITE;
					else
						colorniveau[2]=BLACK;
					if(vitesse<=90)
						colorniveau[3]=WHITE;
					else
						colorniveau[3]=BLACK;
					if(vitesse<=80)
						colorniveau[4]=YELLOW;
					else
						colorniveau[4]=BLACK;
					if(vitesse<=70)
						colorniveau[5]=YELLOW;
					else
						colorniveau[5]=BLACK;
					if(vitesse<=60)
						colorniveau[6]=YELLOW;
					else
						colorniveau[6]=BLACK;
					if(vitesse<=50)
						colorniveau[7]=LIGHTRED;
					else
						colorniveau[7]=BLACK;
					if(vitesse<=40)
						colorniveau[8]=LIGHTRED;
					else
						colorniveau[8]=BLACK;
					if(vitesse<=30)
						colorniveau[9]=RED;
					else
						colorniveau[9]=BLACK;
				}
				break;
			case'4':	//meme chose que quand on appui sur '6' suaf dans l'autre sens
				if(nbreplot==0)
				{
						tete-=1;
						if(tete==10)
							tete=6;
						else if(tete==27)
							tete=25;
						else if(tete==32)
							tete=31;
						else if(tete==1)
							tete=254;
						break;
				}
				else if(nbreplot==1)
				{
					corps-=1;
					if(corps==10)
						corps=6;
					else if(corps==27)
						corps=25;
					else if(corps==32)
						corps=31;
					else if(corps==1)
						corps=254;
					break;
				}
				else if(nbreplot==2)
				{
					colortete-=1;
					if(colortete==0)
						colortete=15;
					break;
				}
				else if(nbreplot==3)
				{
					colorcorps-=1;
					if(colorcorps==0)
						colorcorps=15;
					break;
				}
				else if(nbreplot==4)
				{
					if(vitesse<120)
						vitesse+=10;
					if(vitesse>120)
						colorniveau[0]=BLACK;
					else if(vitesse>110)
						colorniveau[1]=BLACK;
					else if(vitesse>100)
						colorniveau[2]=BLACK;
					else if(vitesse>90)
						colorniveau[3]=BLACK;
					else if(vitesse>80)
						colorniveau[4]=BLACK;
					else if(vitesse>70)
						colorniveau[5]=BLACK;
					else if(vitesse>60)
						colorniveau[6]=BLACK;
					else if(vitesse>50)
						colorniveau[7]=BLACK;
					else if(vitesse>40)
						colorniveau[8]=BLACK;
					else if(vitesse>30)
						colorniveau[9]=BLACK;
				}
				break;
			case 13:
				if(nbreplot==5)
				{
					init_vars_type2();
					if(vitesse<=120)	//quand on initialise les variables la vitesse s initialise tout de suite(pas si on enleve la suite)
						colorniveau[0]=WHITE;
					else
						colorniveau[0]=BLACK;
					if(vitesse<=110)
						colorniveau[1]=WHITE;
					else
						colorniveau[1]=BLACK;
					if(vitesse<=100)
						colorniveau[2]=WHITE;
					else
						colorniveau[2]=BLACK;
					if(vitesse<=90)
						colorniveau[3]=WHITE;
					else
						colorniveau[3]=BLACK;
					if(vitesse<=80)
						colorniveau[4]=YELLOW;
					else
						colorniveau[4]=BLACK;
					if(vitesse<=70)
						colorniveau[5]=YELLOW;
					else
						colorniveau[5]=BLACK;
					if(vitesse<=60)
						colorniveau[6]=YELLOW;
					else
						colorniveau[6]=BLACK;
					if(vitesse<=50)
						colorniveau[7]=LIGHTRED;
					else
						colorniveau[7]=BLACK;
					if(vitesse<=40)
						colorniveau[8]=LIGHTRED;
					else
						colorniveau[8]=BLACK;
					if(vitesse<=30)
						colorniveau[9]=RED;
					else
						colorniveau[9]=BLACK;
					break;
				}
				else if(nbreplot==6)
				{
					menu();
				}
				break;
		}
	}
}

Conclusion :


Il y a un bug pas bien mechant qui dessine une etoile * en haut a gauche de l'ecran quand le score ce trouve entre 15 et 20.

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.