还差几 发表于 2017-10-4 17:24:32

为什么函数无法调用

本帖最后由 还差几 于 2017-10-5 15:47 编辑


谁能帮帮我? {:10_254:}
三个函数都无法调用{:5_94:}


@丶忘却的年少o
@小甲鱼
代码详细如下:(代码比较长{:5_95:} )
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
//宏定义
#define S 31
#define g(h) h/2
#define da printf
#define gd 23
#define kd 14
#define zuoyi 'a' //左移动
#define youyi 'd'//右移动
#define xiayi 's'//下移动 (加速)
#define bx '-' //变形
#define zt '+' //暂停
//结构体
typedef struct{//坐标结构
      int x;
      int y;
}zb;
typedef struct{//方块结构
      int lx;   //他的类型0是田1是T 2是F,3是N,4是条
      int x1;//3初始
      int y1;//2初始
      zb zb;                //他的坐标,中心点
      const char *p;//指向一个形状地址;
}xz;
//全局变量
char rf="";
const char *ditu;//地图
const char *zhangaiwu ;//障碍物
clock_t jg;
int nd;//设置难度,就是方块下降的速度 间隔时间,微妙
int sfch;//是否重行绘制1绘制0不绘制
int jifen;//当前玩了多少分
xz dqxz; //当前形状 ------
xz xgxz;//下一个形状--------------
xz lsxz; //临时形状----
const char *leixing={                                                                                                //这里的指针都是指向常量区的,大家可以添加跟多的方块类型
                                                {"■","■","■","■","",""},//方块田比较特殊,旋转就不用旋转
                                                {"■","","■","■","■",""}, //T块
                                                {"■","■","■","","■",""}, //F块      
                                                {"","■","■","■","■",""}, //N块
                                                {"■","","■","","■",""}, //条块                                       
                                                };

int fx={-1,0,1,0,1,0};//方向坐标
//函数定义
int dengru(void);
int zhuce(void);
int xoxi(void);
int elsfk(int argc, char *argv[]);
void gotoxy( int x, int y );
void chushi();//初始一些数据
void printf_dy();//打印地图数据
void bianxing(xz*dqxz);//变形 (方块指针,旋转几次)
char jieshou();//接受字符输入,直到接受到字符才返回;
int get_c();//缓冲区获取一个功能键状态,如果获取失败,返回字符-1   (马上返回 )-1失败0左移 1下移动 2右移动 3变型 4暂停
int jiance(int n);//下左右移动检测   OK返回1,失败返回0
void zanting();//暂停
int yidong(int n);//根据方向移动, 到底部,返回-1
int jiaru();//将当前不能下降的方块加入到障碍物数组里面;并消行,返回有多少行消了
void xiaohang(int h);//消行(行坐标)
void shenchan();//生产方块
int naozhong();//闹钟,间隔多久


//主函数
int main(){
        int i;
        wer:
        scanf("%d",&i);
        if(i==1)
        {
        int dengru();
        goto wer;
        }
        else
        {
                if(i==2)
                {
                int zhuce();
                goto wer;
                }
                else
                {
                        if(i==3)
                        {
                        int xoxi();
                        goto wer;
                        }
                        else{
                                int elsfk(int argc, char *argv[]);
                        }
                }
        }




return 0;
}
//其他函数
int zhuce(){
        int jieguo,i;
        char a,b,c,g,h;
        FILE *fa;
       
        Q3:
        printf("请输入您要注册的账号名(30位以内):");
        scanf("%s",&a);        
        Q1:
        printf("输入您要注册的账号密码(30位以内):");
        for(i=0;i<100;i++){
        b=getch();

        if(b=='\r')
        break;
        printf("*");

        }
        b='\0';
        printf("\n");
        printf("请您确认要注册的账号密码:");
        for(i=0;i<100;i++){
        c=getch();

        if(c=='\r')
        break;
        printf("*");

        }
        c='\0';
        printf("\n");
        if((strcmp(b,c))!=0){
                Q2:
                printf("两次密码不相同\n重新输入输0,退出输1:");
                scanf("%c",&g);
                getchar();
        }else{
                if((fa=fopen(a,"w"))==NULL){
                        printf("shibai\n");
                }
                if((fputs(b,fa))==EOF){
                        Q4:
                        printf("注册失败\n退出输入1,重新注册输入0:");
                        scanf("%c",&h);
                        getchar();
                        if(g=='1'){
                        jieguo=0;
                  }else if(g=='0'){
                        goto Q3;
                  }else{
                        printf("输入错误\n");
                        goto Q4;
                }
                }else{
                        printf("注册成功\n请牢记您的帐号:%s\n",a);
                        jieguo==1;
                }
                fclose(fa);
        }       
       
        return jieguo;
}
int dengru(){
       
        int jieguo,i,c;
        char b,d;
        FILE *fa;
       
        Q1:
        printf("输入用户名:");
        scanf("%s",&rf);
        getchar();
        printf("输入密码:");
        for(i=0;i<100;i++){
        b=getch();

        if(b=='\r')
        break;
        printf("*");
        }
        b='\0';
        printf("\n");
       
        if((fa=fopen(rf,"r"))==NULL){
                printf("帐号错误\n");
                Q2:
                printf("如果要重新输入——输入0,如果要退出——输入1\n");
                scanf("%d",&c);
                getchar();
                if(c==0){
                goto Q1;                       
                }else if(c==1){
                        jieguo=0;
                }else{
                        printf("输入错误,请重新输入\n");
                        goto Q2;
                }
        }else{
                while(!feof(fa)){
                        fgets(d,S,fa);
                }
                if((strcmp(b,d))!=0){
                        printf("您的密码或帐号错误\n请重新输入:");
                        goto Q1;
                }else{
                        printf("登录成功\n");
                        jieguo=1;
                }
                fclose(fa);                       
        }
       
        return jieguo;
}

int xoxi(void){
              int ms,jieguo,asdf;
      char mnbvcxz,name_1,qd,mm,uy,mm1;
      /*双人模式数据*/
      int q, w, q1=0, w1=0, ju, se, ty,i;
      FILE *fa;
      /*单人模式数据*/
      int j, r, jq=0, rq=0;
      int a, b, c, d, e, f, g, h;
      /*单人模式的5个机器人*/
      int aa[]={0,1,2,1,1,1,0,1,0,2,2,2,0,0,2,1,1,0,2,1,2,0,1,2,0,1,2,0,1,2,0,0,0,1,2,1,2,1,2,1,2,1,0,1,2,1,2,1,2,0,0,1,0,2,1,2,1,2,0,1,2,1,2,1,2,1,0,0,0,2,1,2,1,2,1,1,1,2,1,2,1,2,2,2,0,1,2,1,1,1,0,1,0,2,2,2,0,0,2,1,1,0,2,1,2,0,1,2,0,1,2,0,1,2,0,0,0,1,2,1,2,1,2,1,2,1,0,1,2,1,2,1,2,0,0,1,0,2,1,2,1,2,0,1,2,1,2,1,2,1,0,0,0,2,1,2,1,2,1,1,1,2,1,2,1,2,2,2};
      int bb[]={2,1,2,0,1,2,1,2,1,0,2,1,0,2,1,0,2,1,0,2,1,2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0,2,1,2,0,1,2,1,2,1,0,2,1,0,2,1,0,2,1,0,2,1,2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0};
      int cc[]={2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,2,0,1,2,1,2,1,0,2,1,0,2,1,0,2,1,0,2,1,2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,2,0,1,2,1,2,1,0,2,1,0,2,1,0,2,1,0,2,1};
      int dd[]={0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,2,1,2,1,2,1,2,1,0,2,0,2,0,2,0,1,1,0,1,2,1,0,2,0,0,1,1,2,2,2,0,0,1,2,0,2,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,2,0,1,2,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,2,1,2,1,2,1,2,1,0,2,0,2,0,2,0,1,1,0,1,2,1,0,2,0,0,1,1,2,2,2,0,0,1,2,0,2,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,2,0,1,2};
      int ee[]={1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,1,0,2,0,0,1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,1,0,2,0,0};

      da("%s:\n你好\n欢迎游玩本游戏\n本游戏是猜拳游戏\n请你选择模式:\n双人模式输入:0\n单人模式输入:1\n请输入:",rf);
CON:
      scanf("%d",&ms);
      if(ms>1)
      {
            da("输入错误,请重新选择:");
            goto CON;
      }
      da("确定吗?\n是:y\n不:n\n请输入:");
      scanf("%c",&qd);
      getchar();
      if(qd=='n')
      {
            da("请选择:");
            goto CON;
      }
      
      switch(ms)
      {
            
      case 0:
            /*双人模式*/
            printf("玩家1的账号已登录:%s\n玩家2请登录账号(没有账号请输入0注册):",rf);
                        scanf("%d",&asdf);
                        if(asdf==0){
                                zhuce();
                                goto Q1;
                        }else{
                                Q1:
                                printf("玩家2请输入用户名:");
                                scanf("%s",&name_1);
                                printf("玩家2请输入密码:");
                                for(i=0;i<100;i++){
                                mm=getch();
                                if(mm=='\r')
                                break;
                                printf("*");
                                }
                                mm='\0';
                                printf("\n");
                               
                                if((fa=fopen(name_1,"r"))==NULL){
                printf("帐号错误\n");
                Q2:
                printf("如果要重新输入——输入0,如果要退出——输入1\n");
                scanf("%d",&ty);
                getchar();
                if(c==0){
                goto Q1;                       
                }else if(ty==1){
                        return 0;
                }else{
                        printf("输入错误,请重新输入\n");
                        goto Q2;
                }
        }else{
                while(!feof(fa)){
                        fgets(mm1,S,fa);
                }
                if((strcmp(mm1,mm))!=0){
                        printf("您的密码或帐号错误\n请重新输入:");
                        goto Q1;
                }else{
                        printf("登录成功\n");
                        return 0;
                }
                fclose(fa);                       
        }
                        }
            da("输入要玩几局:");
            scanf("%d",&ju);
            if(g(ju)==ju-g(ju))
            {
                  se=ju/2;
            }
            else
            {
                  se=ju/2+1;
            }
            da("本轮%d局,%d胜\n",ju,se);
            
            for(ty=0;ty<ju;ty++)
            {
CON2:
            da("0.是石头\n1.是剪刀\n2.是布\n\n请%s出拳:",rf);
            scanf("%d",&q);
            if(q==0)
            {
                  for(h=0;h<30;h++)
                  {
                        da("%s已出拳 ! !!!!!!!!!!!!!\n",rf);
                  }
                  
            }
            else
            {
                  if(q==1)
                  {
                        for(h=0;h<30;h++)
                        {
                              da("%s已出拳!!!!!!!!!!!\n",rf);
                        }
                  }
                  else
                  {
                        if(q==2)
                        {
                              da("%s已出拳 !!!!!!!!!!!\n",rf);
                        }
                        else
                        {
                              goto CON2;
                        }
                  }
            }
CON3:
            da("0.是石头\n1.是剪刀\n2.是布\n\n请%s出拳:",name_1);
            scanf("%d",&w);
            
            
            if(q==w)
            {
                  da("s平局s\n目前比分:\n%d:%d\n",q1,w1);
            }
            else
            {
                  if(q==0)
                  {
                        if(w==1)
                        {
                              q1++;
                              da("%s出石头战胜了%s的剪刀\n目前比分:\n%d:%d\n",rf,name_1,q1,w1);                                 
                              if(q1==se)
                              {
                                    da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",rf,rf,q1,name_1,w1);
                                    goto CON4;
                              }
                        }
                        else//w==2
                        {
                              w1++;
                              da("%s出布战胜了%s的石头\n目前比分:\n%d:%d\n",name_1,rf,q1,w1);                                 
                              if(w1==se)
                              {
                                    da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",name_1,name_1,w1,rf,q1);
                                    goto CON4;
                              }
                        }
                  }
                  else
                  {
                        if(q==1)
                        {
                              if(w==0)
                              {
                                    w1++;
                                    da("%s出石头战胜了%s的剪刀\n目前比分:\n%d:%d\n",name_1,rf,q1,w1);                                 
                                    if(w1==se)
                                    {
                                          da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",name_1,name_1,w1,rf,q1);
                                          goto CON4;
                                    }
                              }
                              else//w==2
                              {
                                    q1++;
                                    da("%s出剪刀战胜了%s的布\n目前比分:\n%d:%d\n",rf,name_1,q1,w1);                                 
                                    if(q1==se)
                                    {
                                          da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",rf,rf,q1,name_1,w1);
                                          goto CON4;
                                    }
                              }
                        }
                        else//q==2
                        {
                              if(w==0)
                              {
                                    q1++;
                                    da("%s出布战胜了%s的石头\n目前比分:\n%d:%d\n",rf,name_1,q1,w1);                                 
                                    if(q1==se)
                                    {
                                          da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",rf,rf,q1,name_1,w1);
                                          goto CON4;
                                    }
                              }
                              else
                              {
                                    if(w==1)
                                    {
                                          w1++;
                                          da("%s出剪刀战胜了%s的布\n目前比分:\n%d:%d\n",name_1,rf,q1,w1);                                 
                                          if(w1==se)
                                          {
                                                da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",name_1,name_1,w1,rf,q1);
                                                goto CON4;
                                          }
                                    }
                                    else
                                    {
                                          goto CON3;
                                    }
                              }
                        }
                  }
            }
            }
            
            
CON4:
            da("还想再玩其他的吗?\n想输入:Y\n不想输入:N\n请输入:");
            scanf("%c",&mnbvcxz);
            scanf("%c",&ms);
            if(ms=='Y')
            {
                  da("想玩输入对应数字:\n单人模式:1\n如果想再玩本模式输入:0\n请输入:");
                  goto CON;
            }
            
            break;
            
            
      case 1:
            /*单人模式*/
            printf("开始单人猜拳游戏\n请先选择与几号机器人对决\n请输入它们对应编码\n1号机器人:0\n2号机器人:1\n3号机器人:2\n4号机器人:3\n5号机器人:4\n");
CONXIN:
            scanf("%d",&a);
            if(a<5)
            {
                  b=a+1;
                  printf("%s想和%d机器人玩几局:",rf,b);
                  scanf("%d",&c);
                  if(g(c)==c-g(c))
                  {
                        d=c/2;
                  }
                  else
                  {
                        d=c/2+1;
                  }
                  printf("谁先赢%d局谁胜!!!!\n",d);
                  printf("请输入一个50以下的数:");
                  scanf("%d",&e);
                  g=e+c;
                  f=e;
                  for(;f<g;f++)
                  {
                        if(a==0)      
                        {
                              j=aa;
                        }
                        else
                        {
                              if(a==1)
                              {
                                    j=bb;
                              }
                              else
                              {
                                    if(a==2)
                                    {
                                          j=cc;
                                    }
                                    else
                                    {
                                          if(a==3)
                                          {
                                                j=dd;
                                          }
                                          else
                                          {
                                                j=ee;
                                          }
                                    }
                              }
                        }
                        if(j==0)
                        {
                              printf("%d号机器人出了石头\n",b);
                        }
                        else
                        {
                              if(j==1)
                              {
                                    printf("%d号机器人出了剪刀\n",b);
                              }
                              else
                              {
                                    printf("%d号机器人出了布\n",b);
                                    
                              }   
                        }
                        if(j==0)
                        {
                              for(h=0;h<30;h++)
                              {
                                    printf("%d号机器人出了 ! !\n",b);
                              }
                        }
                        else
                        {
                              if(j==1)
                              {
                                    for(h=0;h<30;h++)
                                    {
                                          printf("%d号机器人出了!!\n",b);
                                    }
                              }
                              else
                              {
                                    for(h=0;h<30;h++)
                                    {
                                          printf("%d号机器人出了 !!\n",b);
                                    }
                              }
                        }
                        printf("0.是石头\n1.是剪刀\n2.是布\n\n现在该%s出拳:",rf);
CONXING:
                        scanf("%d",&r);
                        if(r<3)
                        {
                              if(j==r)
                              {
                                    printf("s平局s\n");
                                    g++;
                                    printf("目前比分%d:%d\n",jq, rq);
                                    printf("按任意键继续\n");
                                    system("pause");
                              }
                              else
                              {
                                    if(j==0)
                                    {
                                          if(r==1)
                                          {
                                                jq++;
                                                printf("%d号机器出石头战胜了%s的剪刀!\n目前比分%d:%d\n",b,rf,jq, rq);
                                                printf("按任意键继续\n");
                                                system("pause");                                 
                                                if(jq==d)
                                                {
                                                      printf("%d号机器人赢了\n赢了%d局\n而%s只赢%d局\n",b,jq,rf,rq);
                                                      goto QWE;
                                                }
                                          }
                                          else
                                          {
                                                rq++;
                                                printf("%s出布战胜%d号机器人的石头!\n目前比分%d:%d\n",rf,b,jq, rq);
                                                printf("按任意键继续\n");
                                                system("pause");                                       
                                                if(rq==d)
                                                {
                                                      printf("%s赢了\n赢了%d局\n而%d号机器人只赢%d局\n",rf,rq,b,jq);
                                                      goto QWE;
                                                }
                                          }
                                    }
                                    else
                                    {
                                          if(j==1)
                                          {
                                                if(r==0)
                                                {
                                                      rq++;
                                                      printf("%s出石头战胜%d号机器人的剪刀!\n目前比分%d:%d\n",rf,b,jq, rq);
                                                      printf("按任意键继续\n");
                                                      system("pause");                                                
                                                      if(rq==d)
                                                      {
                                                            printf("%s赢了\n赢了%d局\n而%d号机器人只赢%d局\n",rf,rq,b,jq);
                                                            goto QWE;
                                                      }
                                                }
                                                else
                                                {
                                                      jq++;
                                                      printf("%d号机器出剪刀战胜了%s的布!\n目前比分%d:%d\n",b,rf,jq, rq);
                                                      printf("按任意键继续\n");
                                                      system("pause");
                                                      if(jq==d)
                                                      {
                                                            printf("%d号机器人赢了\n赢了%d局\n而%s只赢%d局\n",b,jq,rf,rq);
                                                            goto QWE;
                                                      }
                                                      
                                                }
                                          }
                                          else
                                          {
                                                if(r==0)
                                                {
                                                      jq++;
                                                      printf("%d号机器出布战胜了%s的石头!\n目前比分%d:%d\n",b,rf,jq, rq);
                                                      printf("按任意键继续\n");
                                                      system("pause");                                                
                                                      if(jq==d)
                                                      {
                                                            printf("%d号机器人赢了\n赢了%d局\n而%s只赢%d局\n",b,jq,rf,rq);
                                                            goto QWE;
                                                      }
                                                }
                                                else
                                                {
                                                      rq++;
                                                      printf("%s出剪刀战胜%d号机器人的布!\n目前比分%d:%d\n",rf,b,jq, rq);
                                                      printf("按任意键继续\n");
                                                      system("pause");
                                                      if(rq==d)
                                                      {
                                                            printf("%s赢了\n赢了%d局\n而%d号机器人只赢%d局\n",rf,rq,b,jq);
                                                            goto QWE;
                                                      }
                                                }
                                          }
                                    }
                              }
                        }
                        else
                        {
                              printf("请重新输入:");
                              goto CONXING;
                        }
             }
       }
       else
       {
             printf("请重新输入:");
             goto CONXIN;
       }
QWE:
       printf("\n");
      
       da("还想再玩其他的吗?\n想输入:Y\n不想输入:N\n请输入:");
       scanf("%c",&mnbvcxz);
       scanf("%c",&ms);
       if(ms=='Y')
       {
             da("想玩输入对应数字:\n双人模式:0\n如果想再玩本模式输入:1\n请输入:");
             goto CON;
       }
      
       break;
      
      }
      
      return 0;
}

int naozhong(){
      clock_t njg=clock();
      if(njg-jg>=nd){
                jg=njg;
                return 1;
      }else{
                return 0;
      }
}
void shenchan(){
      
      dqxz.zb =xgxz.zb ;
      dqxz.x1 =xgxz.x1;
      dqxz.y1 =xgxz.y1;
      dqxz.lx =xgxz.lx;
      int n;
      for(n=0;n<6;n++){
                dqxz.p =xgxz.p;
      }
      
      //生产一个下一个方块数据
      xgxz.lx=rand()%5;
      xgxz.x1=3;
      xgxz.y1=2;
      xgxz.zb .x=(kd-2)/2;
      xgxz.zb.y =-1;
      for(n=0;n<6;n++){
                xgxz.p=      leixing;
      }
      for(n=0;n<rand()%5;n++){
                bianxing(&xgxz);
      }
      
}
int jiaru(){//加入障碍物 ,返回有多少行可以消
      int x1,y1,x,y,m,n=0;
               
      for(y=0;y<dqxz.x1 ;y++){//打印方块
                for(x=0;x<dqxz.y1 ;x++){
                        if(*(dqxz.p +n)=="■" ){
                              x1=dqxz.zb .x+x;
                              y1=dqxz.zb .y+y;
                              zhangaiwu="■";                                       
                        }
                        n++;
                }
      }
      m=0;
      for(y1=0;y1<dqxz.x1 ;y1++){
                n=0;
                for(x=0;x<kd;x++){
                        y=dqxz.zb .y+y1;
                        if(zhangaiwu=="■" && y<gd-1)      {
                              n++;
                        }
                }
                if(n==kd){
                        xiaohang(y);      
                        m++;
                }      
      }
      return m;
}
void xiaohang(int h){//消行坐标
      int x,y,y1;
      for(y1=0;y1<h;y1++){
                for(x=1;x<kd-1;x++){
                        y=h-y1;
                        if(y>0){
                              zhangaiwu=zhangaiwu;
                        }else{
                              zhangaiwu=". ";
                        }               
                }               
      }
}      
int yidong(int n){//根据字符控制方块状态,如果到底部,则返回-1
      int f=1;
               
      if(jiance(n)==1){

                if(n==1){
                        while(jiance(n)==1){
                        dqxz.zb .x=dqxz.zb .x+fx;
                        dqxz.zb .y=dqxz.zb .y+fx;               
                        }
                }else{               
                        dqxz.zb .x=dqxz.zb .x+fx;
                        dqxz.zb .y=dqxz.zb .y+fx;      
                }      
      }
      if(jiance(1)==0){
                f=0;
      }      
      return f;               
}
void gotoxy( int x, int y ){
      COORD c;
      c.X = x - 1; c.Y = y - 1;
      SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), c );
}
void zanting(){//暂停
      gotoxy(kd*2+2,gd/2+7);
      printf("请安“+”加号键继续!!");
      while(jieshou()!='+'){//游戏继续啦
      }
      gotoxy(kd*2+2,gd/2+7);
      printf(" -变形+暂停         ");
}
int jiance(int f){//下左右移动检测   OK返回1,失败返回0
      xz lsxz;//零时形状

      int x,y,n=0,m=1;
      int x1,y1;
      
      lsxz=dqxz;      
      lsxz.zb .x=lsxz.zb.x +fx;
      lsxz.zb .y=lsxz.zb.y +fx;
      
      for(y=0;y<lsxz.x1 ;y++){//打印方块
                for(x=0;x<lsxz.y1 ;x++){
                        if(*(dqxz.p +n)=="■" ){
                              x1=lsxz.zb .x+x;
                              y1=lsxz.zb .y+y;
                                        if(x1<1 ||x1>kd-2 ||y1<0 ||y1>gd-2){
                                                m=0;
                                                break;                        
                                        }else if( zhangaiwu=="■" && y1>0){               
                                                m=0;
                                                break;
                                        }                        
                        }
                        n++;
                }
      }      
      return m;
}
int get_c(){//缓冲区获取一个功能键状态,如果获取失败,返回字符-1   (马上返回 )-1失败0左移 1下移动 2右移动 3变型 4暂停
      char ls;
      int n=-1;
      if(kbhit()!=0){
                ls=getch();
                while(kbhit()){
                        getch();
                }
      }
      switch(ls){
                case zuoyi:n=0;break;      
                case youyi:n=2;break;
                case xiayi:n=1;break;
                case bx:n=3;break;      
                case zt:n=4;break;
      }
      return n;      
}
void bianxing(xz*ybxz){//变形 (方块指针,旋转几次)
      if(ybxz->lx==0){
                return ;
      }
      int x,y,n,i;
      int z={{4,2,0,5,3,1},{3,0,4,1,5,2}};
      int z2={{2,3},{3,2},{1,-1}};
      
      lsxz.zb=ybxz->zb ;
                        
      if(ybxz->x1==2){      
                i=1;      
      }else{
                i=0;
      }      
      for(n=0;n<6;n++){//旋转
                lsxz.p=ybxz->p];               
      }
      lsxz.zb.y=lsxz.zb.y +z2;//旋转之后的坐标的变换,我这里只简单处理了下,具体的坐标是这么样的没研究出来,考亲们研究啦
      lsxz.x1 =z2;
      lsxz.y1 =z2;
//---------------------------------
      int x1,y1,m=1;
      n=0;
      for(y=0;y<lsxz.x1;y++){//遍历
                for(x=0;x<lsxz.y1;x++){
                        if(lsxz.p=="■" ){
                              x1=lsxz.zb .x+x;
                              y1=lsxz.zb .y+y;
                                        if(x1<1 ||x1>kd-2 ||y1>gd-2){
                                                m=0;
                                                break;                        
                                        }else if( zhangaiwu=="■" && y1>0){               
                                                m=0;
                                                break;
                                        }                        
                        }
                        n++;
                }
      }      

//--------------------------------------------      
      if(m==1){//如果零时方块和障碍物没有重叠,则把零时方块的信息复制个当前方块
                ybxz->zb =lsxz.zb;
                ybxz->x1=lsxz.x1 ;
                ybxz->y1=lsxz.y1 ;      
                for(n=0;n<6;n++){
                        ybxz->p=lsxz.p ;      
                }
      }      
}
void chushi(){//初始一些数据
      jifen=0;//初始化积分
      srand((unsigned int)time(NULL));//初始化随机种子
      jg=clock();//初始化时间
      nd=300;//初始化难度,毫米级别
//---------初始化下个形状的数据---------------
      int n;
      xgxz.lx=rand()%5;
      xgxz.x1=3;
      xgxz.y1=2;
      xgxz.zb .x=(kd-2)/2;
      xgxz.zb.y =-1;
      
      for(n=0;n<6;n++){
                xgxz.p=      leixing;
      }
      
      shenchan(); //产生一个方块
      int x,y;
      for(y=0;y<gd;y++){//初始化障碍物
                for(x=0;x<kd;x++){
                        if(x==0||x==kd-1||y==gd-1){
                              zhangaiwu="■";
                        }else{
                              zhangaiwu=". ";
                        }
                }
      }               
}
void printf_dy(){//打印地图数据
      int x,y,n=0;
      
      for(y=0;y<gd;y++){//初始化地图
                for(x=0;x<kd;x++){
                        if(x==0||x==kd-1||y==0||y==gd-1){
                              ditu="●";
                        }else{
                              ditu=zhangaiwu;
                        }
                }
      }
//      system("cls");      
      for(y=0;y<dqxz.x1 ;y++){//打印方块
                for(x=0;x<dqxz.y1 ;x++){
                        int x1=dqxz.zb .x+x;
                        int y1=dqxz.zb .y+y;
                        if(dqxz.p=="■" && x1>0 &&x<kd-1 && y1>0 && y<gd-1){
                              ditu=dqxz.p;      
                        }
                        n++;
                }
      }      
      gotoxy(1,1);//将光标移到最上面      
      for(y=0;y<gd;y++){//打印地图
                for(x=0;x<kd;x++){
                        printf("%s",ditu);
                }
                printf("\n");
      }
      gotoxy(kd*2+2,gd/2-4);
      printf("---下个方块---");
      n=0;
      for(x=0;x<3;x++){
                gotoxy(kd*2+6,gd/2-2+x);
                for(y=0;y<3 ;y++){
                        if(x<xgxz.x1 && y<xgxz.y1 ){
                              printf("%s",xgxz.p);
                              n++;
                        }else{
                              printf("   ");
                        }
                }      
      }
      gotoxy(kd*2+2,gd/2+2);
      printf("---游戏积分---");
      gotoxy(kd*2+2,gd/2+3);
      printf("      %d",jifen*10);
      gotoxy(kd*2+2,gd/2+5);
      printf("---控制按钮---");
      gotoxy(kd*2+2,gd/2+6);
      printf(" A下 S下 D右 ");
      gotoxy(kd*2+2,gd/2+7);
      printf(" -变形+暂停 ");
}
char jieshou(){//接受字符输入,直到接受到字符才返回;
      while( !kbhit() ){
                Sleep(20);      
      }
      char ls=getch();
      
      while(kbhit()){
                        getch();
                }
      return ls;      
}
int elsfk(int argc, char *argv[]){
                chushi();
      int jc,n;
      
      while(1){
                if(sfch=1){//检测是否重行绘制
                        printf_dy();
                        sfch=0;
                }
                jc=jiance(1);
                if(jc==1){//这里检测是否能往下移动
                        if(sfch=naozhong()){
                              dqxz.zb .y=dqxz.zb .y+1;
                        }
                }else if(jc==0 && dqxz.zb .y<0){//检测是否到顶部了,到顶部了就结束游戏
                        system("cls");
                        printf("游戏失败");//放假了心静不下来,不想搞了,简单处理
                        break;
                }else{      //不能移动了,就说明到底部了,把当前方块加入到障碍物里面
                        jifen=jiaru()+jifen;
                        nd=nd*19/20;//放假了心静不下来,不想搞了,简单处理
                        shenchan();
                }      
                n=get_c();//从键盘区获取一个功能键状态-1失败0左移 1下移动 2右移动 3变型 4暂停
                switch(n){
                        case -1:;break;//非法移动
                        case 4://暂停
                              zanting();
                              break;      
                        case 3:
                              bianxing(&dqxz);
                              sfch=1;
                              break;//变型
                        
                        default: //移动
                              yidong(n);
                              sfch=1;
                              break;      
                }
      }

      return 0;
}



WP叶超 发表于 2017-10-5 16:37:52

写在主函数后面的函数需要在主函数里面先声明一下的吧 ...{:10_254:}

还差几 发表于 2017-10-5 18:49:22

WP叶超 发表于 2017-10-5 16:37
写在主函数后面的函数需要在主函数里面先声明一下的吧 ...

没用

jamespp 发表于 2017-10-8 16:21:39

{:5_93:}

橙C 发表于 2017-10-9 17:14:54

如图所示

tttb 发表于 2017-10-9 23:02:41

函数声明的定义不是一回事,调用的时候不需要int

还差几 发表于 2018-3-17 17:15:44

朋友

还差几 发表于 2018-3-17 17:16:22

匹配
页: [1]
查看完整版本: 为什么函数无法调用