搜索
查看: 782|回复: 10
打印 上一主题 下一主题

这个游戏哪里错了?求助……

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2018-8-11 19:23:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
16啊哈币
返回了错误collect2.exe: error: ld returned 1 exit status请大神帮看看有什么错误……

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>


void duan_body (char plays[][20],int body_direction[],int *error)  //短身体函数,用来缩短蛇身
{
        short int end=0;
        while(body_direction[end]!=-1)  //确定方向数组里的结尾
            end=end+1;
        plays[body_direction[end-2]][body_direction[end-1]]=32;  //缩短身体
        body_direction[end-3]=body_direction[end-3]-1;           //缩短最后的长度
       
        switch(end-4)
        {
            case 0:
                    body_direction[end-1]=body_direction[end-1]-1;  //这里是对结尾的重新定义,方向是0上1右2下3左
                    break;
            case 1:
                    body_direction[end-2]=body_direction[end-2]-1;
                    break;                                          //由于是从蛇头算的方向,所以这里反过来
            case 2:
                    body_direction[end-1]=body_direction[end-1]+1;
                    break;
            case 3:
                    body_direction[end-2]=body_direction[end-2]+1;
                    break;
            default:
                    *error=1;
                    break;
    }
                   
        if (body_direction[end-3]==1)
        {
            body_direction[end-4]=body_direction[end-2];
            body_direction[end-3]=body_direction[end-1];   //如果最后的长度为一,删除最后的方向数据
            body_direction[end-1]=body_direction[end]=0;
            body_direction[end-2]=-1;
        }
                    
                   
}

void wave_body (char plays[][20],int body_direction[],char *direction,int *over,int *error,int *food)  //移动身体函数,用于移动身体
{
        short int x,y;
        x=body_direction[0];
        y=body_direction[1];
        plays[x][y]='★';
       
        switch((int)direction)
        {
            case 119:
                    if(plays[x][y+1]=='■'||plays[x][y+1]=='★')
                        over=1;
                    else if(plays[x][y+1]==32||plays[x][y+1]=='⊙')
                    {
                        plays[x][y+1]='☆';
                        body_direction[3]=body_direction[3]+1;
                        body_direction[1]=body_direction[1]+1;
                        if(plays[x][y+1]==32)
                            duan_body(plays,body_direction,&error);
                        else
                            food=1;
                }
                break;
            case 97:
                    if(plays[x-1][y]=='■'||plays[x-1][y]=='★')
                        over=1;
                    else if(plays[x-1][y]==32||plays[x-1][y]=='⊙')
                    {
                        plays[x-1][y]='☆';
                        body_direction[3]=body_direction[3]+1;
                        body_direction[0]=body_direction[0]-1;
                        if(plays[x-1][y]==32)
                            duan_body(plays,body_direction,&error);
                        else
                            food=1;
                }
                break;
            case 115:
                    if(plays[x][y-1]=='■'||plays[x][y-1]=='★')
                        over=1;
                    else if(plays[x][y-1]==32||plays[x][y-1]=='⊙')
                    {
                        plays[x][y-1]='☆';
                        body_direction[3]=body_direction[3]+1;
                        body_direction[1]=body_direction[1]-1;
                        if(plays[x][y-1]==32)
                            duan_body(plays,body_direction,&error);
                        else
                            food=1;
                }
                break;
            case 100:
                    if(plays[x+1][y]=='■'||plays[x+1][y]=='★')
                        over=1;
                    else if(plays[x+1][y]==32||plays[x+1][y]=='⊙')
                    {
                        plays[x+1][y]='☆';
                        body_direction[3]=body_direction[3]+1;
                        body_direction[0]=body_direction[0]+1;
                        if(plays[x+1][y]==32)
                            duan_body(plays,body_direction,&error);
                        else
                            food=1;
                }
                break;
            default:
                    error=1;
                    break;
        }
}

int main()
{
       
        char welcome[20][20]={
        "■■■■■■■■■■■■■■■■■■■■",
        "■                                    ■",
        "■  贪吃蛇                        ■",
        "■                                    ■",
        "■                                    ■",
        "■      1:开始                  ■",
        "■                                    ■",
        "■             0:退出           ■",
        "■                                    ■",
        "■            使用wasd控制  ■",
        "■                                    ■",  //对于开始界面的定义
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
    "■■■■■■■■■■■■■■■■■■■■",
        };
        char playsTemplate[20][20]={
        "■■■■■■■■■■■■■■■■■■■■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■            ☆★★                ■",
        "■                                    ■",  //对于游戏模板的定义
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
        "■                                    ■",
    "■■■■■■■■■■■■■■■■■■■■",
        };
        char plays[20][20]={0};
        short int body_direction[40]={8,10,1,3,10,10,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
        char begin,direction,replay;             //各种定义,上面那个长的是对蛇身全部的描述
        short int error,over,x,y,food;           //描述格式是前两个是蛇头的坐标,然后是方向1,长度1,方向2……-1是结束符,它前两个是蛇尾的坐标
        food=error=over=0;                       //PS:坐标以plays[0][0]为(1,1)
       
        for(x=0;x<20;x++)
            printf("%s\n",welcome[x]);
        srand((unsigned)time(NULL));
        begin=getch();
       
        if(begin=='1')
        {
                do{
                    system("cls");
                    for(x=0;x<20;x++)
                {
                        for(y=0;y<20;y++)
                            plays[x][y]=playsTemplate[x][y];
                }
            for(x=0;x<20;x++)
                printf("%s\n",plays[x]);
            direction=getch();
            direction='a';
            y=0;
            while(over!=0)
            {
                    if(kbhit())
                        direction=getch();
                    wave_body(plays,body_direction,&direction,&over,&error,&food);
                    if(error==1)
                        break;
                    Sleep(500);
                    system("cls");
                    for(x=0;x<20;x++)
                    printf("%s\n",plays[x]);
                if(food==1)
                {
                        plays[rand()%18+2][rand()%18+2]='⊙';
                        food=0;
                                }
                    }
                system("cls");
                if(over==1)
                        printf("\n\n\n\n\n\n\n\n\n 不好意思,您输了,摁0退出,摁1重新开始");
                else
                        printf("\n\n\n\n\n\n\n\n\n 出现错误!摁0退出,摁1重新开始");
                replay=getch();
            }while(replay==1);
        }


        system("cls");
        preintf("再见\n");
        system("pause");
        return 0;
}


最佳答案

查看完整内容

你把最后一个printf写成了preintf
沙发
发表于 2018-8-11 19:23:48 | 只看该作者
你把最后一个printf写成了preintf
板凳
发表于 2018-8-11 19:27:31 | 只看该作者
您好,这个错误提示产生的原因是您把程序生成了2遍,请再次检查您是不是已经生成了一个程序
地板
 楼主| 发表于 2018-8-11 19:32:34 | 只看该作者
熊呵呵呵呵 发表于 2018-8-11 19:27
您好,这个错误提示产生的原因是您把程序生成了2遍,请再次检查您是不是已经生成了一个程序

我已经关机再开两三次了,还是没有用,文件夹目录下也没有其他程序,请问该如何解决……
5#
发表于 2018-8-11 19:46:02 | 只看该作者
阿陶 发表于 2018-8-11 19:32
我已经关机再开两三次了,还是没有用,文件夹目录下也没有其他程序,请问该如何解决……

抱歉,我也没看出来有什么错误
6#
发表于 2018-8-12 15:21:03 | 只看该作者
用的是什么编译器啊,不推荐用啊哈c编写大型程序。
7#
 楼主| 发表于 2018-8-12 19:17:07 | 只看该作者
孤笙 发表于 2018-8-12 15:21
用的是什么编译器啊,不推荐用啊哈c编写大型程序。

用的Dev-C++的C语言编译……
8#
发表于 2018-8-13 10:10:11 | 只看该作者
但是编译成功后的程序:C:\Users\蒙召\Desktop\360截图16520815119143158.png

360截图16520815119143158.png (39.5 KB, 下载次数: 7)

360截图16520815119143158.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表