#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define POINT 200
#define DOWNSPEED 5
#define MOVESIZE 1
#define SHOW 1
#define HIDE 0
typedef struct
{
int x;
int y;
int size;
}SNOW;
SNOW Snow[POINT];
int MaxX,MaxY;
int MaxSize=3;
int SnowColor=15;
int Delay=15000;
int CurSnow=0;
int *Map;
/********************************** Init_Graph *****************************/
void Init_Graph(){
int gdriver=DETECT,gmode,errorcode;
initgraph(&gdriver, &gmode, "G:\\turboc2\\");
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /*terminate with an error code */
}
MaxX=getmaxx();
MaxY=getmaxy();
Map=(int *) malloc( sizeof(int)*MaxX );
}
/******************************** MakeSnow ********************************/
void MakeSnow()
{
int i;
if( CurSnow>=POINT ) return;
for( i=0; Snow.size; i++ )
;
CurSnow++;
Snow.x=random(MaxX);
Snow.y=random(DOWNSPEED);
Snow.size=random(MaxSize)+1;
}
/******************************** Init_Data *******************************/
void Init_Data()
{
int i;
for( i=0; i< POINT; i++)
{
Snow.x=0;
Snow.y=0;
Snow.size=0;
}
for( i=0; i<MaxX; i++)
Map=MaxY;
}
/********************************* Init **********************************/
void Init()
{
Init_Graph();
Init_Data();
randomize();
MakeSnow();
}
/******************************** GetKey ********************************/
void GetKey(int *ah,int *al){
union REGS r;
r.h.ah=0;
int86(0x16,&r,&r);
/*return r.h.al;*/
*ah=r.h.ah;
*al=r.h.al;
}
/********************************* SetSnow ******************************/
void ShowSnow( int x, int y, int size, int flag )
{
int color=0;
if ( flag ) color=15;
switch( size )
{
case 1:
putpixel( x, y, color );
break;
case 2:
setcolor( color );
line( x-1, y-1, x+1, y+1 );
line( x-1, y+1, x+1, y-1 );
break;
case 3:
setcolor( color );
line( x-1, y-1, x+1, y+1 );
line( x-1, y+1, x+1, y-1 );
/*
line( x-2, y-2, x+2, y+2 );
line( x-2, y+2, x+2, y-2 );*/
line( x-2, y, x+2, y );
line( x, y-2, x, y+2 );
break;
}
}
/********************************* Check ********************************/
void Move( int n, int tox, int toy )
{
int x, y, size, i, j;
float person;
x=Snow[n].x;
y=Snow[n].y;
size=Snow[n].size;
/* check end */
j=y;
if( x<tox )
{
person=(DOWNSPEED *1.0) / ( tox-x )*1.0;
for( i=x; i<=tox; i++ )
{
if( j>=Map )
{
tox=i-size;
break;
}
j+=(int)( (i-x+1)*person );
}
}
else if( x>tox )
{
person=(DOWNSPEED *1.0) / ( x-tox )*1.0;
for( i=x; i>=tox; i-- )
{
if( j>=Map )
{
tox=i+size;
break;
}
j+=(int)( (x-i+1)*person );
}
}
if( y+DOWNSPEED>=Map[tox] )
{
switch( size )
{
case 1:
Map[x]--;
break;
case 2:
Map[x]-=2;
if( x>0 && Map[x-1]>Map[x] ) Map[x-1]=Map[x];
if( x<MaxX-1 && Map[x+1]>Map[x] ) Map[x+1]=Map[x];
break;
case 3:
Map[x]-=3;
if( x>1 && Map[x-2]>Map[x] ) Map[x-1]=Map[x];
if( x>0 && Map[x-1]>Map[x] ) Map[x-1]=Map[x];
if( x<MaxX-2 && Map[x+2]>Map[x] ) Map[x+1]=Map[x];
if( x<MaxX-1 && Map[x+1]>Map[x] ) Map[x+1]=Map[x];
break;
}
CurSnow--;
y=Map[x]+size;
Snow[n].x=x;
Snow[n].y=y;
Snow[n].size=0;
}
else /* not end */
{
Snow[n].x=tox;
Snow[n].y=toy;
}
}
/******************************** snow **********************************/
void Begin()
{
int ah,al;
int i,dir,
文章出處:http://www.diybl.com/course/3_program/c/c_js/2008224/100864.html
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |