Pitit serpent[vc++6.0]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 551 fois - Téléchargée 34 fois

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

Ajouter un commentaire

Commentaires

Messages postés
293
Date d'inscription
jeudi 21 août 2003
Statut
Membre
Dernière intervention
10 avril 2015
2
Moi c'est encore pire que Hugadsl, J'ai pas econio.h et pourtant j'ai visual C++ 6.0 :'(
Tu peux pas m'envoyer le header a adeon@9online.fr ?
Je t'en suppli! Ca fai des semaines que je cherche comment me servir de gotoxy() et je n'y arrive pas, soit sympa!
Messages postés
6
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
12 janvier 2003

c'est bien beau tout ça mais moi je le compil avec dev-c++ et je sais pas quoi mettre a la place d'econio.h (je débute)... ;)
Merci d'une quelque reponse...
Messages postés
4
Date d'inscription
mercredi 17 avril 2002
Statut
Membre
Dernière intervention
5 février 2003

salut cmarsc,

mon code c'est du C++. Je l'ai compiler avec VC 6.0. Chez moi mon code marche meme avec setcursortype(NOCURSOR);. Moi par contre j'utilise pas conio.h ou conio car il marce pas avec VC 6.0. J'utilise econio.h qui est son adaptation en ANSI.
Moi aussi je pense que les fleches serait mieux que 5 et 8 mais mon compilateur les accepte pas.
Je comprend pas pk tu veux retourner un return a la fin d'une fonction void. Parce que justement ces types de fonctions ne retourne rien(pas comme int fonction(void) qui retourne un int).
Et sinon tu le trouve bien mon piti jeu???
Messages postés
455
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
18 décembre 2003

il serait plus simple d'utiliser les touches courantes à la place des 5 et 8
pour se déplacer
#define ENTER 13 // touches du clavier ENTREE
#define ESC 27 // ESC
#define LEFT 75 // fleche gauche
#define RIGHT 77 // fleche droite
#define UP 72 // fleche monter
#define DOWN 80 // fleche descendre

il y a une petite erreur de syntaxe
_setcursortype(_NOCURSOR); au lieu de setcursortype(NOCURSOR);
(conio.h ou conio.c) a moins ce que ce soit particulier à ton compilateur
Messages postés
455
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
18 décembre 2003

bool c'est du C++ et non du C à ma connaissance
Afficher les 6 commentaires

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.