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时,有基础看的懂,仔细一品味没闻出个所以然出来。不知道大家有没有类似的感觉,有些东西时间丢长了,在回过头来怎么也想不懂当时写程式的逻辑了,那么觉得自己以前写的东西很幼稚,要么完全看不懂了。汗呀!。。。
分享到:
相关推荐
5. **单循环链表.c** - 单循环链表与单链表类似,但在最后一个节点之后,指针会回到第一个节点,形成一个循环。 6. **链串.c** - 链串是一种利用链表实现的字符串,每个节点存储一个字符。相比于字符数组,链串可以...
总之,尽管“社会再回首,花已凋零”这一标题和描述初看起来似乎与IT行业并无直接关联,但其背后所蕴含的深刻道理,却可以让我们在IT行业中得到诸多启示。通过这个故事,我们可以领悟到时间管理的重要性、决策的准确...
从机械传动到人工智能 回首看看“智能机器人” 的发展史.doc
第一次模拟训练让队员们深刻体会到理论与实践之间的差距,尽管初次尝试存在不足之处,但在指导老师的鼓励和支持下,队员们没有气馁,而是从中吸取教训,提高了团队协作能力。第二次模拟训练成果显著,增强了队员们...
在C语言中,开发者通常会利用开源的音频解码库,如FFmpeg或Libavcodec,这些库提供了对多种音频格式的支持,包括MP3。解码过程涉及理解音频文件的编码格式,然后将其转换为原始的PCM(脉冲编码调制)数据,以便硬件...
结合回首经典模板,论坛的整体视觉效果得以提升,使用户在浏览和参与讨论时感受到浓厚的历史韵味和专业氛围。 回首经典模板的设计理念在于重现2005年的论坛风格,那时的互联网社区正处于快速发展的阶段,简洁明快的...
回首2005" 指的是互联网社区软件 Discuz! 在2005年的发展历程和重要事件。Discuz! 是一款在中国广泛使用的开源论坛系统,由康盛创想(Comsenz)公司开发,它允许用户创建和管理自己的在线社区,提供丰富的功能和...
回首温习青春.docx
[军训心得]绿色情结,回首军训,苦在身上,乐在深处.doc
但是,根据标题“回首过去(共10篇).pdf”和描述“回首过去(共10篇).pdf”,我们可以假设文件为一系列文章,涉及回顾和总结过去的主题。基于此,我将提供关于回顾和总结的一般性知识。 在撰写回顾过去的文章时,作者...
王国维在《人间词话》中提出的三种境界,不仅是对诗词艺术的理解,更是对人生历程的深刻描绘。这三种境界,分别对应了个人成长过程中的认知、实践与领悟三个阶段,具有深远的教育意义。 第一境界,“昨夜西风凋碧树...
掌握冒泡排序和选择排序不仅可以帮助我们更好地理解这些算法,也可以让我们在面对各种排序问题时,能够根据不同的数据特性和需求,选择合适的排序策略,从而编写出更加高效和优化的代码。在实际编程中,选择合适的...
政治九年级全册湘教版5.3.1回首我的成长故事教案.docx
《[回首历史展望未来作文]回首往昔展望未来国庆周年演讲稿》.doc
愿意岁月可回首.doc
回首过去的一年.doc
这篇文档虽然名为“回首温习青春”,但实际上讲述的是作者个人的成长经历,特别是在学习生涯中的起伏与反思。从中我们可以提炼出一些关于学习、成长和心态调整的知识点: 1. **持之以恒的学习态度**:作者从幼儿园...
销售回首过去展望未来.doc
蓦然回首是什么意思.doc
"蓦然回首,那人却在灯火阑珊处"这一标题,虽然源自诗词,但在教育领域中,它象征着教师在教学过程中对知识深层次理解的顿悟。在文本解读中,教师需要突破传统束缚,实现"三破三立",即破除政治化解读、形式化教学、...