FUEGO/FUEGO.CPP
2021-09-08 21:13:54 +02:00

128 lines
2.1 KiB
C++

#include <dos.h>
#include <conio.h>
#include <stdlib.h>
char *MPantalla;
char Pantalla[320][200];
void DoPaleta(void);
void CreaBase(void);
void CalculaFuego(void);
void main( void )
{
int x, y;
MPantalla = (char *)MK_FP(0xA000, 0); // create a pointer to video memory
asm mov al, 0x13
asm mov ah, 0x00
asm int 0x10
// Hacer paleta
DoPaleta();
randomize();
CreaBase();
/*
for ( x = 30; x < 290; x++ )
for ( y = 190; y < 80; y++ )
MPantalla[320*y+x] = Pantalla[x][y];
*/
do
{
CalculaFuego();
/*
for ( x=30; x<290; x++)
for ( y=190; y > 80; y -- )
MPantalla[320*y+x] = Pantalla[x][y];
*/
} while ( !kbhit() );
textmode(LASTMODE);
}
void DoPaleta(void)
{
int i;
for ( i=0; i<15; i++ )
{
outport( 0x3c9, 0 );
outport( 0x3c9, 0 );
outport( 0x3c9, 0 );
}
for ( i=0; i<7; i++ )
{
outport( 0x3c9, i*4);//i*4 );
outport( 0x3c9, i*4);//i*4 );
outport( 0x3c9, 0 );
}
for ( i=0; i<31; i++ )
{
outport( 0x3c9, 63 );
outport( 0x3c9, 63-i*2 );
outport( 0x3c9, 0 );
}
for ( i=0; i<63; i++ )
{
outport( 0x3c9, 63 );
outport( 0x3c9, 0 );
outport( 0x3c9, 0 );
}
outport( 0x3c8, 0 );
outport( 0x3c9, 0 );
outport( 0x3c9, 0 );
outport( 0x3c9, 0 );
}
void CreaBase(void)
{
int i;
for ( i=100; i < 220; i++ )
{
if ( random(100) < 30 )
//Pantalla[i][190] = random(150);
MPantalla[320*190 + i ] = random(150);
}
for ( i=100; i < 220; i++ )
{
if ( random(100) < 30 )
//Pantalla[i][189] = random(150);
MPantalla[320*189 + i ] = random(150);
}
}
void CalculaFuego(void)
{
int Cur, x, y;
for ( y = 120; y < 190; y++)
for ( x = 75; x < 245; x++)
{
// Cur = (Pantalla[x][y+1] + Pantalla[x+1][y+1] + Pantalla[x-1][y+1] + Pantalla[x+1][y]) >>2 ;
Cur = (MPantalla[x+320*(y+1)] + MPantalla[320*(y+1) + x+1] + MPantalla[320*(y+1)+x-1] + MPantalla[320*y +(x+1)]) >>2 ;
if ( Cur > 1 ) Cur--;
// Pantalla[x][y-1] = Cur;
MPantalla[320*( y-1) + x] = Cur;
}
CreaBase();
}