1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
   | //----------------------------------------------------------------------//
// FICHIER              : 2DCHAP1.CPP			                        //
// AUTEUR               : Shaun Dore					                //
// DESCRIPTION  	    : Starfield horizontal pour demontrer putpixel  //
// DATE DE MODIFICATION : 30-09-97	                              	    //
// COMPILATEUR          : Borland Turbo C++ Real Mode 16-bit compiler   //
// NOTES                : Compiler avec modele memoire COMPACT          //
//----------------------------------------------------------------------//
 
//----------------------------------------------------------------------//
// Fichiers include                                                     //
//----------------------------------------------------------------------//
#include<time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
//----------------------------------------------------------------------//
// Declaration des constantes                                           //
//----------------------------------------------------------------------//
 
#define MAX_ETOILES 500
 
//----------------------------------------------------------------------//
// Types personalises                                                   //
//----------------------------------------------------------------------//
 
 struct type_etoile  // Pour contenir les infos sur chaque etoiles
{                           // Coordonnees x,y et "z"
  int x,y,z;
};
 
//----------------------------------------------------------------------//
// Variables globales           				  				        //
//----------------------------------------------------------------------//
 
char *ecran = (char *) (0xA0000000L);  // Pointeur sur RAM video
 
//----------------------------------------------------------------------//
// setmode - Appelle le mode passer en parametre                        //
//----------------------------------------------------------------------//
void setmode( )
{
  _asm {
	   mov Ah,0 
       mov al,19
	   int 10h
	 }
}
 
//----------------------------------------------------------------------//
// putpixel - Affiche un pixel directement dans la memoire              //
//----------------------------------------------------------------------//
void putpixel (int x, int y, unsigned char coul)
{
  ecran[(y*320)+x] = coul;
}
 
//----------------------------------------------------------------------//
// Fonction MAIN		           				  			            //
//----------------------------------------------------------------------//
void main()
{
 
  int et;
  unsigned char coul;
  type_etoile etoiles[MAX_ETOILES]; 
  setmode();
  srand(time(NULL));                     
  for (int i=0;i<=MAX_ETOILES;i++)  
  {
    etoiles[i].x = 0;
    etoiles[i].y = 0;
    etoiles[i].z = 0;
  }
  do
  {
    for (et=0;et<MAX_ETOILES;et++)
    {
	 for (unsigned int ralenti=0; ralenti<=1000; ralenti++) {} 
	 putpixel(etoiles[et].x,etoiles[et].y,0);
	 //efface ancienne position
	 etoiles[et].x = etoiles[et].x - (etoiles[et].z % 15 + 1);
	 // la vitesse de deplacement en fonction du z
	 if (etoiles[et].x <= 0)         // si l'etoile est a gauche...
	 {
	   etoiles[et].x = 319;          // on la remet a droite,
	   etoiles[et].y = rand()%200; // a une nouvelle hauteur,
	   etoiles[et].z = rand()%256; // sur un nouveau z.
      }
      coul = etoiles[et].z % 15 + 17;             // 17-32 = tons de gris
      putpixel(etoiles[et].x,etoiles[et].y,coul); // affiche nouvelle position
    }
  } while (!kbhit());
 
  setmode();
  printf("Shaun Dore\ndores@videotron.ca\nhttp://pages.infinit.net/shaun/");
} | 
Partager