begin process at 2012 02 10 08:55:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.Net

 > ESSAI POUR DEVELOPPER UN JEU D' AVION

ESSAI POUR DEVELOPPER UN JEU D' AVION


 Information sur la source

Note :
Aucune note
Catégorie :.Net Classé sous :avion, jeu Niveau :Débutant Date de création :09/09/2003 Date de mise à jour :09/09/2003 18:22:26 Vu :15 664

Auteur : nomenclator

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Mon code ne va pas paraitre certainement tres clair, mais si certains comprennent le probleme auquel je vais faire reference, une aide serait la bienvenue.

En effet je voudrais afficher une boule qui parte dans une trajectoire donnée avec malloc...
mais mon probleme est que si j' institue un delay entre les 2 putimages , la vitesse du vaisseau en est affecté aussi.
En faite je pe pas adopter une meilleure solution parce que si je deplace le 2 eme putimage et le met plus loin entre le moment ou l'avion est affiché et effacé, j' ai mon programme qui plante lamentablement.

Voila.

Source

  • #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 coordonn,es . 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 entr,e la boule s' initialise au prochain tour a partir de kbhit
  • break;
  • }
  • }while (hit!=27);
  • free(mem); // libere le tampon
  • closegraph();
  • }
#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 coordonn,es . 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 entr,e la boule s' initialise au prochain tour a partir de kbhit
      break;
      }

  }while (hit!=27);

  free(mem); // libere le tampon
  closegraph();
}



 Sources du même auteur

Source avec Zip ARKANOID TRES SIMPLIFIÉ AVEC BUGS
UTILISATION DE MALLOC

 Sources de la même categorie

Source avec Zip Source avec une capture ANALYSEUR LEXICAL par Donald180v
Source avec Zip Source avec une capture MAP_MAKER_JEU par seekplus
Source avec Zip Source avec une capture Source .NET (Dotnet) EMISSION D'UN OCTET SUR LE PORT SÉRIE - CLASSE SERIALPORT par jmchatelet01
Source avec Zip Source .NET (Dotnet) RESOLV EQU DE DEGRES N par darckangel731
Source avec Zip Source avec une capture Source .NET (Dotnet) INTEROP XCHAT / .NET : CHARGEUR DE PLUGINS MANAGÉS par TeBeCo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SOKOBAN EN C POUR DÉBUTANT (VERSION AMÉLIORÉE BASÉE SUR LE T... par eustatika
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec Zip EXPERIENCES ALEATOIRES par cczerty
Source avec Zip AVION EVITE (VC++ V6.0) par mat74
Source avec Zip Source avec une capture JEUX DÉMO D'AVION AVEC DIRECTX (DIRECTDRAW 2D) par JCpp

Commentaires et avis

Commentaire de Aasea le 09/09/2003 23:36:00

prend direct x, apres tu me demande de laide je sui dispo, mais ton histoire de trajectoire al a malloc je pige rien, et ton histoire daffichage de boule c style le programme ki fai rebondir une boule a lekran ?

Commentaire de eldered le 10/09/2003 13:34:24

hum, je vois, en fait, il faut que tu effectue les deux déplacements en même temps. Je m'explique, si j'amais tu insere un délay dans la fonction qui fait bouger ta balle, le programme va en être ralenti, et ce dans sa globalité. Deux solution se presente alors a toi.

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

Commentaire de temoin le 11/09/2003 02:47:48

Allo est ce que quelqu'un peut m'aider je roule sur xp prof et mon borland 5.0 ne veut pas compiler ce prog voici l'erreur que je eu avec
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

Commentaire de eldered le 12/09/2003 10:20:16

Hum, ça peut pas fonctionner car il faut la librairie graphique Graphic.h de Turbo C 3.0. Sur Borland 5.0, je ne suis pas sur k'il y est cette librairie, renseigne toi, si elle est présente, je te dirai comment faire pour que le compilo la reconnaisse !

++

Eldered

Commentaire de eldered le 12/09/2003 19:43:56

De plus, c'est une librairie DOS donc sous win, c pas possible qu'elle fonctionne !

Commentaire de eldered le 23/09/2003 13:09:47

Ca en est ou ton jeu mec ? Je veux des nouvelles moi !!!!

++

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Dev d'un jeu à la Age of Empires [ par jaylin ] Si vous êtes intéressez par le développement d'un jeu à la Age of Empires mais en plus réaliste contactez moi sur ICQ: 108283779 ou mailez moi: jaylin Empire Warriors [ par jaylin ] Je pourrais savoir pourquoi la partie du forum consacré au jeu a été supprimé??Le site du jeu www.empire-warriors.fr.st Création d'un jeu de stratégie en CPP et DIRECTX ! [ par DunËsPIdËr ] SalUt à tOuS! Nous sommes actuellement 4 programmeurs et 1 infographiste. Nous voulons créer un jeu de stratégie en temps réel sous Win utilisant di un ptit jeu [ par BLaFarD ] euh, je viens de me pondre un petit moteur 3d de merde en opengldonc, si qlqun veut me filer des model 3d k'il a fait (sous 3dsmax si possible), bah, DIRECTX et interface [ par ELKI ] je suis en train de concevoir un jeu d'echec et j'aurai voulu savoir comment je pouurai faire pour associer des pièce d'un jeu d'echec avec mon interf jeu de go [ par mastergc ] je suis en train de réaliser un projet de jeu de go en C ms jai qqes pblèmes pr la réalisation alors si jamais qq'un pouvait me donner des tuyaux ou d Code pour steph [ par SmallToad ] Voici le code, 222 lignes. ca va etre moin lour que sur le chat, .#include &lt;stdlib.h&gt;#include &lt;iostream.h&gt;#include &lt;iomanip.h&gt;#inclu jeu du Réversi [ par cri54 ] Hello everybody!Je suis nouvelle sur ce site, et je suis à la recherche du programme sur le jeu du Réversi.Vous ne saurez pas où je pourrais le trouve Bases de données odbc [ par f1cobra ] Bonjour, Comment gérer le mode du jeu d'enregistrement pour une base de donnees access odbc ?J'essaie d'enregistrer des données a partir d'une boite d trie et comparaison dans un tableau pour un jeu [ par cats ] J'ai un devoir à faire et j'ai besoin d'aide. Mon programme est un petit jeu des Maîtres de la Lande. En gros voici mon problème! Dans le jeu, il a de


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,856 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales