经典基础实例编程C语言代码.pdf
《经典基础实例编程C语言代码.pdf》由会员分享,可在线阅读,更多相关《经典基础实例编程C语言代码.pdf(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、案例一贪吃蛇游戏S d e f i n e N 200 i n c l u d e#i n c l u d e#i n c l u d e#d e f i n e L E FT 0 x 4b 00t t d e f i n e R I G H T 0 x 4d 00#d e f i n e D O WN 0 x 5000S d e f i n e U P 0 x 4800S d e f i n e E S C 0 x 011bi n t i,ke y;i n t s c o r e=0;/*得分*/i n t g a m e s pe e d=50000;/*游戏速度自己调整*/s t r u
2、 c t Fo o d(i n t x;/*食物的横坐标*/i n t y;/*食物的纵坐标*/i n t y e s;/*判断是否要出现食物的变量*/f o o d;/*食物的结构体*/s t r u c t S n a ke(i n t x N ;i n t y N ;i n t n o d e;/*蛇的节数*/i n t d i r e c t i o n;/*蛇移动方向*/i n t l i f e;/*蛇的生命,0活着,1死亡*/s n a ke;v o i d I n i t (v o i d);/*图形驱动*/v o i d C l o s e(v o i d);/*图形结束*/
3、v o i d D r a w K(v o i d);/*开始画面*/v o i d G a m e O v e r(v o i d);/*结束游戏*/v o i d G a m e P l a y(v o i d);/*玩游戏具体过程*/v o i d P r S c o r e(v o i d);/*输出成绩*/*主函数*/v o i d m a i n(v o i d)(I n i t O ;/*图形驱动*/D r a w K ();/*开始画面*/G a m e P l a y ();/*玩游戏具体过程*/C l o s e。;/*图形结束*/)/*图形驱动*/v o i d I n
4、i t(v o i d)i n t g d=D E T E C T,g m;i n i t g r a ph (&g d,&g m,c:t c);c l e a r d e v i c e();)/*开始画面,左上角坐标为(50,4 0),右下角坐标为(610,4 6 0)的围墙*/v o i d D r a w K(v o i d)(/*s e t b kc o l o r(L I G H T G R E E N);*/s e t c o l o r(11);s e t l i n e s t y l e(S O L I D _ L I N E,0,T H I C K _ WI D T H)
5、;/*设置线型*/f o r (i=50;i=600;i+=10)/*画围墙*/r e c t a n g l e (i,40,i+10,49);/*上边*/r e c t a n g l e (i,451,i+10,460);/*下边*/)f o r(i=40;i 0;i-)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/(s n a ke.x i =s n a ke.x i-1;s n a ke,y i =s n a ke.y i-l ;)/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/s w i t c h(s n a ke,d i r e c t i o n
6、)(c a s e 1:s n a ke.x 0+=10;b r e a k;c a s e 2:s n a ke.x 0-=10;b r e a k;c a s e 3:s n a ke.y 0-=10;b r e a k;c a s e 4:s n a ke,y 0+=10;b r e a k;)f o r(i=3;i s n a ke.n o d e;i+)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/(i f (s n a ke,x i =s n a ke.x 0&s n a ke.y i =s n a ke.y 0)(G a m e O v e r (
7、);/*显示失败*/s n a ke.l i f e=l;b r e a k;)i f(s n a ke.x 0 5951|s n a ke.y 0 455)/*蛇是否撞到墙壁*/(G a m e O v e r ();/*本次游戏结束*/s n a ke.l i f e=l;/*蛇死*/)i f (s n a ke.l i f e=l)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/b r e a k;i f (s n a ke.x 0=f o o d.x&s n a ke.y 0 =f o o d.y)/*吃到食物以后*/s e t c o l o r (0);/*把画面上的食物东
8、西去掉*/r e c t a n g l e (f o o d,x,f o o d,y,f o o d,x+10,f o o d,y-10);s n a ke,x s n a ke,n o d e =-20;s n a ke,y s n a ke,n o d e 二 一 20;/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/s n a ke.n o d e+;/*蛇的身体长一节*/f o o d.y e s=l ;/*画面上需要出现新的食物*/s c o r e+=10;P r S c o r e O ;/*输出新得分*/)s e t c o l o r (4);/*画出蛇*/f
9、o r (1=0;i s n a ke.n o d e;i+)r e c t a n g l e (s n a ke.x i ,s n a ke,y i ,s n a ke.x i +10,s n a ke.y i -10);d e l a y(g a m e s pe e d);s e t c o l o r(0);/*用黑色去除蛇的的最后一节*/r e c t a n g l e (s n a ke,x s n a ke,n o d e-1,s n a ke,y s n a ke,n o d e-1,s n a ke,x s n a ke,n o d e-11+10,s n a ke,y
10、s n a ke,n o d e-1-10);A e n d w h i l e (!kb h i t)*/i f (s n a ke.l i f e=l)/*如果蛇死就跳出循环*/b r e a k;ke y=b i o s ke y (0);/*接收按键*/i f (ke y=E S C)/*按 E S C 键退出*/b r e a k;e l s ei f (ke y=U P&s n a ke.d i r e c t i o n!=4)/*判断是否往相反的方向移动*/s n a ke.d i r e c t i o n=3;e l s ei f (ke y=R I G H T&s n a
11、 ke.d i r e c t i o n!=2)s n a ke.d i r e c t i o n=l;e l s ei f(ke y=L E FT&s n a ke.d i r e c t i o n!=l)s n a ke,d i r e c t i o n=2;e l s ei f(ke y=D 0WN&s n a ke.d i r e c t i o n!=3)s n a ke.d i r e c t i o n=4;A e n d w h i l e (1)*/)/*游戏结束*/v o i d G a m e O v e r(v o i d)(c l e a r d e v i
12、c e();P r S c o r e ();s e t c o l o r(R E D);s e t t e x t s t y l e (0,0,4);o u t t e x t x y(200,200,G A M E O V E R);g e t c h O ;)/*输出成绩*/v o i d P r S c o r e(v o i d)(c h a r s t r 10;s e t f i l l s t y l e(S O L I D _ FI L L,Y E L L O W);b a r (50,15,220,35);s e t c o l o r (6);s e t t e x
13、t s t y l e (0,0,2);s pr i n t f(s t r,s c o r e:%d ,s c o r e);o u t t e x t x y (55,20,s t r);)/*图形结束*/v o i d C l o s e(v o i d)g e t c h O ;c l o s e g r a ph();)案 例 二 计算器Si n c l ud eSi n c l ud eSi n c l ud e#i n c l ud e/*DOS接口函数*/*数学函数的定义*/*屏幕操作函数*/*1/0 函数*/#i n c l ud e#i n c l ud e/*库函数*/*
14、变量长度参数表*/#i n c l ud e /*图形函数*/#i n c l ud e /*字符串函数*/#i n c l ud e /*字符操作函数*/#d e fi n e U P 0 x 4 8/*光标上移键*/#d e fi n e DOW N 0 x 5 0 /*光标下移键*/#d e fi n e LEF T 0 x 4 b /*光标左移键*/Sd e fi n e R IGHT 0 x 4 d /*光标右移键*/ttd e fi n e ENTER 0 x 0 d /*回车键*/v o i d *r a r;/*全局变量,保存光标图象*/str uc t p a l e tte
15、 typ e p a l e tte;/*使用调色板信息*/i n t Gr a p h Dr i v e r;/*图形设备驱动*/i n t Gr a p h Mo d e;/*图形模式值*/i n t Er r o r Co d e;/*错误代码*/i n t Ma x Co l o r s;/*可用颜色的最大数值*/i n t Ma x X,Ma x Y;/*屏幕的最大分辨率*/d o ub l e A sp e c tR a ti o;/*屏幕的像素比*/v o i d d r a w b o d e r (v o i d);/*画边框函数*/v o i d i n i ti a l
16、i z e(v o i d);/*初始化函数*/v o i d c o m p ute r (v o i d);/*计算器计算函数*/v o i d c h a n g e te x tstyl e (i n t fo n t,i n t d i r e c ti o n,i n t c h a r si z e);/*改变文本样式函数*/v o i d m w i n d o w(c h a r *h e a d e r);/*窗口函数*/i n t sp e c i a l k e y(v o i d);/*获取特殊键函数*/i n t a r r o w();/*设置箭头光标函数*/*主
17、函数*/i n t m a i n ()(i n i ti a l i z e。;/*设置系统进入图形模式*/c o m p ute r ();/*运行计算器*/c l o se g r a p h ();/*系统关闭图形模式返回文本模式*/r e tur n (0);/*结束程序*/)/*设置系统进入图形模式*/v o i d i n i ti a l i z e(v o i d)(i n t x a sp,ya sp;/*用于读x和y方向纵横比*/Gr a p h Dr i v e r =DETECT;/*自动检测显示器*/i n i tg r a p h(&Gr a p h Dr i v
18、 e r,&Gr a p h Mo d e,);/*初始化图形系统*/Er r o r Co d e =g r a p h r e sul t();/*读初始化结果*/i f(Er r o r Co d e !=g r Ok )/*如果初始化时出现错误*/(p r i n tf(/zGr a p h i c s Syste m Er r o r:%s n,g r a p h e r r o r m sg (Er r o r Co d e );/*显示错误代码*/e x i t(1);/*退出*/)g e tp a l e tte(&p a l e tte );/*读面板信息*/Ma x Co
19、l o r s=g e tm a x c o l o r ()+1;/*读取颜色的最大值*/Ma x X =g e tm a x x O;/*读屏幕尺寸*/Ma x Y =g e tm a x yO;/*读屏幕尺寸*/g e ta sp e c tr a ti o(&x a sp,&ya sp );/*拷贝纵横比到变量中*/A sp e c tR a ti o =(d o ub l e)x a sp/(d o ub l e)ya sp;/*计算纵横比值*/)/*计算器函数*/v o i d c o m p ute r(v o i d)str uc t v i e w p o r ttyp e
20、v p;/*定义视口类型变量*/i n t c o l o r,h e i g h t,w i d th;i n t x,y,x O,yO,i,j,v,m,n,a c t,f l a g=l;float numl=0,num2=0,result;/*操作数和计算结果变量*/char cnum5,str2 20=“,c,temp20=;char strl 二 1230.456+-789*/Qc=;/*定义字符串在按钮图形上显示的 符 号*/mwindow(C alculator);/*显示主窗口*/color=7;/*设置灰颜色值*/getviewsettings(&vp);/*读取当前窗口的大
21、小*/width=(vp.right+l)/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);/*画一个矩形边框线*/setcolor(R
22、ED);/*设置颜色为红色*/outtextxy(x+3*width,y+height/2,0.);/*输出字符串0.*/x=2*width-width/2;/*设置 x 的坐标值*/y=2*height+height/2;/*设置 y 的坐标值*/for(j=0;j4;+j)/*画按钮*/(for(i=0;i5;+i)(setfillstyle(SOLID_FILL,color);setcolor(RED);bar(x,y,x+width,y+height);/*画一个矩形条*/rectangle(x,y,x+width,y+height);sprintf(str2,z,%cz,,strlj
23、*5+i);/*将字符保存到str2中*/outtextxy(x+(width/2),y+height/2,str2);x=x+width+(width/2);/*移动列坐标*/)y+=(height/2)*3;/*移动行坐标*/x=2*width-width/2;/*复位列坐标*/)x0=2*width;y0=3*height;x=x0;y=yO;gotoxy(x,y);/*移动光标到x,y 位置*/arrow();/*显示光标*/putimage(x,y,rar,XOR_PUT);m=0;n=0;str c p y(str 2,;/*设置 str 2 为空串*/w h i l e(v=sp
24、 e c i a l k e y 0)!=4 5)/*当压下A l t+x 键结束程序,否则执行下面的循环*/(w h i l e(v=sp e c i a l k e y()!=ENTER)/*当压下键不是回车时*/(p ut i m a g e (x,y,r a r,X 0 R _ P U T);/*显示光标图象*/i f(v=R IGHT)/*右场箭头时新位置计算*/i f(x =x 0+6*w i d th)/*如果右移,移到尾,则移动到最左边字符位置*/x=x 0;m=0;)e l sex=x+w i d th+w i d th/2;m+;/*否则,右移到下一个字符位置*/i f(v
25、=LEF T)/*左移箭头时新位置计算*/i f(x=x 0)x=x 0+6*w i d th;m=4;/*如果移到头,再左移,则移动到最右边字符位置*/e l se(x=x-w i d th-w i d th/2;m;/*否则,左移到前一个字符位置*/i f(v=U P)/*上移箭头时新位置计算*/i f(y=7*h e i g h t)(y=yO;n=0;/*如果移到尾,再下移,则移动到最上边字符位置*/e l sey=y+h e i g h t+h e i g h t/2;n+;/*否则,移到下边一个字符位置*/p uti m a g e(x,y,r a r,X OR _ P U T);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 经典 基础 实例 编程 语言 代码
限制150内