maidingding 发表于 2013-2-1 14:02:53

回首在看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;
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.x;
 y=Snow.y;
 size=Snow.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 )
 {
  switch( size )
  {
  case 1:
   Map--;
   break;
  case 2:
   Map-=2;
   if( x>0 && Map>Map ) Map=Map;
   if( x<MaxX-1 && Map>Map ) Map=Map;
   break;
  case 3:
   Map-=3;
   if( x>1 && Map>Map ) Map=Map;
   if( x>0 && Map>Map ) Map=Map;
   if( x<MaxX-2 && Map>Map ) Map=Map;
   if( x<MaxX-1 && Map>Map ) Map=Map;
   break;
  }
  CurSnow--;
  y=Map+size;
  Snow.x=x;
  Snow.y=y;
  Snow.size=0;
 }
 else /* not end */
 {
  Snow.x=tox;
  Snow.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.size ) continue;
   x=Snow.x;
   y=Snow.y;
   size=Snow.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.x=x;
   Snow.y=y;
   Check( i );*/
   Move( i, x, y );
   /* show */
   ShowSnow( Snow.x, Snow.y, size, SHOW );     
  }
 
  MakeSnow();
 }
 GetKey( &ah, &al );
 GetKey( &ah, &al );
}
/********************************* main ***********************************/
void main()
{
 Init();
 Begin();
 closegraph();
 free( Map );
}
 
是不是思维固定了,还是变迂腐了,咋一看C时,有基础看的懂,仔细一品味没闻出个所以然出来。不知道大家有没有类似的感觉,有些东西时间丢长了,在回过头来怎么也想不懂当时写程式的逻辑了,那么觉得自己以前写的东西很幼稚,要么完全看不懂了。汗呀!。。。
页: [1]
查看完整版本: 回首在看C,C让我紧张了把,不错有功底,心头还是会微笑