Soyez le premier à donner votre avis sur cette source.
Snippet vu 17 953 fois - Téléchargée 32 fois
#include <graphics.h> #include <iostream.h> #include <time.h> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <dos.h> #define ecart 5 void graphinit() { int gdriver = DETECT, gmode, errorcode; /* initialize graphics mode */ initgraph(&gdriver, &gmode, ""); /* read result of initialization */ 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 tirs (int cum[],unsigned int size,void *mem,int inc,int k) { setcolor(BLUE); circle(200 + cum[1],425,2); // circle(260,425 + cum[1],2); size=imagesize(195 + cum[1],420,205 + cum[1],430); mem=malloc(size);// alloue un espace memoire pour stocker la boule a la position voulue getimage(195 + cum[1] ,420 ,205 + cum[1],430 ,mem); putimage(195 + cum[1],420 ,mem,XOR_PUT);// pour effacer la boule a la position courante. putimage(195 + cum[1] - k ,420 - ecart - inc ,mem,XOR_PUT); // affiche if (inc>getmaxy()) // on refait partir la boule a l endroit ou on la lancer si on depasse le max des y inc=0; // delay(10); // si on applique le delay pb de compatibiliter avec le vaisseau putimage(195 + cum[1] - k,420 - ecart - inc ,mem,XOR_PUT); // efface } void effacevaisseau(int x,int y,int *poly)// efface { setcolor(BLACK); drawpoly(5,poly); line(200 + x,450 + y,200 + x,425 + y); line(260 + x,450 + y,260 + x,425 + y); } void affichevaisseau(int x,int y,int *poly) //affiche { setcolor(WHITE); drawpoly(5,poly); line(200 + x,450 + y,200 + x,425 + y); line(260 + x,450 + y,260 + x,425 + y); delay(10); } void main (void) { void *mem; int cum[1]={0};// cumul des x suivant une direction , pour l' instant juste droite int k=0; int poly[13];// initialise 6 points pour dessiner un avion, un peu moche d' ailleurs unsigned int size; int hit=0; int maxx; int maxy ; char dir; char dir2; int x=0; int y=0; int inc=0; //drawpoly graphinit(); maxx = getmaxx(); maxy = getmaxy(); do { while (kbhit()==0) { // calcule des nouvelles coordonnes chaque fois que l on se deplace dans une direction poly[0]=200 + x; poly[1]=450 + y; poly[2]=230 + x; poly[3]=400 + y; poly[4]=260 + x; poly[5]=450 + y; poly[6]=230 + x; poly[7]=420 + y; poly[8]=200 + x; poly[9]=450 + y; if (dir2==1) { tirs(cum,size,mem,inc,k); inc=inc + ecart; // incremente la variable inc pour faire avancer la boule sur y } affichevaisseau(x,y,poly); // affiche mon vaisseau switch(dir) { case 'A': effacevaisseau(x,y,poly); x++; cum[1]=x; if (dir2==1) { k+=1; // on cumul k pour que lorsque le tir a t enclench , l' axe des x reste inchang, sinon la boule par de travers } break; case 'B': effacevaisseau(x,y,poly); y--; break; case 'C': effacevaisseau(x,y,poly); x--; break; case 'D': effacevaisseau(x,y,poly); y++; break; } } hit=getch(); switch(hit)// suivant la touche appuyer on change de direction d' ou dir qui prend une valeur { case 54: dir='A'; break; case 56: dir='B'; break; case 52: dir='C'; break; case 53: dir='D'; break; case 13: dir2=1; // si on appuie sur entre la boule s' initialise au prochain tour a partir de kbhit break; } }while (hit!=27); free(mem); // libere le tampon closegraph(); }
23 sept. 2003 à 13:09
++
12 sept. 2003 à 19:43
12 sept. 2003 à 10:20
++
Eldered
11 sept. 2003 à 02:47
GRAPHICS.H (20,52) ERROR DIRECTIVE :BGI GRAPHICS NOT SUPPORTED UNDER WINDOWS an bon français sa vouloir dire que windows xp ne supporte pas ce graphique en tout ca j'attends de l'aide la dessus merci
10 sept. 2003 à 13:34
La premiere est l'utilisation de "thread" qui en fait simule 2 processus {caractéristique du bi-processuring} en un seul {deux thread pour un processus pour les mono processeur}. En gros, les fonctions 'avions et balle', vont s'effectuer en meme temps, sans aucune intereactivité entre elle au niveau du timer. Ms c'est trés difficille a mettre en place ...
La deuxieme, celle que je te conseille et de faire bouger la balle de plusieurs pixels {valeur constante} en meme temps pour simulé une avancée, et ce pour chacun des déplacmeents.
Voila, c ske je suis en train de faire pour un casse brique {Bientot sur ce site d'ailleurs ;)} et ça lmarche trés bien !
Ps: Si ton programme plante qd tu deplace, c parceu'il n'est pas adapté a ce systeme, cetres, si tu déplace ta balle de 5 pixels a chaque fois , il est possible que la balle ne heurte pas une ligne de collision precise que tu as défini, comme un enemi par exemple, car elle se retrouve directement dans l'ennemi sans passer par la "frontiere" !!! Il faut donc que tu fasses une fonction generique, genre, si la balle est entre une ligne a {point tete de l'enemi} et un ligne b {cul de l'ennemi}, effectuer action. Tu comprends ?
J'espere que j'ai bien cerné ton probléme et que j'ai pu t'aider!!!
++ et bc!
Eldered
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.