Serpent

Description

Le jeux du serpent.

Source / Exemple :


//****************Serpont by Neurokida*************************

#include <mem.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <ctype.h>

char *ecran  = (char *) (0xA0000000L);

char *virtuel = new unsigned char[64000L];

void setmode(unsigned int mode)
{
asm {
MOV AX, [mode]
INT 0x10
}}

//CLS l'ecran.
void clsvirt()
{memset(virtuel,0,64000L);}

//RAM TO memoire video
void cpyvirt()
{memcpy(ecran,virtuel,64000L);}

//Ecran virtuel
void pixel(int x, int y, unsigned char col)
{virtuel[(y*320)+x] = col;}

int Key= 'K';
int Acce=0;//pour quitter les fonction quand la bonne touche est press‚
int BoulleX=150;
int BoulleY=75;//boulle
int LongueurSerpent=13;//taille du serpent
int Colision=0;//colision entre le serpent lui m‚me et les murs
int Points=0;//score
int X=190,Y=75;
//Qui contient X,Y.
struct XY
{
int X;
unsigned char Y;
};

//Tableau de structure
struct XY Serpent[4000];

void Colisions()
{
for(int i=5;i<LongueurSerpent;i++)
{
if((Serpent[0].X==Serpent[i].X) && (Serpent[0].Y==Serpent[i].Y))
{Colision=1;
}}
if ((Serpent[0].X==100) || (Serpent[0].X==200))
{Colision=1;
}
if ((Serpent[0].Y==50) || (Serpent[0].Y==100))
{Colision=1;
}}

void Boulle()
{
if ((Serpent[0].X==BoulleX) && (Serpent[0].Y==BoulleY))
{
printf ("\a");
delay(5);
printf ("\a");
BoulleX=(rand()%98)+101;
BoulleY=(rand()%48)+51;
LongueurSerpent++;
Points+=10;
}
pixel(BoulleX,BoulleY,50);
}

void AfficheSerpent()
{
for (int PixelSerpent=0;PixelSerpent<LongueurSerpent;PixelSerpent++)
{
pixel(Serpent[PixelSerpent].X,Serpent[PixelSerpent].Y,60);
}
//Rectangle de delimitation visuel
for (int i=100;i<200;i++)
pixel(i,50,50);
for (i=100;i<200;i++)
pixel(i,100,50);
for (i=50;i<100;i++)
pixel(100,i,50);
for (i=50;i<101;i++)
pixel(200,i,50);
}

void BougeSerpent()
{
for (int i=LongueurSerpent,a=(LongueurSerpent)-1;i>0;i--,a--)
{
Serpent[i].X=Serpent[a].X;
Serpent[i].Y=Serpent[a].Y;
}
AfficheSerpent();
Boulle();
Colisions();
while(!(inp(0x3DA)&8));
while(!(inp(0x3DA)&8));
cpyvirt();
gotoxy(15,3);printf("Score:%d",Points);
clsvirt();
delay (40);//ralenti le jeux
}

void SerpentDroite()
{
while (Acce!=1)
{
BougeSerpent();
X++;
Serpent[0].X=X;
if (Colision==1)
return;
if (kbhit())
{
Key = toupper(getch());
if ((Key=='H') || (Key=='P') || (Key=='Q'))
{
Acce=1;
}}}
Acce=0;
}

void SerpentGauche()
{
while (Acce!=1)
{
BougeSerpent();
X--;
Serpent[0].X=X;
if (Colision==1)
return;
if (kbhit())
{
Key = toupper(getch());
if ((Key=='H') || (Key=='P') || (Key=='Q'))
{
Acce=1;
}}}
Acce=0;
}

void SerpentHaut()
{
while (Acce!=1)
{
BougeSerpent();
Y--;
Serpent[0].Y=Y;
if (Colision==1)
return;
if (kbhit())
{
Key = toupper(getch());
if ((Key=='K') || (Key=='M') || (Key=='Q'))
{
Acce=1;
}}}
Acce=0;
}

void SerpentBas()
{
while (Acce!=1)
{
BougeSerpent();
Y++;
Serpent[0].Y=Y;
if (Colision==1)
return;
if (kbhit())
{Key = toupper(getch());
if ((Key=='K') || (Key=='M') || (Key=='Q'))
{
Acce=1;
}}}
Acce=0;
}

KEY()
{
while (Key != 'Q')
{
if (Key=='M')
{
printf ("\a");
SerpentDroite();
}
else if (Key=='K')
{
printf ("\a");
SerpentGauche();
}
else if (Key=='H')
{
printf ("\a");
SerpentHaut();
}
else if (Key=='P')
{
printf ("\a");
SerpentBas();
}
if (Colision==1)
{
delay(1000);
clsvirt();
cpyvirt();
delay(1000);
gotoxy(15,10);printf("Game Over !!!");
printf("\a");
gotoxy(10,8);printf("Votre score est de:%d",Points);
delay (700);
printf("\a");
delay (300);
printf("\a");
delay (300);
printf("\a");
delay (700);
printf("\a");
delay (700);
printf("\a");
delay (6000);
return 0;
}
}
return 0;
}

void main()
{
setmode(0x13);
//INTRO
/////////////////
printf ("\n");
printf ("		      .-----.  \n");
printf ("~~~~~~~~~~~~~~~~~~~~~~       O\\  \n");
printf ("(   (    (    (   (            ---.    \n");
printf ("~~~~~~~~~~~~~~~~~~~~\\             /===<\n");
printf ("		     -------------   \n");
printf ("\n\n");
printf("*- Serpont-*\n\n");
printf("- Touches de deplacement:\n\n");
printf("   /\\\n");
printf("   II  \n");
printf("<= \\/ =>\n\n");
printf("- Q = Quitter\n\n");
delay (8000);
printf("Appuiez sur une touche pour continuer");
getch();
/////////////////

clsvirt();
srand(time(NULL));
Serpent[0].X=X;//initialise la tete avec X et Y
Serpent[0].Y=Y;
cpyvirt();
delay (3500);

KEY();

delete []virtuel;//Vider la RAM.
setmode(0x03);
printf("\n\n  Serpont\n\nBy Neurokida 20/05/2001 :]---<");
}

Conclusion :


Realisé sous Borland C++ 3.0
Contient un peut de code ASM

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.

Du même auteur (Neurokida)