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

 
#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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值