500行C语言程序文件

上传人:无*** 文档编号:84251965 上传时间:2022-05-03 格式:DOC 页数:17 大小:406KB
收藏 版权申诉 举报 下载
500行C语言程序文件_第1页
第1页 / 共17页
500行C语言程序文件_第2页
第2页 / 共17页
500行C语言程序文件_第3页
第3页 / 共17页
资源描述:

《500行C语言程序文件》由会员分享,可在线阅读,更多相关《500行C语言程序文件(17页珍藏版)》请在装配图网上搜索。

1、题目阐述:通过本学期对 C 语言的学习,对程序编译有了初步的了解,并运 用了各种函数(如文件包含,宏定义,结构体,函数调用等)编写了 这个推箱子游戏。二 、 设计思路:程序中“ 3”代表墙壁,“2”代表箱子,“4”代表目的地,“0”代表 空,“5”代表人 +目的地,“ 1“ 代表人,“6“代表箱子 +目的地,用“ Enter ”键选择关数,按“ p “键可以毁步,但最多只能毁5次。通 过上下左右键实现箱子的上下左右移动, 在可移动的围, 推送到目的 地。在推动的过程中若彻底失败,便按 r 键重新启动游戏。 三、主要解决问题的方法与技术关键1、 主要问题与解决方法函数的定义与调用光标的定位设置处

2、理问题光标的定位设置处理是通过 void gotoxy(int x,int y) 函数实 现的。定位设置手段是通过型参 x、y 获取定位点,应用 int86 的中 断调用完成光标定位。数组函数, switch,if 语句, for 循环语句的应用2、 技术关键光标定位C语言中循环语句的使用 C语言绘图与定义函数的使用In put n ame();Setbkcolor(BKCOLOR);bio=keyIFKey=bio=key(0);CASEKey!=key-E ntJudgeide()Idc=0Game();breakViewRecord();bio=keyIdc=2DeleteRecord=

3、();bio=keyIdc=3exit(0);四:程序清单:#define MAX 2 /* 游戏中总关数*/#defi ne STARTX 180#defi ne STARTY 80#defi ne BKCOLOR BLACK#defi ne MANCOLOR RED#defi ne OBJECTCOLOR YELLOW#defi ne TIMEINT 2#defi ne STARNUM 300#defi ne STEPMAX 5#in clude#include#include#include#include#include#include#include#include #define

4、Key_R 0x1372 #define Key_Up 0x4800#define Key_Enter 0x1c0d#define Key_Down 0x5000#define Key_P 0x1970#define Key_Esc 0x11b#define Key_Right 0x4d00#define Key_Left 0x4b00 typedef struct star int x; int y; int c;Star;Star sSTARNUM;typedef struct recordchar name20;int second;struct time t;struct date d

5、;Record;Record rMAX; typedef struct c int x; int y; Add;typedef struct aint x;int y;Player;Player p;char name20; /* 进入游戏时记录玩家的 */time_t t1,t2; /* int Ide; /* int MissionNum; int BoxNum; /* int Key; /* int map1010; /*/*游戏结束时的时间 */开始进入游戏时 , 选择菜单时返的功能号 (1,2,3)*/玩家正在玩的关数 */ 目的地的个数 */玩家按键 */地图 .( 空=0),(

6、人=1),( 箱子 =2),( 墙=3),( 目的地 =4),( 人+目的地=5),( 箱子 +目的地 =6)*/int StepNum;int DirectionKey; /*用来表示方向键最后一次按键 */int BoxMoveSTEPMAX; int StepSTEPMAX;/* 函数定义 */void InputName(); void Init();void MainMenu(); void JudgeRecord();void WriteRecord(); void JudgeIde();void DrawMenu(int ); void Game();void InitMissi

7、on(int ); void NextMission();void InitPic(int ,int ,int ); int Move(Add );void DrawWall(int ,int ); void DrawBack(int ,int ); void DrawBox(int ,int ); void DrawObject(int ,int ); void DrawMan(int ,int ); void DrawStar(); int JudgeWin();void InitMission1(); void InitMission2();int TimeCome(); void Ch

8、angeStar();void InputName(); void ViewRecords();void DeleteRecords(); void RegisterStep();void ReverselyMove(); void MoveBack(Add );void main()InputName();Init(); /* 驱动显卡 */ srand(time(&t1);MainMenu(); /* 画开始菜单 (1.start game 2.view records 3.delete records 4.exit game)*/void InputName() char c; clrs

9、cr();doprintf(nnPlease input your name:); scanf(%s,name);printf(Are you sure the name right(Y/N):);doc=getch();while(c!=Y&c!=y&c!=N&c!=n); while(c!=Y&c!=y);void Init()int gd=DETECT,gm; initgraph(&gd,&gm,c:tc);void MainMenu() setbkcolor(BKCOLOR); cleardevice();/*DrawStar(); /* 画开始菜单的背景画面 */DrawStar()

10、;Ide=0,Key=0;DrawMenu(Ide);doif(bioskey(1) /* 有键按下则处理按键 */Key=bioskey(0); switch(Key)case Key_Down: Ide+;Ide=Ide%4;DrawMenu(Ide);break;case Key_Up: Ide-;Ide=(Ide+4)%4;DrawMenu(Ide);break;else if(TimeCome() ChangeStar();/* 改变背景 */while(Key!=Key_Enter);JudgeIde(); /* 根据 Ide 运行不同的程序 */void JudgeIde() s

11、witch(Ide)case 0:Game();break;case 1:ViewRecords();bioskey(0);MainMenu();break;case 2:DeleteRecords();ViewRecords();bioskey(0);MainMenu();break; case 3:exit(0);void Game()int i,j,flag;Add ad;MissionNum=0;NextMission();doflag=0;Key=bioskey(0);switch(Key)case Key_Enter:NextMission();time(&t1);break;ca

12、se Key_Up:ad.x=-1;ad.y=0;flag=1;DirectionKey=Key;break;case Key_Down:ad.x=1;ad.y=0;flag=1;DirectionKey=Key;break;case Key_Left:ad.x=0;ad.y=-1;flag=1;DirectionKey=Key;break;case Key_Right:ad.x=0;ad.y=1;flag=1;DirectionKey=Key;break;case Key_R:MissionNum-;NextMission();break;case Key_Esc:MainMenu();br

13、eak;case Key_P:ReverselyMove();break;if(JudgeWin()if(flag=1) if(Move(ad) RegisterStep();JudgeRecord();NextMission(); while(1);void InitMission(int n)int i,j;for(i=0;i10;i+)for(j=0;jMAX) MissionNum=1;else MissionNum+;InitMission(MissionNum);setbkcolor(BKCOLOR); cleardevice();for(i=0;i10;i+)for(j=0;j1

14、0;j+)InitPic(mapij,i,j);switch(MissionNum)case 1:outtextxy(200,230,Mission 1);break;case 2:outtextxy(200,230,Mission 2);break;time(&t1);for(i=0;iSTEPMAX;i+)Stepi=BoxMovei=0;StepNum=0;int Move(Add a)int flag;int i=StepNum%STEPMAX;switch(mapp.x+a.xp.y+a.y)case 0:mapp.xp.y-=1;InitPic(mapp.xp.y,p.x,p.y)

15、;p.x=p.x+a.x;p.y=p.y+a.y;mapp.xp.y+=1;InitPic(mapp.xp.y,p.x,p.y);flag=1;break;case 2:if(mapp.x+2*a.xp.y+2*a.y=0|mapp.x+2*a.xp.y+2*a.y=4) mapp.xp.y-=1;mapp.x+a.xp.y+a.y=1;mapp.x+2*a.xp.y+2*a.y+=2; InitPic(mapp.xp.y,p.x,p.y);InitPic(mapp.x+a.xp.y+a.y,p.x+a.x,p.y+a.y);InitPic(mapp.x+2*a.xp.y+2*a.y,p.x+

16、2*a.x,p.y+2*a.y);p.x=p.x+a.x;p.y=p.y+a.y;flag=1;BoxMovei=1;else flag=0;break;case 3:flag=0;break;case 4:mapp.xp.y-=1;InitPic(mapp.xp.y,p.x,p.y);p.x=p.x+a.x;p.y=p.y+a.y; mapp.xp.y+=1;InitPic(mapp.xp.y,p.x,p.y);flag=1;break; case 6:if(mapp.x+2*a.xp.y+2*a.y=0|mapp.x+2*a.xp.y+2*a.y=4)mapp.xp.y-=1;mapp.x

17、+a.xp.y+a.y=5;mapp.x+2*a.xp.y+2*a.y+=2;InitPic(mapp.xp.y,p.x,p.y);InitPic(mapp.x+a.xp.y+a.y,p.x+a.x,p.y+a.y);InitPic(mapp.x+2*a.xp.y+2*a.y,p.x+2*a.x,p.y+2*a.y);p.x=p.x+a.x;p.y=p.y+a.y;flag=1;BoxMovei=1;else flag=0;break;return flag;void DrawWall(int i,int j)DrawBack(i,j);setfillstyle(9,1);bar(STARTX

18、+20*j-9,STARTY+20*i-9,STARTX+20*j+9,STARTY+20*i+9);void DrawMan(int i,int j)DrawBack(i,j);setcolor(MANCOLOR);circle(STARTX+20*j,STARTY+20*i,9);arc(STARTX+20*j-3,STARTY+20*i-2,20,160,3);arc(STARTX+20*j+4,STARTY+20*i-2,20,160,3);arc(STARTX+20*j,STARTY+20*i-2,220,320,7);void DrawBack(int i,int j)setfil

19、lstyle(1,BKCOLOR);bar(STARTX+20*j-9,STARTY+20*i-9,STARTX+20*j+9,STARTY+20*i+9);void DrawObject(int i,int j)DrawBack(i,j);setcolor(OBJECTCOLOR);line(STARTX+20*j-9,STARTY+20*i,STARTX+20*j+9,STARTY+20*i);line(STARTX+20*j-9,STARTY+20*i-9,STARTX+20*j+9,STARTY+20*i+9);line(STARTX+20*j-9,STARTY+20*i+9,STAR

20、TX+20*j+9,STARTY+20*i-9);void DrawBox(int i,int j)DrawBack(i,j);setfillstyle(9,3);bar(STARTX+20*j-9,STARTY+20*i-9,STARTX+20*j+9,STARTY+20*i+9);void DrawMenu(int j)int n;char *s4=1.Start Game,2.View Records,3.Delete Records,4.Exit Game;settextstyle(0,0,1);setcolor(GREEN);for(n=0;n4;n+)outtextxy(250,1

21、70+n*20,sn);setcolor(RED);outtextxy(250,170+j*20,sj);void DrawStar()int w,h,i,dotx,doty,color,maxcolor;w=getmaxx();h=getmaxy();maxcolor=getmaxcolor();for(i=0;iSTARNUM;i+)si.x=1+random(w-1);si.y=1+random(h-1);si.c=random(maxcolor);putpixel(si.x,si.y,si.c);void ChangeStar()int i,maxcolor;maxcolor=getm

22、axcolor();for(i=0;iSTARNUM;i+)si.c=random(maxcolor); putpixel(si.x,si.y,si.c);int TimeCome()static long tm, old;tm=biostime(0,tm);if(tm-oldTIMEINT) return 0; elseold=tm; return 1;int JudgeWin()int n=0,i,j;for(i=0;i10;i+)for(j=0;j10;j+)if(mapij=6) n+; if(n=BoxNum) return 1; else return 0;void InitMis

23、sion1() /* 第九关 */ int i,j;for(i=0;i10;i+)for(j=0;j10;j+)mapij=0;for(i=0;i=5;i+)map0i=3;for(i=5;i=7;i+) map2i=mapi-11=3; for(i=1;i=4;i+)map6i=map5i+3=mapi0=3; map37=map47=map15=3;for(i=2;i=4;i+)map2i=2;map34=map45=2;for(i=2;i=3;i+)map3i=map4i=4;map44=4;p.x=3;p.y=5;map35=1;BoxNum=5;void InitMission2()

24、int i,j;for(i=0;i10;i+)for(j=0;j10;j+)mapij=0;for(i=1;i=5;i+)map0i=map6i=3;for(i=2;i=4;i+)map1i+3=mapi7=mapi+25=mapi0=3; map11=map21=map50=map55=map46=map60=3; map24=map33=map42=map43=2;map23=map32=map34=map44=4;p.x=1;p.y=3;map13=1;BoxNum=4;void ViewRecords()FILE *fp;int i;setbkcolor(BKCOLOR);cleard

25、evice();if(fp=fopen(record,r)=NULL)printf(nerror on open file!);getch();exit(1);gotoxy(1,1);printf(ntttRecord Informationn);printf(Record-holder Achievement(s)t Time(h:m:s)ttDate(y/m/d);for(i=0;iMAX;i+)fseek(fp,i*sizeof(Record),0);fread(&ri,sizeof(Record),1,fp);printf(n%-10st%dtt %02d:%02d:%02dtt%02

26、d/%02d/%02d,ri.name,ri.seco nd,ri.t.ti_hour,ri.t.ti_min,ri.t.ti_sec,ri.d.da_year,ri.d.da_mon,ri.d.da_day);fclose(fp);gotoxy(10,25);printf(Press any key to return mainmenu.);void DeleteRecords()int i;FILE *fp;fp=fopen(record,w);for(i=0;iMAX;i+)strcpy(ri.name,nameless);ri.second=0;gettime(&ri.t);getda

27、te(&ri.d);for(i=0;iMAX;i+)fwrite(&ri,sizeof(Record),1,fp);fclose(fp);void JudgeRecord()int i=MissionNum-1;time(&t2);if(ri.second=0|difftime(t2,t1)ri.second)gotoxy(10,3);printf(ttYou have broken the record);ri.second=difftime(t2,t1);strcpy(ri.name,name);gettime(&ri.t);getdate(&ri.d);WriteRecord();els

28、egotoxy(10,3);printf(ttYou have pass this mission);gotoxy(10,4);printf(ttpress any key continue.);getch();getch();void WriteRecord()FILE *fp;int i=MissionNum-1;fp=fopen(record,rt+);fseek(fp,i*sizeof(Record),0); fwrite(&rMissionNum-1,sizeof(Record),1,fp);fclose(fp);void RegisterStep()int i;StepNum+;i

29、=(StepNum-1)%STEPMAX;Stepi=DirectionKey;void ReverselyMove()int i;Add ad;i=(StepNum-1)%STEPMAX;if(Stepi=0) return;elseswitch(Stepi)case Key_Up:ad.x=1;ad.y=0;MoveBack(ad);break;case Key_Down:ad.x=-1;ad.y=0;MoveBack(ad);break;case Key_Left:ad.x=0;ad.y=1;MoveBack(ad);break;case Key_Right:ad.x=0;ad.y=-1

30、;MoveBack(ad);break; StepNum-;Stepi=0;BoxMovei=0;void MoveBack(Add a) /* 一定可以移动 */int i=(StepNum-1)%STEPMAX;if(BoxMovei=0) mapp.xp.y-=1;InitPic(mapp.xp.y,p.x,p.y); p.x=p.x+a.x;p.y=p.y+a.y;mapp.xp.y+=1;InitPic(mapp.xp.y,p.x,p.y);else if(BoxMovei=1)mapp.x-a.xp.y-a.y-=2;InitPic(mapp.x-a.xp.y-a.y,p.x-a.x,p.y-a.y);mapp.xp.y+=1;InitPic(mapp.xp.y,p.x,p.y);p.x=p.x+a.x;p.y=p.y+a.y;mapp.xp.y+=1;InitPic(mapp.xp.y,p.x,p.y);五 设计结果说明1、设计优点:本程序在TC2.0下运行成功,这个程序的可根据读 者意愿通过改变程序中的某个函数得以实现,程序中运用了大量 常用 C 程序循环系统,条件语句,对本学期所学知识有了很好的 实践锻炼,同时操作者的兴趣可以增加箱子的数量完成大规模的 游戏程序。2、设计不足 :游戏的规模小, 不能足以满足操作者。 程序中结构不是很清晰,给读者带来杂乱的感觉。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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