回首在看C,C让小弟我紧张了把,不错有功底,心头还是会微笑
C才是我们进入编程的首要课程,但是几年C忘的差不多了,win_tc上原来写的程式居然有些看不懂了。心里不湿为了流冷汗,万一哪天有公司要求有硬件和软件相结合的公司要自己去面试,主考C,那不是掉的大了。
snow 是我C学完了,第一个小程序。虽不做C的开发,但还是怀恋下。(原程序出自国外。)
#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[i].size; i++ )
;
CurSnow++;
Snow[i].x=random(MaxX);
Snow[i].y=random(DOWNSPEED);
Snow[i].size=random(MaxSize)+1;
}
/******************************** Init_Data *******************************/
void Init_Data()
{
int i;
for( i=0; i< POINT; i++)
{
Snow[i].x=0;
Snow[i].y=0;
Snow[i].size=0;
}
for( i=0; i<MaxX; i++)
Map[i]=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[i] )
{
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[i] )
{
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,movesize;
int x,y,size;
int times;
while ( !kbhit() )
{
times=5;
while( times-- )
delay( Delay );
for( i=0; i<POINT; i++)
{
if ( !Snow[i].size ) continue;
x=Snow[i].x;
y=Snow[i].y;
size=Snow[i].size;
/* hide */
ShowSnow( x, y, size, HIDE );
/* down */
y+= DOWNSPEED;
/* move */
movesize=random( MOVESIZE )+1;
if ( random(2) )
movesize=-movesize;
x+=movesize;
if( x>MaxX ) x=MaxX-1;
if( x<0 ) x=0;
/*Snow[i].x=x;
Snow[i].y=y;
Check( i );*/
Move( i, x, y );
/* show */
ShowSnow( Snow[i].x, Snow[i].y, size, SHOW );
}
MakeSnow();
}
GetKey( &ah, &al );
GetKey( &ah, &al );
}
/********************************* main ***********************************/
void main()
{
Init();
Begin();
closegraph();
free( Map );
}
是不是思维固定了,还是变迂腐了,咋一看C时,有基础看的懂,仔细一品味没闻出个所以然出来。不知道大家有没有类似的感觉,有些东西时间丢长了,在回过头来怎么也想不懂当时写程式的逻辑了,那么觉得自己以前写的东西很幼稚,要么完全看不懂了。汗呀!。。。