代码笔记 | 一个简单的游戏框架

来源:互联网 发布:淘宝会员抓取系统下载 编辑:程序博客网 时间:2024/06/05 08:28
 #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");}

0 0
原创粉丝点击