Arkanoid tres simplifié avec bugs

Description

Un arkanoid somme toute loin d' être fini à cause d' une panne de reflexion de ma part sur des angles differents que peu prendre la boule suivant les collisions avec le décor.J ' essaie de le faire actuellement mais comme je le pense , cela n aboutit a rien de concret reellement a la fin. Les getpixels sont mal reconnus avec la gestion des angles.
Sinon le reste marche, sauf l effacement des cases, qui est parfois perfectible , comme vous le verez !

J aimerais plusieurs faire plusieurs niveaux , mais d abord je voudrais gerer l histoire des angles. Donc si quelqu un a une solution......

Enfin en vrai vous pouvez deplacer la boule en 8 directions .
1 = diago bas gauche
7=diago haut gauche
9=digo haut droite
3=diago bas droite
4= haut
2=bas
4=gauche
6=droite

Source / Exemple :


#include <math.h>
#include <iostream.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <dos.h>

#include <bitmap.h>
#include <time.h>
#include "Mouse_V2.h"
#include "Mouse.hpp"
#include "boulark.h"

struct Element
{
	float var1;
	Element *suiv;

};
Element *l=NULL;

struct Element2
{
	float var2;
	Element2 *suiv2;

};

Element2 *l2=NULL;

void supprimer(Element *e,Element2 *e2)
{
Element *precedent = l;
Element2 *precedent2 = l2;

if (e == l)
{
	l=NULL;
	delete e;
	return;

}
if (e2 == l2)
{
	l2=NULL;
	delete e2;
	return;
}

while (precedent != NULL && precedent->suiv != e)

	precedent=precedent->suiv;
	if (precedent==NULL)
	return;
	precedent->suiv = e-> suiv;
	delete e;

while (precedent2 != NULL && precedent2->suiv2 != e2)

	precedent2=precedent2->suiv2;
	if (precedent2==NULL)
	return;
	precedent2->suiv2 = e2-> suiv2;
	delete e2;
}

Element *rechercher(float var1)
{

Element *elem = l;
while (elem != NULL && elem->var1 != var1)

	      elem = elem->suiv;

return elem;
}

Element2 *rechercher2(float var2)
{

Element2 *elem2 = l2;

while (elem2 != NULL && elem2->var2 != var2)

	      elem2 = elem2->suiv2;

return elem2;

}

void ajoute(float var1,float var2)
{

 Element *elem= new Element;
 Element2 *elem2= new Element2;

   elem->var1=var1;

   elem2->var2=var2;
   elem->suiv=l;
   l=elem;

   elem2->suiv2=l2;
   l2=elem2;

}

void GraphInit(void)
{
   int gdriver = DETECT, gmode, errorcode;
   initgraph(&gdriver, &gmode, "");
   errorcode = graphresult();
   if (errorcode != grOk)  // an error occurred
   {
      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1);             // return with error code
   }
}

void calculator(int xmin,int xmax,float yaxe,float var1,float var2)
{
void *mem;
unsigned int size;
int ymin;
int ymax;
char buff[15];

Element *e;
Element2 *e2;

	sprintf(buff,":%d",yaxe);
	outtextxy(300,300,buff);

       if ((yaxe<=111)&&(yaxe>=102))
       {
	 ymin=102,ymax=111;
	 ajoute(var1,var2);
	e=rechercher(var1);
	e2=rechercher2(var2);
	supprimer(e,e2);

       }

       if ((yaxe<=101)&&(yaxe>=92))
       {
	 ymin=92;ymax=100;
	ajoute(var1,var2);
	e=rechercher(var1);
	e2=rechercher2(var2);
	supprimer(e,e2);
       }

       if ((yaxe<=91)&&(yaxe>=82))
       {
	ymin=82;ymax=91;
	ajoute(var1,var2);
	 e=rechercher(var1);
	 e2=rechercher2(var2);
	 supprimer(e,e2);
       }

       if ((yaxe<=81)&&(yaxe>=72))
       {
	 ymin=72;ymax=81;
	 ajoute(var1,var2);
	 e=rechercher(var1);
	 e2=rechercher2(var2);
	 supprimer(e,e2);
       }

       if ((yaxe<=71)&&(yaxe>=62))
       {
	 ymin=62;ymax=71;
	 ajoute(var1,var2);
	e=rechercher(var1);
	e2=rechercher2(var2);
	supprimer(e,e2);
       }

       if ((yaxe<=61)&&(yaxe>=52))
       {
	ymin=52;ymax=61;
	ajoute(var1,var2);
	e=rechercher(var1);
	e2=rechercher2(var2);
	supprimer(e,e2);
       }

	     size=imagesize(xmin,ymin,xmax,ymax);
	     mem=malloc(size);
	     getimage(xmin,ymin,xmax,ymax,mem);
	     putimage(xmin,ymin,mem,XOR_PUT);
	     free(mem);

}
void possibilites(float var1,float var2)
{
int xmin;
int xmax;
int ymin;
int ymax;
float yaxe;

	yaxe=var2;

	if ((var1>=52)&&(var1<=67)){xmin=52;xmax=67;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=68)&&(var1<=84)){xmin=68;xmax=84;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=85)&&(var1<=101)){xmin=86;xmax=101;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=102)&&(var1<=118)){xmin=103;xmax=118;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=119)&&(var1<=135)){xmin=120;xmax=135;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=136)&&(var1<=152)){xmin=137;xmax=152;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=153)&&(var1<=169)){xmin=154;xmax=169;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=170)&&(var1<=186)){xmin=171;xmax=186;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=187)&&(var1<=203)){xmin=188;xmax=203;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=204)&&(var1<=220)){xmin=205;xmax=220;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=221)&&(var1<=237)){xmin=222;xmax=237;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=238)&&(var1<=254)){xmin=239;xmax=254;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=255)&&(var1<=271)){xmin=256;xmax=271;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=272)&&(var1<=288)){xmin=273;xmax=288;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=289)&&(var1<=305)){xmin=290;xmax=305;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=306)&&(var1<=322)){xmin=307;xmax=322;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=323)&&(var1<=339)){xmin=324;xmax=339;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=340)&&(var1<=356)){xmin=341;xmax=356;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=357)&&(var1<=373)){xmin=358;xmax=373;calculator(xmin,xmax,yaxe,var1,var2);}
	if ((var1>=374)&&(var1<=390)){xmin=375;xmax=390;calculator(xmin,xmax,yaxe,var1,var2);}

}

int collision4(Boule B)
{

 float var1;
 float var2;
 char buff2[15];

	      

	      	if (15== getpixel(B.x,B.y)){
		var1=B.x;

		var2=B.y;sprintf(buff2,"%f",var2);outtextxy(300,20,buff2);
		possibilites(var1,var2);B.cond=1;sprintf(buff2,"%d",B.cond);
		outtextxy(375,390,buff2);
	     	}

	       return B.cond;

}

void cases ()
{

 int aleat;
 int x,y;
 int i;
 int j;
 char buff[15];
 unsigned int size;
 void *arrow;
srand((unsigned)time(NULL));

 i=0;
 setcolor(WHITE);

  rectangle(500,32,515,40);

for(j=0;j<=50;j=j+10)
 {
  i=0;
   for (x=0;x<300;x=x+15)
     {

   //  rectangle(52 + x + i,52 + j,67 + x + i,60 + j);
     size = imagesize(500,32,515,40);
     arrow = malloc(size);
     getimage(500,32,515,40,arrow);
     
     outtextxy(400,400,"vi");
     putimage(52 + x + i,52 + j,arrow,XOR_PUT);
     free(arrow);
   
     i=i+2;

     }
     
 }
  putimage(500,32,arrow,XOR_PUT);
}
void multicolor()
{

int j,k;

int color;

int i;

srand((unsigned)time(NULL));

	encore:;

	for (j=0;j<=350;j=j+5)
	{

		for (k=0;k<=350;k=k+5)
		{
		i=rand()%10;
		setcolor(RED + i);
		rectangle(50 + j,50 + k,50,50);
		setcolor(BLACK);

		}
	}
	for (j=0;j<=350;j=j+5)
	{

		for (k=0;k<=350;k=k+5)
		{
		i=rand()%10;
		setcolor(BLACK);
		rectangle(50 + j,50 + k,50,50);

		}

	}

}

void rectangl4(void)
{
   int j,k;

    for (j=0;j<=350;j=j+7)
    {

      for (k=0;k<=350;k=k+7)

	    {
		 setcolor(BLACK);
		 rectangle(50 + k ,50 + j ,50   ,50  );
		 setcolor(LIGHTCYAN);

	    }
     }

}

void rectangl3 (void)
{
int j,k;

	for (j=350;j>0;j=j-7)
	{

	 for (k=350;k>0;k=k-7)
	    {
		 setcolor(BLUE);
		 rectangle(50 + k ,50 + j ,50   ,50  );
		 setcolor(BLACK);

	    }
       }

}

void rectangl2(void)

{
  int j,k;

    for (j=350;j>0;j=j-7)
    {

     for (k=350;k>0;k=k-7)

	{

	 setcolor(GREEN);
	 rectangle(50 + j ,50 + k ,50 ,50 );
	 setcolor(BLACK);

	}

    }

}

void rectangl(void)
 {

 int j,k;

    for (j=0;j<350;j=j+7)
    {

     for (k=0;k<350;k=k+7)

	{

	 setcolor(RED);
	 rectangle(50 + j ,50 + k ,50 ,50 );
	 setcolor(BLACK);

	}

    }

}
void main (void)
{
 GraphInit();
 getch();
 char dir='R';
 int dir2=0;
 int dir3=1;
 char frappe,impact=0;
 int impact2=0;
 int impact3=0;
 int impact4=0;
 int impact5=0;

 char buffo[15];
 int cond;
char buff[15];
char buff2[15];
char buff3[15];
int scor=0;
int sco=0;
int X=200,Y=400;
int XMin,XMax;
int YMin,YMax;
int xx,yy;

 Boule B;
 B.Vx=0;B.Vy=0;B.x=225;B.y=345;

srand((unsigned int)time(NULL));

/*  rectangl();
  rectangl2();
  rectangl3();
  rectangl4();
 delay(20);
 multicolor();

  • /
DisplayBMP(0,0,"F:/TC/back5.bmp"); getch(); setcolor(WHITE); rectangle(50,50,394,394); cases(); B.makebar(); B.getbar(); B.make1(); B.get(); REGPACK reg; InitMouse(); XMin=50,XMax=345; SetMinMaxX(XMin,XMax); do { while (0== kbhit()) { MouseX(); MouseY(); B.move(reg); cond=collision4(B); B.cond=cond; if ((cond==1)&&(B.y<115)&&(B.y>52)) { scor+=10; setcolor(WHITE); outtextxy(110,20,"score :"); B.sco=scor; B.score(); } } frappe=getch(); B.change(frappe); } while (frappe!=27); _AX=0;geninterrupt(0x33); }

Conclusion :


Les bugs vous les verrez , ca fait pas de doute !!
Si le zip marche pas je sais pas pkoi !!
detection de collision toujours présentent dût au nombre reels utilisées pour les coordonnées de la boule qui sont tres grand.

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.