- #include<stdio.h>
- #include<stdlib.h>
- #include<conio.h>
- #include<windows.h>
- #include<string.h>
- int x,y,hp,hpmax,misson;
- int exp,lv,gold;
- char mapdata[60][25];
- char name[10];
- void startmov();
- void menu();
- void createpsn();
- void loadpsn();
- void psnmenu();
- void eput();
- void move();
- int judge(int m,int n);
- void drawmap();
- void loaddata();
- void gamemenu();
- int main() //主函数
- {
- startmov();
- system("CLS");
- psnmenu();
- menu();
- system("CLS");
- move();
- }
- //....地图显示....//
- void drawmap()
- {
- int i,j;
- HANDLE f_mark;
- COORD s_mark;
- for(i=0;i<25;i++)
- {
- for(j=0;j<60;j++)
- {
- s_mark.X=j;
- s_mark.Y=i;
- f_mark=GetStdHandle(STD_OUTPUT_HANDLE);
- SetConsoleCursorPosition(f_mark,s_mark);
- printf("%c",mapdata[j][i]);
- }
- }
- }
- //...地图显示结束...//
- //......游戏内菜单.......//
- void gamemenu()
- {
- HANDLE f_mov;
- COORD s_mov;
- s_mov.X=62;
- s_mov.Y=4;
- f_mov=GetStdHandle(STD_OUTPUT_HANDLE);
- SetConsoleCursorPosition(f_mov,s_mov);
- printf("血量:%d",hp);
- }
- //......游戏内菜单结束.......//
- int judge(int m,int n) //碰撞检测
- {
- if(mapdata[m][n]=='#')
- {
- return 2;
- }
- else if(mapdata[m][n]=='?')
- {
- return 3;
- }
- else if(mapdata[m][n]=='$')
- {
- return 4;
- }
- else if(mapdata[m][n]=='@')
- {
- return 5;
- }
- else
- {
- return 1;
- }
- }
- void createpsn()//创建玩家信息
- {
- int i=0;
- FILE *psnc;
- char writein[10];
- psnc=fopen("player1.psn","w");
- char namec[10];
- printf("请输入玩家昵称:");
- gets(namec);
- fwrite("#psn:name=",10,1,psnc);
- fwrite(namec,strlen(namec),1,psnc);
- fwrite(";",1,1,psnc);
- fwrite("misson=1",8,1,psnc);
- fwrite(";",1,1,psnc);
- fwrite("hpmax=100",9,1,psnc);
- while(namec[i]!='\\0')
- {
- name[i]=namec[i];
- i++;
- }
- name[i]='\\0';
- hpmax=100;
- misson=1;
- fclose(psnc);
- }
- void loadpsn()
- {
- }
- void psnmenu() //个人信息选择菜单
- {
- char t;
- psnjump:
- printf("\\n\\n\\n\\n\\n");
- printf("\\t\\t\\t ************************\\n");
- printf("\\t\\t\\t * 1.创建新的个人信息 *\\n");
- printf("\\t\\t\\t ************************\\n");
- printf("\\t\\t\\t * 2.载入已有的个人信息 *\\n");
- printf("\\t\\t\\t ************************\\n");
- t=getch();
- if(t=='1')
- createpsn();
- else if(t=='2')
- ;
- else
- {
- system("CLS");
- printf("输入错误,请重新输入");
- Sleep(1000);
- system("CLS");
- goto psnjump;
- }
- system("CLS");
- }
- void move()
- {
- int xl=x,yl=y;
- char key;
- HANDLE f_mov;
- COORD s_mov;
- drawmap();
- gamemenu();
- while(1)
- {
- s_mov.X=xl;
- s_mov.Y=yl;
- f_mov=GetStdHandle(STD_OUTPUT_HANDLE);
- SetConsoleCursorPosition(f_mov,s_mov);
- printf(" ");
- s_mov.X=x;
- s_mov.Y=y;
- f_mov=GetStdHandle(STD_OUTPUT_HANDLE);
- SetConsoleCursorPosition(f_mov,s_mov);
- printf("O");
- key=getch();
- xl=x;yl=y;
- if((key=='a'||key=='A')&&(judge(x-1,y)!=2))
- x--;
- if((key=='w'||key=='W')&&(judge(x,y-1)!=2))
- y--;
- if((key=='d'||key=='D')&&(judge(x+1,y)!=2))
- x++;
- if((key=='s'||key=='S')&&(judge(x,y+1)!=2))
- y++;
- }
- }
- void startmov()
- {
- printf("\\n\\n\\n\\n\\n");
- printf("\\t\\t********* ********* *********\\n");
- Sleep(200);
- printf("\\t\\t* * *\\n");
- Sleep(200);
- printf("\\t\\t* * *\\n");
- Sleep(200);
- printf("\\t\\t* ********* *\\n");
- Sleep(200);
- printf("\\t\\t* * * * ***\\n");
- Sleep(200);
- printf("\\t\\t* * * * * *\\n");
- Sleep(200);
- printf("\\t\\t********* ********* * * * ***\\n");
- Sleep(1000);
- getch();
- }
- void menu()
- {
- char t;
- int n=4;
- jump1:
- printf("\\n\\n\\n\\n\\n");
- printf("\\t\\t\\t **********************\\n");
- printf("\\t\\t\\t * 1.开始剧情模式 *\\n");
- printf("\\t\\t\\t **********************\\n");
- printf("\\t\\t\\t * 2.载入剧情模式 *\\n");
- printf("\\t\\t\\t **********************\\n");
- printf("\\t\\t\\t * 3.载入自由模式地图 *\\n");
- printf("\\t\\t\\t **********************\\n");
- printf("\\t\\t\\t * 4.帮助 *\\n");
- printf("\\t\\t\\t **********************\\n");
- printf("\\t\\t\\t * 5.退出 *\\n");
- printf("\\t\\t\\t **********************\\n");
- t=getch();
- if(t=='1')
- ;
- else if(t=='2')
- n=2;
- else if(t=='3')
- loaddata();
- else if(t=='4')
- ;
- else if(t=='5')
- ;
- else
- {
- system("CLS");
- printf("输入错误,请重新输入");
- Sleep(1000);
- system("CLS");
- goto jump1;
- }
- }
- void loaddata()
- {
- int i,j;
- char canshu[10];
- FILE *loadgame;
- char mapname[39];
- char ds;
- memset(canshu,NULL,10*sizeof(char));
- system("CLS");
- jump2:
- printf("请输入地图文件所在位置:");
- gets(mapname);
- if((loadgame=fopen(mapname,"r"))==NULL)
- {
- printf("打开失败,请确定地图文件是否存在.");
- Sleep(1000);
- system("CLS");
- goto jump2;
- }
- else
- {
- system("CLS");
- memset(canshu,NULL,10*sizeof(char));//检测头代码
- fread(canshu,7,1,loadgame);
- if(strcmp(canshu,"#cstmap")!=0)
- {
- printf("111");
- eput();
- goto jump2;
- }
- memset(canshu,NULL,10*sizeof(char));//冒号过渡
- fread(canshu,1,1,loadgame);
- if(strcmp(canshu,":")!=0)
- {
- printf("111");
- eput();
- goto jump2;
- }
- memset(canshu,NULL,10*sizeof(char));// 坐标
- fread(canshu,2,1,loadgame);
- if(strcmp(canshu,"x=")!=0)
- {
- eput();
- goto jump2;
- }
- memset(canshu,NULL,10*sizeof(char));// x值设定
- fread(canshu,2,1,loadgame);
- x=(canshu[0]-'0')*10+canshu[1]-'0';
- memset(canshu,NULL,10*sizeof(char));//逗号过渡
- fread(canshu,1,1,loadgame);
- if(strcmp(canshu,",")!=0)
- {
- eput();
- goto jump2;
- }
- memset(canshu,NULL,10*sizeof(char));// 坐标
- fread(canshu,2,1,loadgame);
- if(strcmp(canshu,"y=")!=0)
- {
- eput();
- goto jump2;
- }
- memset(canshu,NULL,10*sizeof(char));// y值设定
- fread(canshu,2,1,loadgame);
- y=(canshu[0]-'0')*10+canshu[1]-'0';
- memset(canshu,NULL,10*sizeof(char));//分号过渡
- fread(canshu,1,1,loadgame);
- if(strcmp(canshu,";")!=0)
- {
- eput();
- goto jump2;
- }
- memset(canshu,NULL,10*sizeof(char));// 血量
- fread(canshu,3,1,loadgame);
- if(strcmp(canshu,"hp=")!=0)
- {
- printf("111");
- eput();
- goto jump2;
- }
- memset(canshu,NULL,10*sizeof(char));// 血量设定
- fread(canshu,3,1,loadgame);
- hp=(canshu[0]-'0')*100+(canshu[1]-'0')*10+canshu[2]-'0';
- if(hp>hpmax)
- hp=hpmax;
- fgetc(loadgame);
- memset(canshu,NULL,10*sizeof(char));// 地图数据开始标志
- fread(canshu,8,1,loadgame);
- if(strcmp(canshu,"mapdata:")!=0)
- {
- printf("11122221");
- eput();
- goto jump2;
- }
- fgetc(loadgame);
- for(j=0;j<25;j++) //装载地图
- {
- for(i=0;i<60;i++)
- {
- mapdata[i][j]=fgetc(loadgame);
- }
- fgetc(loadgame);
- }
- memset(canshu,NULL,10*sizeof(char));// 地图数据结束标志
- fread(canshu,10,1,loadgame);
- if(strcmp(canshu,"enddata;")!=0)
- {
- eput();
- goto jump2;
- }
- fclose(loadgame);
- }
- }
- void eput()
- {
- printf("载入地图失败!地图文件可能损坏或者未采用标准编写格式,请重试");
- Sleep(1000);
- system("CLS");
- }
- //该片段来自于http://www.codesnippet.cn/detail/1802201614573.html
来源: http://www.codesnippet.cn/detail/1802201614573.html