C语言十大经典实例编程Word格式.docx
《C语言十大经典实例编程Word格式.docx》由会员分享,可在线阅读,更多相关《C语言十大经典实例编程Word格式.docx(169页珍藏版)》请在冰豆网上搜索。
/*输出成绩*/
/*主函数*/
voidmain(void)
Init();
DrawK();
GamePlay();
Close();
}
voidInit(void)
intgd=DETECT,gm;
initgraph(&
gd,&
gm,"
c:
\\tc"
);
cleardevice();
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
voidDrawK(void)
/*setbkcolor(LIGHTGREEN);
*/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
/*设置线型*/
for(i=50;
i<
=600;
i+=10)/*画围墙*/
{
rectangle(i,40,i+10,49);
/*上边*/
rectangle(i,451,i+10,460);
/*下边*/
}
for(i=40;
=450;
i+=10)
rectangle(50,i,59,i+10);
/*左边*/
rectangle(601,i,610,i+10);
/*右边*/
voidGamePlay(void)
randomize();
/*随机数发生器*/
food.yes=1;
/*1表示需要出现新食物,0表示已经存在食物*/
snake.life=0;
/*活着*/
snake.direction=1;
/*方向往右*/
snake.x[0]=100;
snake.y[0]=100;
/*蛇头*/
snake.x[1]=110;
snake.y[1]=100;
snake.node=2;
/*节数*/
PrScore();
/*输出得分*/
while
(1)/*可以重复玩游戏,压ESC键结束*/
while(!
kbhit())/*在没有按键的情况下,蛇自己移动身体*/
if(food.yes==1)/*需要出现新食物*/
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!
=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
while(food.y%10!
=0)
food.y++;
food.yes=0;
/*画面上有食物了*/
if(food.yes==0)/*画面上有食物了就要显示*/
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
for(i=snake.node-1;
i>
0;
i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
switch(snake.direction)
case1:
snake.x[0]+=10;
break;
case2:
snake.x[0]-=10;
case3:
snake.y[0]-=10;
case4:
snake.y[0]+=10;
for(i=3;
snake.node;
i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
if(snake.x[i]==snake.x[0]&
&
snake.y[i]==snake.y[0])
GameOver();
/*显示失败*/
snake.life=1;
break;
if(snake.x[0]<
55||snake.x[0]>
595||snake.y[0]<
55||
snake.y[0]>
455)/*蛇是否撞到墙壁*/
/*本次游戏结束*/
/*蛇死*/
if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/
if(snake.x[0]==food.x&
snake.y[0]==food.y)/*吃到食物以后*/
setcolor(0);
/*把画面上的食物东西去掉*/
snake.x[snake.node]=-20;
snake.y[snake.node]=-20;
/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/
snake.node++;
/*蛇的身体长一节*/
/*画面上需要出现新的食物*/
score+=10;
/*输出新得分*/
setcolor(4);
/*画出蛇*/
for(i=0;
i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10);
delay(gamespeed);
/*用黑色去除蛇的的最后一节*/
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
}/*endwhile(!
kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循环*/
key=bioskey(0);
/*接收按键*/
if(key==ESC)/*按ESC键退出*/
else
if(key==UP&
snake.direction!
=4)
/*判断是否往相反的方向移动*/
snake.direction=3;
if(key==RIGHT&
=2)
if(key==LEFT&
=1)
snake.direction=2;
if(key==DOWN&
=3)
snake.direction=4;
}/*endwhile
(1)*/
/*游戏结束*/
voidGameOver(void)
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"
GAMEOVER"
getch();
voidPrScore(void)
{
charstr[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"
score:
%d"
score);
outtextxy(55,20,str);
voidClose(void)
closegraph();
案例二计算器
/*DOS接口函数*/
math.h>
/*数学函数的定义*/
conio.h>
/*屏幕操作函数*/
stdio.h>
/*I/O函数*/
/*库函数*/
stdarg.h>
/*变量长度参数表*/
/*图形函数*/
string.h>
/*字符串函数*/
ctype.h>
/*字符操作函数*/
#defineUP0x48/*光标上移键*/
#defineDOWN0x50/*光标下移键*/
#defineLEFT0x4b/*光标左移键*/
#defineRIGHT0x4d/*光标右移键*/
#defineENTER0x0d/*回车键*/
void*rar;
/*全局变量,保存光标图象*/
structpalettetypepalette;
/*使用调色板信息*/
intGraphDriver;
/*图形设备驱动*/
intGraphMode;
/*图形模式值*/
intErrorCode;
/*错误代码*/
intMaxColors;
/*可用颜色的最大数值*/
intMaxX,MaxY;
/*屏幕的最大分辨率*/
doubleAspectRatio;
/*屏幕的像素比*/
voiddrawboder(void);
/*画边框函数*/
voidinitialize(void);
/*初始化函数*/
voidcomputer(void);
/*计算器计算函数*/
voidchangetextstyle(intfont,intdirection,intcharsize);
/*改变文本样式函数*/
voidmwindow(char*header);
/*窗口函数*/
intspecialkey(void);
/*获取特殊键函数*/
intarrow();
/*设置箭头光标函数*/
intmain()
initialize();
/*设置系统进入图形模式*/
computer();
/*运行计算器*/
/*系统关闭图形模式返回文本模式*/
return(0);
/*结束程序*/
voidinitialize(void)
intxasp,yasp;
/*用于读x和y方向纵横比*/
GraphDriver=DETECT;
/*自动检测显示器*/
initgraph(&
GraphDriver,&
GraphMode,"
"
);
/*初始化图形系统*/
ErrorCode=graphresult();
/*读初始化结果*/
if(ErrorCode!
=grOk)/*如果初始化时出现错误*/
printf("
GraphicsSystemError:
%s\n"
grapherrormsg(ErrorCode));
/*显示错误代码*/
exit
(1);
/*退出*/
getpalette(&
palette);
/*读面板信息*/
MaxColors=getmaxcolor()+1;
/*读取颜色的最大值*/
MaxX=getmaxx();
/*读屏幕尺寸*/
MaxY=getmaxy();
getaspectratio(&
xasp,&
yasp);
/*拷贝纵横比到变量中*/
AspectRatio=(double)xasp/(double)yasp;
/*计算纵横比值*/
/*计算器函数*/
voidcomputer(void)
structviewporttypevp;
/*定义视口类型变量*/
intcolor,height,width;
intx,y,x0,y0,i,j,v,m,n,act,flag=1;
floatnum1=0,num2=0,result;
/*操作数和计算结果变量*/
charcnum[5],str2[20]={"
},c,temp[20]={"
};
charstr1[]="
1230.456+-789*/Qc=^%"
;
/*定义字符串在按钮图形上显示的符号*/
mwindow("
Calculator"
/*显示主窗口*/
color=7;
/*设置灰颜色值*/
getviewsettings(&
vp);
/*读取当前窗口的大小*/
width=(vp.right+1)/10;
/*设置按钮宽度*/
height=(vp.bottom-10)/10;
/*设置按钮高度*/
x=width/2;
/*设置x的坐标值*/
y=height/2;
/*设置y的坐标值*/
setfillstyle(SOLID_FILL,color+3);
bar(x+width*2,y,x+7*width,y+height);
/*画一个二维矩形条显示运算数和结果*/
setcolor(color+3);
/*设置淡绿颜色边框线*/
rectangle(x+width*2,y,x+7*width,y+height);
/*画一个矩形边框线*/
/*设置颜色为红色*/
outtextxy(x+3*width,y+height/2,"
0."
/*输出字符串"
x=2*width-width/2;
y=2*height+height/2;
for(j=0;
j<
4;
++j)/*画按钮*/
for(i=0;
i<
5;
++i)
setfillstyle(SOLID_FILL,color);
bar(x,y,x+width,y+height);
/*画一个矩形条*/
rectangle(x,y,x+width,y+height);
sprintf(str2,"
%c"
str1[j*5+i]);
/*将字符保存到str2中*/
outtextxy(x+(width/2),y+height/2,str2);
x=x+width+(width/2);
/*移动列坐标*/
y+=(height/2)*3;
/*移动行坐标*/
/*复位列坐标*/
x0=2*width;
y0=3*height;
x=x0;
y=y0;
gotoxy(x,y);
/*移动光标到x,y位置*/
arrow();
/*显示光标*/
putimage(x,y,rar,XOR_PUT);
m=0;
n=0;
strcpy(str2,"
/*设置str2为空串*/
while((v=specialkey())!
=45)/*当压下Alt+x键结束程序,否则执行下面的循环*/
=ENTER)/*当压下键不是回车时*/
/*显示光标图象*/
if(v==RIGHT)/*右移箭头时新位置计算*/
if(x>
=x0+6*width)
/*如果右移,移到尾,则移动到最左边字符位置*/
x=x0;
m=0;
x=x+width+width/2;
m++;
}/*否则,右移到下一个字符位置*/
if(v==LEFT)/*左移箭头时新位置计算*/
if(x<
=x0)
x=x0+6*width;
m=4;
}/*如果移到头,再左移,则移动到最右边字符位置*/
x=x-width-width/2;
m--;
}/*否则,左移到前一个字符位置*/
if(v==UP)/*上移箭头时新位置计算*/
if(y<
=y0)
y=y0+4*height+height/2;
n=3;
}/*如果移到头,再上移,则移动到最下边字符位置*/
y=y-height-height/2;
n--;
}/*否则,移到上边一个字符位置*/
if(v==DOWN)/*下移箭头时新位置计算*/
if(y>
=7*height)
y=y0;
}/*如果移到尾,再下移,则移动到最上边字符位置*/
y=y+height+height/2;
n++;
}/*否则,移到下边一个字符位置*/
/*在新的位置显示光标箭头*/
c=str1[n*5+m];
/*将字符保存到变量c中*/
if(isdigit(c)||c=='
.'
)/*判断是否是数字或小数点*/
if(flag==-1)/*如果标志为-1,表明为负数*/
-"
/*将负号连接到字符串中*/
flag=1;
}/*将标志值恢复为1*/
sprintf(temp,"
c);
/*将字符保存到字符串变量temp中*/
strcat(str2,temp);
/*将temp中的字符串连接到str2中*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,str2);
/*显示字符串*/
if(c=='
+'
)
num1=atof(str2);
/*将第一个操作数转换为浮点数*/
/*将str2清空*/
act=1;
/*做计算加法标志值*/
outtextxy(5*width,height,"
-'
if(strcmp(str2,"
)==0)/*如果str2为空,说明是负号,而不是减号*/
flag=-1;
/*设置负数标志*/
/*将第二个操作数转换为浮点数*/
act=2;
/*做计算减法标志值*/
/*画矩形*/
*'
act=3;
/*做计算乘法标志值*/
/'
act=4;
/*做计算除法标志值*/
^'
act=5;
/*做计算乘方标志值*/
/*设置用淡绿色实体填充*/
%'
act=6;
/*做计算模运算乘方标志值*/