编游戏c语言程序设计案例.docx

上传人:无*** 文档编号:87073595 上传时间:2023-04-16 格式:DOCX 页数:104 大小:167.81KB
返回 下载 相关 举报
编游戏c语言程序设计案例.docx_第1页
第1页 / 共104页
编游戏c语言程序设计案例.docx_第2页
第2页 / 共104页
点击查看更多>>
资源描述

《编游戏c语言程序设计案例.docx》由会员分享,可在线阅读,更多相关《编游戏c语言程序设计案例.docx(104页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、编游戏C语言程序设计案例精编.txt让人想念而死,是谋杀的至高境界,就连法医也鉴定不 出死因。C语言 编游戏案例精编 案例贪吃蛇游戏Sdefine N 200include include #include #define LEFT 0x4b00ttdefine RIGHT 0x4d00#define DOWN 0x5000define UP 0x4800#define ESC 0x01 lbint i,key;int score=0;/得分/int gamespeed=50000;/游戏速度自己调整/struct Food(int x;/食物的横坐标/int y;/食物的纵坐标/int ye

2、s;/*判断是否要出现食物的变量/ food;/食物的结构体/struct Snake(int xN;int yN;int node;/蛇的节数*/int direction;/蛇移动方向*/int life;/蛇的生命,活着,1死亡/snake;void Init(void) ;/图形驱动/void Close (void) ;/*图形结束*/void DrawK(void) ;/开始画面/void GameOver (void) ;/*结束游戏*/void GamePlay (void) ;/玩游戏具体过程/void PrScore(void) ;/输出成绩/主函数/void main(v

3、oid)Init ();/图形驱动/DrawK() ;/开始画面/GamePlay () ;/玩游戏具体过程/Close。;/图形结束/图形驱动/ void Init(void) (int gd=DETECT, gm;in it graph (&gd, &grn, c:;cleardeviceO ;)/开始画面,左上角坐标为(50, 40),右下角坐标为(610, 460)的围墙/ void DrawK(void) (Asetbkcolor (LIGHTGREEN) :*/setcolor(11);setlinestyle(SOLIDLINE, 0, THICKJHDTH) ;/设置线型/fo

4、r (i=50; i0; i-)/蛇的每个环节往前移动,也就是贪吃蛇的关键算 法/(snake. xi=snake. xi-l;snake, yi=snake. yi-1;)/*1, 2, 3, 4表示右,左,下四个方向,通过这个判断来移动蛇头/switch(snake, direction)case 1:snake, x0+=10;break;case 2: snake, x0-=10;break;case 3: snake. y0-=10;break;case 4: snake, y0+=10;break;for(i=3;isnake.node;i+)/从蛇的第四节开始判断是否撞到自己了,

5、因为蛇头为两 节,第三节不可能拐过来/(if (snake. xi=snake. x0&snake. yi=snake. y 0)Game0ver() ;/显示失败/snake. life=l;break;if (snake.x0595|snake. y0455)/蛇是否撞到墙壁/(GameOverO ;/本次游戏结束/snake. life=l; /蛇死/)if (snake. life=l)/以上两种判断以后,如果蛇死就跳出内循环,.重新开始/ break;if (snake. x0=food. x&ftsnake. y0=food. y)/吃到食物以后/setcolor (0) ;/把画

6、面上的食物东西去掉/rectangle(food, x, food, y, food, x+10, food, y-10);snake, xsnake, node=-20;snake, ysnake, node=-20;/新的节先放在看不见的位置,下次循环就取前节的位置/snake. node+;/蛇的身体长节/food. yes=l;/画面上需要出现新的食物/score+=10;PrScore () ;/输出新得分/)setcolor (4) ;/画出蛇/for (i=0;isnake. node;i+)rectangle(snake. xi, snake, yi, snake. xi+10

7、,snake, yi-10);delay(gamespeed);setcolor (0) ;/用黑色去除蛇的的最后节/rectangle(snake, xsnake, node-1, snake, ysnake, node-1,snake, xsnake. nodeT+10, snake, ysnake. node-l-10); /*endwhile (! kbhit) */if (snake. life=l)/如果蛇死就跳出循环/break;key = bioskey ();/ 接收按键/if (key=ESC)/按 ESC 键退出/break;elseif (key=UP&snake. d

8、irection! =4)/判断是否往相反的方向移动/snake. direction=3;elseif(key=RIGHT&snake. direction!=2)snake. direction=l;elseif(key=LEFT&snake. direction!=l)snake. direction=2;elseif(key=D0WN&snake. direction!=3)snake. direction=4;/*endwh i1e(1)*/游戏结束/void GameOver(void)cleardeviceO ;PrScore ();setcolor(RED);settextst

9、yle (0,0, 4);outtextxy(200, 200,GAME OVER); getchO ;/输出成绩/void PrScore(void)(char str10;setfillstyle(SOLID FILL, YELLOW);bar (50, 15, 220, 35);setcolor(6);settextstyle(0, 0, 2);sprintf(str, score:%d, score); outtextxy (55, 20, str);/图形结束/void Close(void)|getch ();closegraph();案例二计算器#include DOS 接口函数

10、*/#include /数学函数的定义/#include /屏幕操作函数/ #include /*1/0 函数/ #include /库函数/ #include /变量长度参数表*/ #include /图形函数/ include string. h /字符串函数/ #include /字符操作函数*/ #define UP 0x48/光标上移键/#define DOWN 0x50 /光标下移键/ #define LEFT 0x4b /光标左移键/ #define RIGHT 0x4d /光标右移键/ #define ENTER 0x0d /回车键/void *rar;/全局变量,保存光标图象

11、/struct palettetype palette; /使用调色板信息/ intGraphDriver;/图形设备驱动/int GraphMode; / 图形模式值/ intErrorCode;/错误代码*/intMaxColors;/可用颜色的最大数值/int MaxX, MaxY; /屏幕的最大分辨率/double AspectRatio; / 屏幕的像素比/ void drawboder (void) ; /画边框函数/ void initialize(void); /*初始化函数*/ void computer (void) ; /计算器计算函数/ void changetexts

12、tyle(int font, int direction, int charsize) ; /改变文本样式函数 */void mwindow(char *header) ; /窗口函数/int specialkey(void) ;/获取特殊键函数/int arrow() ;/*设置箭头光标函数/主函数/int main ()initialize。;/*设置系统进入图形模式/ computer () ; /运行计算器 /closegraph ();/*系统关闭图形模式返回文本模式/return (0) ;/结束程序/设置系统进入图形模式/void initialize(void)(int xas

13、p, yasp; /用于读x和y方向纵横比/GraphDriver = DETECT; / 自动检测显示器/ initgraph( SGraphDriver, &GraphMode, );/初始化图形系统/ErrorCode = graphresult ();/读初始化结果/if( ErrorCode != grOk ) /如果初始化时出现错误/ (printf(Graphics System Error: %sn”, grapherrormsg ( ErrorCode ) ); /显示错误代码/ exit ( 1 ) ; /退出/getpalette( ftpalette );/ 读面板信息

14、/MaxColors = getmaxcolor() + 1; / 读取颜色的最大值/MaxX = getmaxx ();/ 读屏幕尺寸 /MaxY = getmaxyO ;/ 读屏幕尺寸 /getaspectratio( &xasp, &yasp ); / 拷贝纵横比到变量中/AspectRatio = (double) xasp/ (double) yasp; / 计算纵横比值/)/计算器函数*/void computer(void)(struct viewporttype vp; /定义视类型变量/ int color, height, width;int x, y, xO, yO, i

15、, j, v, m, n, act, flag=l;float numl=0, num2=0, result; /操作数和计算结果变量/ char cnum5, str220=*, c, temp20 = *;char strl=”1230. 456+-789*/Qc1”;/定义字符串在按钮图形上显示的符号/ mwindow( Calculator ); / 显示主窗口 / color = 7;/*设置灰颜色值/getviewsettings( &vp );/ 读取当前窗口的大小/width=(vp. right+l)/10; / 设置按钮宽度 / height=(vp. bottom-10)

16、/10 ; /设置按钮高度 / x = width /2;/设置x的坐标值/y = height/2;/设置y的坐标值/setfi11style(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 (RED); /设置颜色为红色/outtextxy (x+3*width, y+height/

17、2, .); / 输出字符串.*/ x =2*width-width/2;/设置 x 的坐标值/y =2*height+height/2; /设置 y 的坐标值/ for( j=0 ; j4 ; +j ) /画按钮/ (for( i=0 ; i=x0+6*width)/如果右移,移到尾,则移动到最左边字符位置*/ ( x=xO;m=0;) else ( x=x+width+width/2; m+;) /否则,右移到下个字符位置/ if(v=LEFT) /左移箭头时新位置计算/ if(x=xO) (x=x0+6*width;m= 4;) /如果移到头,再左移,则移动到最右边字符位置*/ else

18、(x=x-width-width/2;m; /*否则,左移到前个字符位置/ if(v=UP) /上移箭头时新位置计算*/if (y=7*height)y=yO;n=0; /如果移到尾,再下移,则移动到最上边字符位置*/ else (y=y+height+height/2;n+; /否则,移到下边个字符位置/put image (x, y, rar, XOR_PUT); /在新的位置显示光标箭头/ c=strl n*5+m; /*将字符保存到变量c中/ if (isdigit(c) | | c=.)/判断是否是数字或小数点/ if (flagT) /如果标志为T,表明为负数/(strcpy(st

19、r2,将负号连接到字符串中/flag=l; ) /将标志值恢复为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=+)(numl=atof (str2); /将第一个操作数转换为浮点数/strcpy (str2

20、, ; /将 str2 清空/act=l; /做计算加法标志值/setfillstyle(SOLID_FILL, color+3);bar(2*width+width/2, height/2, 15*width/2, 3*height/2);outtextxy (5*width, height, “.); / 显示字符串/)if (c)if (strcmp(str2, )=0) /*如果str2为空,说明是负号,而不是减号/ flag=T; /设置负数标志/ else (numl=atof (str2); /将第二个操作数转换为浮点数/strcpy (str2, ); /将 str2 清空/

21、act二2; /做计算减法标志值/setfillstyle(SOLID_FILL, color+3);bar (2*width+width/2, height/2, 15*width/2, 3*height/2) ; /画矩形/ outtextxy (5*width, height,.); /显示字符串/)if(c= *)(numl=atof (str2) ;/将第二个操作数转换为浮点数/strcpy (str2, ; /将 str2 清空/act=3; /做计算乘法标志值/setfillstyle(SOLID_FILL, color+3);bar(2*width+width/2, heigh

22、t/2, 15*width/2, 3*height/2);outtextxy (5*width, height, 0. *); /显示字符串/)if (c/)(numl二atof (str2); /*将第二个操作数转换为浮点数/strcpy (str2, ”); /将 str2 清空/act=4; /做计算除法标志值/setfillstyle(SOLID FILL, color+3);bar(2*width+width/2, height/2, 15*width/2, 3*height/2);outtextxy (5*width, height, 0. *); /显示字符串/)if (c一)n

23、uml=atof (str2); /将第二个操作数转换为浮点数/strcpy (str2, ); /将 str2 清空/act二5; /做计算乘方标志值/setfillstyle(SOLID_FILL, color+3); /设置用淡绿色实体填充/bar (2*width+width/2, height/2, 15*width/2, 3*height/2) ; /画矩形/ outtextxy (5*width, height, 0. ); /显示字符串/if(c %)(numl二atof (str2); /将第二个操作数转换为浮点数/strcpy (str2, ); /将 str2 清空/ac

24、t=6; /做计算模运算乘方标志值/setfillstyle(SOLID_FILL, color+3); /*设置用淡绿色实体填充/bar (2*width+width/2, height/2, 15*width/2, 3*height/2) ; /*画矩形*/outtextxy (5*width, height,.); /显示字符串/)if (c=,=)|num2=atof (str2); /将第二个操作数转换为浮点数/switch (act) /根据运算符号计算/case 1:result=numl+num2; break; /做加法*/case 2: result=numl-num2;

25、break; /做减法/case 3:result二numl*num2;break; /*做乘法/case 4: result=numl/num2; break; /做除法/case 5: result=pow (numl, num2); break; /做 x 的 y 次方/case 6:result=fmod(numl, num2) ;break; /做模运算/ )setfillstyle(SOLIDFILL, color+3); /*设置用淡绿色实体填充*/bar (2*width+width/2, height/2, 15*width/2, 3*height/2) ; /覆盖结果区/

26、sprintf (temp, %f, result) ; /*将结果保存到 temp 中/outtextxy (5*vidth, height, temp); /*显示结果/)if(c=c)numl=0; /将两个操作数复位,符号标志为1*/num2=0;flag=l;strcpy(str2, ); /将 str2 清空/setfillstyle(SOL!D_FILL, color+3); /设置用淡绿色实体填充/bar(2*width+width/2, height/2, 15*width/2, 3*height/2) ; /覆盖结果区/ outtextxy (5*width, height

27、, ,); /显示字符串/if(c二Q)exit(); /如果选择了 q回车,结束计算程序/)put image (x, y, rar, XOR_PUT) ; /在退出之前消去光标箭头/ return; /* 返 回*/)/窗口函数/void mwindow( char *header )(int height;cleardevice() ;/*清除图形屏幕/setcolor( MaxColors - 1 ) ;/*设置当前颜色为白色/setviewport( 20, 20, MaxX/2, MaxY/2, 1 ) ;/ 设置视口大小 /height = textheight ( H );/

28、读取基本文本大小 /settextstyle( DEFAULT_FONT, HORIZ_DIR, 1 /设置文本样式/ settextjustify( CENTER_TEXT, TOP_TEXT ) ;/*设置字符排列方式/ outtextxy ( MaxX/4, 2, header ); /输出标题/setviewport ( 20, 20+height+4, MaxX/2+4, MaxY/2+20, 1 ); /*设置视口大小/ drawboder () ; /画边框/void drawboder(void) /画边框*/struct viewporttype vp; /定义视类型变量/s

29、etcolor( MaxColors - 1 );/设置当前颜色为白色/setlinestyle( SOLID LINE, 0, NORM WIDTH ) ;/设置画线方式/ getviewsettings( &vp ) ;/将当前视信息装入vp所指的结构中/ rectangle ( 0, 0, vp. right-vp. left, vp. bottom-vp. top ); /画矩形边框/ /设计鼠标图形函数/ int arrow()int size;int raw = 4, 4, 4, 8, 6, 8, 14, 16, 16, 16, 8, 6, 8, 4, 4, 4); /定义多边形坐

30、标/ setfillstyle(SOLID_FILL, 2); /*设置填充模式/ fillpoly(8, raw);/画出一光标箭头/size=imagesize(4, 4, 16, 16); /测试图象大小/ rar=malloc (size); /分配内存区域/get image (4, 4, 16, 16, rar) ; /*存放光标箭头图象/put image (4, 4, rar, XOR_PUT) ; /消去光标箭头图象/ return 0;/按键函数/int specialkey(void)int key;while(bioskey (1)-0); /等待键盘输入/key=bi

31、oskey(0);/键盘输入/key=key&Oxff? key&Oxff :key8; /*只取特殊键的扫描值,其余为/ return (key);/返回键值/案例三黑白棋游戏include graphics”/图形系统头文件*/define LEFT 0x4b00 /光标左键值/#define RIGHT 0x4d00 /光标右键值/#define DOWN 0x5000 /光标下键值/#define UP 0x4800 /光标上键值/#define ESC 0x01 lb /* ESC 键值*/define ENTER OxlcOd / 回车键值*/int a8 8 = 0, key,

32、score 1, score2;/*具体分数以及按键与存放棋子的变量/char playone3, playtwo3 ;/两个人的得分转换成字符串输出/void playtoplay(void) ;/人人对战函数/void DrawQp(void) ;/画棋盘函数/void SetPlayColor(int x) ;/*设置棋子第一次的颜色/void MoveColor(int x, int y);/恢复原来棋盘状态/int QpChange(int x, int y, int z) ;/判断棋盘的变化/ void DoScore (void) ;/处理分数/ void PrintScore(

33、int n);/输出成绩/ void playWin(void) ;/输出胜利者信息率/* 主函数*/void main(void)(int gd=DETECT, gr;initgraph(&gd, &gr, c:tc) ; /初始化图形系统/ DrawQp () ; /画棋盘/playtoplayO ;/人人对战/getchO ;closegraph ();/*关闭图形系统/)void DrawQp。/画棋盘/int i, j;scorel=score2=0;/棋手开始得分都为0/setbkcolor (BLUE);for(i=100;i=64-scorel-score2) /*如果尝试超过

34、空格数则停步/(MoveColor(x, y);fillellipse(x,y,15,15);break;)elsecontinue;/*如果按键无效/DoScoreO ;/分数的改变/break;/棋盘变化了,则轮对方走棋/else/已经有棋子就继续按键/continue;else /*四个方向按键的判断/i f (key=LEFT&x 120) /左方向键/MoveColor(x, y);fillellipse(x, y, 15, 15);SetPlayColor(t);x-=40;fillellipse(x, y, 15, 15);elsei f (keyRIGHT&X 4004&y80) / 右方向键/ MoveColor(x, y);fillellipse(x, y, 15, 15);SetPlayColor(t);x+=4

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁