#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");
}
代码笔记 | 一个简单的游戏框架
最新推荐文章于 2022-02-10 15:16:25 发布