First commit 17/01/1997
This commit is contained in:
commit
a680933bab
711
PINBALL.CPP
Normal file
711
PINBALL.CPP
Normal file
@ -0,0 +1,711 @@
|
||||
#include <dos.h>
|
||||
#include <conio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
// S T R U C T U R E S //////////////////////////////////////////////////////
|
||||
char far *MemTexto = (char far *)0xB8000000;
|
||||
|
||||
typedef struct worm_typ
|
||||
{
|
||||
int y; // current y position of worm
|
||||
int color; // color of worm
|
||||
int speed; // speed of worm
|
||||
int counter; // counter
|
||||
|
||||
} worm, *worm_ptr;
|
||||
|
||||
worm worms[90]; // used to make the screen melt
|
||||
|
||||
unsigned int far *clock = (unsigned int far *)0x0000046C; // pointer to internal
|
||||
// 18.2 clicks/sec
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
char ptr_char[4096];
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int x, y; // Coordenadas iniciales de muestreo
|
||||
char ndigitos; // n£mero de digitos a mostrar
|
||||
char AX, AY; // factor de espaciado
|
||||
char C1, C2, C3; // colores de fondo, texto, borde
|
||||
|
||||
// Datos privados y uso interno exclusivamente
|
||||
unsigned int Flen; // longitud de la frase actual
|
||||
char BitByte; // bit del byte por el que va en el recorrido
|
||||
char currByte; // byte actual dentro de la frase
|
||||
|
||||
|
||||
|
||||
// Datos no validos para el nuevo formato de frase
|
||||
char FraseBit[110][16];
|
||||
char Frase1[100];
|
||||
|
||||
char Flen1;
|
||||
|
||||
} p_Ampliada;
|
||||
|
||||
void LeeFuentes(char *file);
|
||||
void FuenteAmplia( char *Frase, p_Ampliada far *FA, char ini );
|
||||
void aFuenteAmplia( char *Frase, p_Ampliada far *FA );
|
||||
|
||||
p_Ampliada sPinBall = { 2, 0, 3, 1, 1, BLACK, BLUE, BLUE };
|
||||
p_Ampliada sPinBallC = { 12, 1, 7, 1, 1, BLACK, BLUE, BLUE };
|
||||
p_Ampliada sPinBallB = { 12,12, 7, 1, 1, BLACK, BLUE, BLUE };
|
||||
|
||||
|
||||
#define IZQUIERDO 1
|
||||
#define DERECHO 0
|
||||
|
||||
#define RELAX 0
|
||||
#define PULSO 1
|
||||
|
||||
#define RESET 0
|
||||
#define OK 1
|
||||
|
||||
#define SUBE 1
|
||||
#define BAJA -1
|
||||
|
||||
struct Petaco
|
||||
{
|
||||
char Petaco[3][10];
|
||||
};
|
||||
|
||||
struct Petaco PetacoI[4] = { {"(\\\\ ",
|
||||
" \\\\ ",
|
||||
" \\\\ "},
|
||||
|
||||
{"(\\\\ ",
|
||||
" \\\\ ",
|
||||
" == "},
|
||||
|
||||
{"(\\\\ ",
|
||||
" ==== ",
|
||||
" "},
|
||||
|
||||
{"(====== ",
|
||||
" ",
|
||||
" "} };
|
||||
|
||||
struct Petaco PetacoD[4] = {
|
||||
{" //)",
|
||||
" // ",
|
||||
" // "},
|
||||
{" //)",
|
||||
" // ",
|
||||
" == "},
|
||||
{" //)",
|
||||
" ==== ",
|
||||
" "},
|
||||
{" ======)",
|
||||
" ",
|
||||
" "} };
|
||||
|
||||
|
||||
void DibujaPetaco( char CUAL, char PulsoRelax );
|
||||
void ProcesaLuzTirador( char OkReset );
|
||||
void DistorsionaFondoInfo( void );
|
||||
void AccionaTirador( char Como );
|
||||
void DibujaTablero( void );
|
||||
void Melt( void );
|
||||
|
||||
void main(void)
|
||||
{
|
||||
int ok, key;
|
||||
char buffer[4096], y;
|
||||
y = (char)wherey();
|
||||
gettext(1, 1, 80, 25, buffer);
|
||||
|
||||
|
||||
Melt();
|
||||
_setcursortype(_NOCURSOR);
|
||||
|
||||
LeeFuentes( "PinBall.Fnt" );
|
||||
|
||||
DibujaTablero();
|
||||
|
||||
DibujaPetaco( IZQUIERDO, PULSO );
|
||||
DibujaPetaco( DERECHO , PULSO );
|
||||
ProcesaLuzTirador( RESET );
|
||||
|
||||
ok = 0;
|
||||
do {
|
||||
if ( kbhit() )
|
||||
switch( getch() )
|
||||
{
|
||||
case '1':
|
||||
DibujaPetaco( IZQUIERDO, PULSO );
|
||||
break;
|
||||
case '2':
|
||||
DibujaPetaco( DERECHO, PULSO );
|
||||
break;
|
||||
case 27:
|
||||
ok = 1;
|
||||
break;
|
||||
|
||||
|
||||
case 0:
|
||||
switch( getch() )
|
||||
{
|
||||
// Tirador
|
||||
case 80:
|
||||
AccionaTirador(1);
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
AccionaTirador(0);
|
||||
DistorsionaFondoInfo();
|
||||
DibujaPetaco( IZQUIERDO, RELAX );
|
||||
DibujaPetaco( DERECHO , RELAX );
|
||||
ProcesaLuzTirador( OK );
|
||||
aFuenteAmplia( "Jose David Guillen", &sPinBall );
|
||||
delay(50);
|
||||
} while( !ok );
|
||||
|
||||
_setcursortype(_NORMALCURSOR);
|
||||
puttext(1, 1, 80, 25, buffer);
|
||||
gotoxy( 1, y ); printf( "\n" );
|
||||
printf( "UPAD:\n" );
|
||||
printf( " Un pinBALL algo diferente \n" );
|
||||
printf( " JD Soft. _-ùFuTuRe ViSiOnù-_\n" );
|
||||
|
||||
}
|
||||
|
||||
void AccionaTirador( char Como )
|
||||
{
|
||||
static char Posicion = 6, SubeBaja = BAJA;
|
||||
|
||||
// Inicializamos el movimiento
|
||||
if ( Como == 1 )
|
||||
{
|
||||
Posicion = 6;
|
||||
SubeBaja = BAJA;
|
||||
} else {
|
||||
if ( SubeBaja == SUBE && Posicion == 6 )
|
||||
return;
|
||||
}
|
||||
|
||||
if ( Posicion != 0 )
|
||||
{
|
||||
Posicion+= SubeBaja; if ( Posicion == 0 ) SubeBaja = SUBE;
|
||||
}
|
||||
|
||||
textcolor( WHITE );
|
||||
switch( (SubeBaja == BAJA ? Posicion : ( 6 - Posicion )) )
|
||||
{
|
||||
case 6:
|
||||
gotoxy( 73, 21 ); cprintf( "~Â~" );
|
||||
gotoxy( 73, 22 ); cprintf( " ³ " );
|
||||
gotoxy( 73, 23 ); cprintf( "ÄÛÄ" );
|
||||
gotoxy( 73, 24 ); cprintf( " " );
|
||||
break;
|
||||
case 5:
|
||||
gotoxy( 73, 21 ); cprintf( "~^~" );
|
||||
gotoxy( 73, 22 ); cprintf( " ³ " );
|
||||
gotoxy( 73, 23 ); cprintf( "ÄÛÄ" );
|
||||
gotoxy( 73, 24 ); cprintf( " " );
|
||||
break;
|
||||
case 4:
|
||||
gotoxy( 73, 21 ); cprintf( "~_~" );
|
||||
gotoxy( 73, 22 ); cprintf( " ³ " );
|
||||
gotoxy( 73, 23 ); cprintf( "ÄÛÄ" );
|
||||
gotoxy( 73, 24 ); cprintf( " " );
|
||||
break;
|
||||
case 3:
|
||||
gotoxy( 73, 21 ); cprintf( "~ ~" );
|
||||
gotoxy( 73, 22 ); cprintf( " Â " );
|
||||
gotoxy( 73, 23 ); cprintf( "ijÄ" );
|
||||
gotoxy( 73, 24 ); cprintf( " Û " );
|
||||
break;
|
||||
case 2:
|
||||
gotoxy( 73, 21 ); cprintf( "~ ~" );
|
||||
gotoxy( 73, 22 ); cprintf( " _ " );
|
||||
gotoxy( 73, 23 ); cprintf( "ijÄ" );
|
||||
gotoxy( 73, 24 ); cprintf( " Û " );
|
||||
break;
|
||||
case 1:
|
||||
gotoxy( 73, 21 ); cprintf( "~ ~" );
|
||||
gotoxy( 73, 22 ); cprintf( " " );
|
||||
gotoxy( 73, 23 ); cprintf( "ÄÂÄ" );
|
||||
gotoxy( 73, 24 ); cprintf( " Û " );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DibujaPetaco( char CUAL, char PulsoRelax )
|
||||
{
|
||||
static char PetacoID[2] = { 0,0 };
|
||||
static char ActividadID[2] = { 0,0 };
|
||||
int i;
|
||||
|
||||
if ( PulsoRelax == PULSO ) // Actividad del petaco:
|
||||
ActividadID[CUAL] = 1; // AVANCE
|
||||
|
||||
if ( ActividadID[CUAL] == 1 )
|
||||
{
|
||||
PetacoID[CUAL] ++;
|
||||
if ( PetacoID[CUAL] > 2 ) // Maxima extenci¢n del petaco
|
||||
ActividadID[CUAL] = -1; // empezamos a contraerlo
|
||||
} else
|
||||
if ( ActividadID[CUAL] == -1 )
|
||||
{
|
||||
PetacoID[CUAL] --;
|
||||
if ( PetacoID[CUAL] < 0 ) // Llegamos a su origen...
|
||||
ActividadID[CUAL] = 0; // ...asi que paramos.
|
||||
}
|
||||
|
||||
// Iniciamos el dibujo del petaco
|
||||
if ( ActividadID[CUAL] != 0 && PetacoID[CUAL] < 4 )
|
||||
{
|
||||
textbackground(BLACK);
|
||||
textcolor(YELLOW);
|
||||
for ( i = 0; i < 3; i++ )
|
||||
{
|
||||
gotoxy( CUAL ? 41 : 49, 19+i );
|
||||
cprintf( "%s", CUAL ?
|
||||
PetacoI[PetacoID[CUAL]].Petaco[i]
|
||||
:
|
||||
PetacoD[PetacoID[CUAL]].Petaco[i]
|
||||
);
|
||||
if ( CUAL == IZQUIERDO )
|
||||
{
|
||||
gotoxy( 29, 11+i );
|
||||
cprintf( "%s", PetacoI[PetacoID[CUAL]].Petaco[i] );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void DibujaTablero( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
textbackground(BLACK);
|
||||
textcolor( WHITE );
|
||||
gotoxy( 1, 1);
|
||||
|
||||
cprintf( " ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ \r\n" );
|
||||
cprintf( " TextoPinBALL ! ³_-----</ ù ùùù\\ ³ \r\n" );
|
||||
cprintf( " u.p.a.d ³< </ ù\\ ³ \r\n" );
|
||||
cprintf( " ³< </ / |³ \r\n" );
|
||||
cprintf( " Un ³</ / / ³ \r\n" );
|
||||
cprintf( " PinBall ³ / / ³ \r\n" );
|
||||
cprintf( " Algo ³ /ùù\\ / / _/³ \r\n" );
|
||||
cprintf( " Diferente ³ | | / /ù ³ \r\n" );
|
||||
cprintf( " ³ \\__/ ³ ^ ³ \r\n" );
|
||||
cprintf( " ³ /ùù\\ ³ ^ ³ \r\n" );
|
||||
cprintf( " Puntos: ³(* /ùù\\ | | ³ ^ ³ \r\n" );
|
||||
cprintf( " ³ * | | \\__/ ³ ^ ³ \r\n" );
|
||||
cprintf( " Player1: 000.000 ³ * \\__/ /³ ^ ³ \r\n" );
|
||||
cprintf( " Player2: 000.000 ³ ° ³ ^ ³ \r\n" );
|
||||
cprintf( " Player3: 000.000 ³ °³ ^ ³ \r\n" );
|
||||
cprintf( " Player4: 000.000 ³ ³ ^ ³ \r\n" );
|
||||
cprintf( " ³ ³ ^ ³ \r\n" );
|
||||
cprintf( " Tabla de Records ³ ³ ^ ³ \r\n" );
|
||||
cprintf( " ³ ( ) | \\ ³ ^ ³ \r\n" );
|
||||
cprintf( " 1. JDG 150.210 ³ | \\_____ ^ ³ \r\n" );
|
||||
cprintf( " 2. AGD 20.140 ³ /^\\_ _/ ³~Â~³ \r\n" );
|
||||
cprintf( " 3. JD 19.030 ³ ~ / ## ³ ³ \r\n" );
|
||||
cprintf( " 4. JDG 980 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛÄÙ \r\n" );
|
||||
|
||||
textbackground( GREEN );
|
||||
textcolor( WHITE );
|
||||
gotoxy( 53, 7 ); cprintf( "ùù" );
|
||||
gotoxy( 52, 8 ); cprintf( " 20 " );
|
||||
gotoxy( 53, 9 ); cprintf( "__" );
|
||||
textcolor( WHITE + BLINK );
|
||||
gotoxy( 53, 8 ); cprintf( "20" );
|
||||
textbackground( CYAN );
|
||||
textcolor( WHITE );
|
||||
gotoxy( 57, 11 ); cprintf( "ùù" );
|
||||
gotoxy( 56, 12 ); cprintf( " 10 " );
|
||||
gotoxy( 57, 13 ); cprintf( "__" );
|
||||
textcolor( WHITE + BLINK );
|
||||
gotoxy( 57, 12 ); cprintf( "10" );
|
||||
textbackground( MAGENTA );
|
||||
textcolor( WHITE );
|
||||
gotoxy( 65, 10 ); cprintf( "ùù" );
|
||||
gotoxy( 64, 11 ); cprintf( " 30 " );
|
||||
gotoxy( 65, 12 ); cprintf( "__" );
|
||||
textcolor( WHITE + BLINK );
|
||||
gotoxy( 65, 11 ); cprintf( "30" );
|
||||
|
||||
|
||||
textbackground( BLACK );
|
||||
textcolor( CYAN );
|
||||
gotoxy( 57, 20 ); cprintf( " | \\____" );
|
||||
gotoxy( 57, 21 ); cprintf( " /^\\_ _/" );
|
||||
gotoxy( 57, 22 ); cprintf( "/ ##" );
|
||||
|
||||
textbackground( BLUE );
|
||||
textcolor( BROWN+BLINK );
|
||||
|
||||
gotoxy( 70, 14 ); cprintf( "±" );
|
||||
gotoxy( 71, 15 ); cprintf( "±" );
|
||||
|
||||
// Linea para sacar la bola
|
||||
textbackground(BLUE);
|
||||
textcolor( WHITE );
|
||||
gotoxy( 74, 8 ); cprintf( " " );
|
||||
for( i=9; i<21; i++ )
|
||||
{
|
||||
gotoxy( 73, i ); cprintf( " " );
|
||||
}
|
||||
gotoxy( 73, 21 ); cprintf( "~Â~" );
|
||||
gotoxy( 73, 22 ); cprintf( " ³ " );
|
||||
|
||||
|
||||
}
|
||||
|
||||
void ProcesaLuzTirador( char OkReset )
|
||||
{
|
||||
static char SecActual, Estado;
|
||||
char i;
|
||||
|
||||
// Todas a cero
|
||||
if ( OkReset == RESET )
|
||||
{
|
||||
textbackground(BLUE);
|
||||
textcolor( LIGHTRED );
|
||||
for ( i=0; i<12; i++ )
|
||||
{
|
||||
gotoxy( 74, 9 +i ); cprintf( "^" );
|
||||
}
|
||||
SecActual = 0; Estado = 1;
|
||||
} else {
|
||||
textbackground(BLUE);
|
||||
textcolor( LIGHTRED );
|
||||
gotoxy( 74, 9 +SecActual ); cprintf( "^" );
|
||||
|
||||
SecActual+= Estado;
|
||||
if ( SecActual == 11) Estado = -1;
|
||||
else
|
||||
if ( SecActual == 0 ) Estado = 1;
|
||||
|
||||
textbackground(LIGHTBLUE);
|
||||
textcolor( BLACK );
|
||||
gotoxy( 74, 9 +SecActual ); cprintf( "^" );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void DistorsionaFondoInfo( void )
|
||||
{
|
||||
int i, j, k;
|
||||
static char COLOR=0, COLOR1 = 0;
|
||||
// Cuidadin que estamos jugando con algo que nos puede
|
||||
// dar problemas en otras partes con los que pretendo hacer
|
||||
// ( movimientos de segundo plano en modo texto )
|
||||
|
||||
// Bien, esto no es mas que un barrido de memoria, en las coordenadas
|
||||
// f¡sicas de pantalla (9,1) -> (30,23)
|
||||
|
||||
// NOTA: La coordenada inicial de la memoria de video no monocroma es B800
|
||||
|
||||
// Barrido vertical
|
||||
for ( i = 0; i < 24; i++ )
|
||||
{
|
||||
k = i*80*2;
|
||||
// Barrido horizontal
|
||||
for ( j = 9; j < 27; j++ )
|
||||
{
|
||||
COLOR1 = (j-9+COLOR)%7;
|
||||
// Creo que primero va el texto asi que por eso lo del +1
|
||||
MemTexto[ k + j*2 +1] &= 0xE0;
|
||||
MemTexto[ k + j*2 +1] |= (COLOR1&0x0F);
|
||||
}
|
||||
}
|
||||
|
||||
COLOR ++;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void aFuenteAmplia( char *Frase, p_Ampliada far *FA )
|
||||
{
|
||||
int i;
|
||||
char j, j1;
|
||||
|
||||
char c_elec;
|
||||
char bit_s;
|
||||
char far *Frase_seg;
|
||||
|
||||
// Rotamos la frase
|
||||
int i1;
|
||||
char cont;
|
||||
|
||||
char FrBit_tmp[16];
|
||||
// C A R T E L D I G I T A L
|
||||
//*// ( 27 ) - 2 ===> 25 [ Fuente de 8x8 ]
|
||||
//* ^___ El tama¤o ha sido reoptimizado para que sea variable seg£n las
|
||||
//* necesidades de cada programador. ( cuando AX = AY = 1 --> T^ )
|
||||
//* ........ . . . o . . . . o o o o o o . .
|
||||
//* ........ . . o . o . . . . o . . . . o .
|
||||
//* ........ . o . . . o . . . o . . . . o .
|
||||
//* ........ o . . . . . o . . o o o o o . .
|
||||
//* ........ o o o o o o o . . o . . . . o .
|
||||
//* ........ o . . . . . o . . o . . . . o .
|
||||
//* ........ o . . . . . o . . o . . . o . .
|
||||
//* ........ o . . . . . o . o o o o o . . .
|
||||
//*
|
||||
textbackground(BLACK);
|
||||
|
||||
Frase_seg = FA -> Frase1;
|
||||
|
||||
if ( _fstrcmp( FA -> Frase1, Frase ) != 0 )
|
||||
{
|
||||
_fstrncpy( FA -> Frase1, Frase, 99 );
|
||||
FA -> Frase1[99] = '\0';
|
||||
j = i = _fstrlen( Frase );
|
||||
FA -> Flen = i * 8;
|
||||
cont = 0;
|
||||
|
||||
if ( i < FA -> ndigitos )
|
||||
i += FA -> ndigitos - i;
|
||||
else
|
||||
i += 5;
|
||||
|
||||
FA -> Flen1 = i;
|
||||
|
||||
//strcat( FA->Frase_seg, " " );
|
||||
|
||||
// Almacenamos en la Frase a Bit's la FRASE A BIT'S
|
||||
while( cont <= i )
|
||||
{
|
||||
|
||||
// Descomponemos cada caracter en un patron de BIT's
|
||||
if ( (cont - j) >= 0 )
|
||||
{
|
||||
for( j1=0; j1<16; j1++)
|
||||
FA -> FraseBit[cont][j1]= 0;
|
||||
} else
|
||||
|
||||
for( j1=0;j1<16; j1++)
|
||||
FA -> FraseBit[cont][j1]= ptr_char[ ( *(Frase_seg) ) * 16 + j1 ];
|
||||
|
||||
cont++;
|
||||
Frase_seg++;
|
||||
}
|
||||
} else {
|
||||
// Almacenamos el 1er bit que vamos a perder...
|
||||
for ( j1=0; j1<16; j1++ )
|
||||
FrBit_tmp[j1] = 0x01 & ( FA -> FraseBit[0][j1] >> 7 );
|
||||
|
||||
for ( j=0; j<FA -> Flen1; j++ )
|
||||
{
|
||||
for ( j1=0; j1<16; j1++ )
|
||||
FA -> FraseBit[ j][j1] = FA -> FraseBit[ j][ j1] << 1;
|
||||
for ( j1=0; j1<16; j1++ )
|
||||
FA -> FraseBit[j][j1] = ( FA -> FraseBit[j][j1] & 0xFE ) | (0x01 & (FA -> FraseBit[j+1][j1] >> 7 ) );
|
||||
}
|
||||
for ( j1=0; j1<16; j1++ )
|
||||
FA -> FraseBit[FA -> Flen1-1][j1] = ( FA -> FraseBit[FA -> Flen1-1][j1] & 0xFE ) | FrBit_tmp[j1];
|
||||
}
|
||||
|
||||
// . . . . . .
|
||||
// .ï ï. .ï ï. .ï ï.
|
||||
// . . . . .
|
||||
// __________.________________________.______________________.______________
|
||||
// . . . . . .
|
||||
// . . . . . .
|
||||
// ' .. ' ' .. ' ' .. '
|
||||
//
|
||||
// . .
|
||||
// . ï ï .
|
||||
// . .
|
||||
// ____________________._____________________.______________________________
|
||||
// . . ` ï
|
||||
// . . ` ï
|
||||
// . . ` ï
|
||||
// . . . ` ï
|
||||
// ` . . ï
|
||||
// ndigitos --> m x. = 40
|
||||
//float i1;
|
||||
|
||||
for ( i=0, i1=2; i < FA->ndigitos; (i) ++ )
|
||||
{
|
||||
for ( j=0, j1=0; j1<8; /*j+=2*FA->AX*/j++, j1++ )
|
||||
{
|
||||
// Analizamos el patron de BIT's y lo imprimimos
|
||||
// FraseBit[cont][0]
|
||||
// ^ ^----- N£mero de byte del digito ( 8x8 )
|
||||
// |_________ N£mero de digito alfa-numerico
|
||||
for ( bit_s = 0; bit_s < 8; bit_s++, i1++/*+=.02*/ )
|
||||
{
|
||||
if ( FA -> FraseBit[i][bit_s] & ( (char)0x01 << (7- j1) ) ) c_elec = FA->C2; else c_elec = FA->C1;
|
||||
//putpixel ( FA->x + j + bit_s*2 + i*8*2*FA->AX, FA->y + sin( i1 )*20 + 2*bit_s*FA->AY, c_elec );
|
||||
|
||||
textcolor( c_elec );
|
||||
//PutPixel ( FA->x +j + i*8*2*FA->AX, FA->y + 2* bit_s*FA->AY, c_elec );
|
||||
// gotoxy ( FA->x +j + i*8/**2*FA->AX*/, FA->y + bit_s/**2*FA->AY*/ );
|
||||
gotoxy ( ( FA->x + bit_s), 8*FA->ndigitos -( FA->y +j + i*8 ) );
|
||||
if ( (j + i*8) < 8 )
|
||||
{
|
||||
cprintf( "³" );
|
||||
} else
|
||||
if ( (j + i*8) > 16 )
|
||||
{
|
||||
cprintf( "Û" );
|
||||
} else
|
||||
cprintf( "±" );
|
||||
}
|
||||
|
||||
//y--> TabS[(i+j+bit_s) MOD FLen1]
|
||||
//x-->
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void LeeFuentes(char *file)
|
||||
{
|
||||
FILE *fich;
|
||||
/* Reservamos 4 Kb. para cargar la fuente en memoria */
|
||||
|
||||
/* Abrimos el fichero de la fuente */
|
||||
|
||||
if ((fich=fopen(file,"rb"))==NULL) {
|
||||
printf("\a\nArchivo %s no encontrado.\n",file);
|
||||
return;
|
||||
}
|
||||
|
||||
fseek(fich, SEEK_SET, 0); /* Nos colocamos al principio del fichero */
|
||||
fread(ptr_char,1,4096,fich); /* Cargamos en memoria 4096 bytes del fichero */
|
||||
fclose(fich); /* Cerramos el fichero */
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
#define TAMx 8
|
||||
#define TAMy 8
|
||||
void FuenteAmplia( char *Frase, p_Ampliada far *FA, char ini )
|
||||
{
|
||||
int i, j, k; // Variables de avance
|
||||
int c_elec; // Color en el momento de imprimir
|
||||
int PosX, PosY; // Posicion fisica final
|
||||
char LCaract; // Caracter de linea a tratar
|
||||
|
||||
if ( ini ) // Reseteamos las variables de control interno
|
||||
{
|
||||
// Obtenemos la longitud de la frase. ( En d¡gitos )
|
||||
FA -> Flen = _fstrlen( Frase );
|
||||
// Contador de digito actual a cero
|
||||
FA -> BitByte = 0;
|
||||
// Posicion dentro de la frase
|
||||
FA -> currByte = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// Avance horizontal de bit's ( avance de digitos )
|
||||
for ( i = 0; i < ( TAMx * (FA -> ndigitos) ); i++ )
|
||||
{
|
||||
k = ( Frase[ ( (i+FA->BitByte)/TAMx + FA -> currByte ) % FA->Flen ] ) << 4;
|
||||
LCaract = ( (char)0x01 << (7 - (i+FA->BitByte)%TAMx) );
|
||||
PosX = FA -> x + FA->AX * i; // Posicion f¡sica horizontal
|
||||
// Avance vertical de bit's
|
||||
for ( j = 0; j < TAMy; j ++ )
|
||||
{
|
||||
PosY = FA -> y + FA->AY * j; // Posicion f¡sica vertical
|
||||
|
||||
if ( ptr_char[ k + j ] & LCaract )
|
||||
c_elec = FA->C2;
|
||||
else
|
||||
c_elec = FA->C1;
|
||||
|
||||
textbackground(BLACK);
|
||||
textcolor( c_elec );
|
||||
gotoxy ( PosX, PosY ); cprintf( "±" );
|
||||
}
|
||||
}
|
||||
// Tenemos en cuenta el avance dentro de la frase
|
||||
if ( ( FA -> BitByte ++ ) >= 7 )
|
||||
{
|
||||
FA -> BitByte = 0; FA -> currByte ++;
|
||||
if ( FA -> currByte >= FA -> Flen )
|
||||
FA -> currByte = 0;
|
||||
}
|
||||
|
||||
}
|
||||
#undef TAMy
|
||||
#undef TAMx
|
||||
|
||||
|
||||
|
||||
|
||||
void Melt( void )
|
||||
{
|
||||
|
||||
int index,ticks=0;
|
||||
|
||||
textbackground( BLACK );
|
||||
textcolor( MAGENTA );
|
||||
|
||||
|
||||
for (index=1; index< 81; index++)
|
||||
{
|
||||
worms[index].speed = 3 + rand()%9;
|
||||
worms[index].y = 0;
|
||||
worms[index].counter = 0;
|
||||
gotoxy( index, 1 );
|
||||
cprintf(" ");
|
||||
}
|
||||
|
||||
while(++ticks<290)
|
||||
{
|
||||
delay(10);
|
||||
|
||||
for (index=1; index<81; index++)
|
||||
{
|
||||
if (++worms[index].counter == worms[index].speed)
|
||||
{
|
||||
worms[index].counter = 0;
|
||||
if (worms[index].y < 25)
|
||||
{
|
||||
gotoxy( index, worms[index].y );
|
||||
cprintf("þ");
|
||||
gotoxy( index, worms[index].y-1 );
|
||||
cprintf(" ");
|
||||
worms[index].y++;
|
||||
} else {
|
||||
gotoxy( index, 24 );
|
||||
cprintf(" ");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!(ticks % 500))
|
||||
{
|
||||
for (index=1; index<81; index++)
|
||||
worms[index].speed--;
|
||||
}
|
||||
}
|
||||
}
|
BIN
PINBALL.EXE
Normal file
BIN
PINBALL.EXE
Normal file
Binary file not shown.
BIN
PINBALL.FNT
Normal file
BIN
PINBALL.FNT
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user