C战舰,随机发货

时间:2016-06-11 15:26:47

标签: c

所以,我正在制作用户与计算机战舰游戏,使用10x10阵列作为主板。我想在船上随机放置两艘船(一个尺寸为5个阵列,另一个尺寸为4个)。我做的是随机生成0或1,0是垂直放置,1是水平放置。然后使用while循环我检查生成的数字是否适合板和大小为4的船上我还必须检查生成的数字是否已用于第一艘船。我使用单独的功能做到了这一点。当一艘船垂直放置时,该程序会出现问题,我无法弄清楚原因。当它垂直放置时,它只能制造一艘尺寸为3的船。 这是代码:

   void startShips(int ships[][2]){
        srand(time(NULL));
        int n1,n2;
        n1 = rand()%2;
        n2 = rand()%2;
        //0=vertical, 1=horizontal

            if(n1==0){
                do{
                ships[0][0]= rand()%10;
                ships[0][1]= rand()%10;
                ships[1][0]= ships[0][0]+1;
                ships[1][1]= ships[0][1];
                ships[2][0]= ships[0][0]+2;
                ships[2][1]= ships[0][1];
                ships[3][0]= ships[0][0]+3;
                ships[3][1]= ships[0][1];
                ships[4][0]= ships[0][0]+4;
                ships[4][1]= ships[0][1];
                }while(ships[4][0]>9);
            }
            if(n1==1){
                do{
                ships[0][0]= rand()%10;
                ships[0][1]= rand()%10;
                ships[1][0]= ships[0][0];
                ships[1][1]= ships[0][1]+1;
                ships[2][0]= ships[0][0];
                ships[2][1]= ships[0][1]+2;
                ships[3][0]= ships[0][0];
                ships[3][1]= ships[0][1]+3;
                ships[4][0]= ships[0][0];
                ships[4][1]= ships[0][1]+4;
                }while(ships[4][1]>9);
            }

             if(n2==0){
                do{
                ships[5][0]= rand()%10;
                ships[5][1]= rand()%10;
                ships[6][0]= ships[5][0]+1;
                ships[6][1]= ships[5][1];
                ships[7][0]= ships[5][0]+2;
                ships[7][1]= ships[5][1];
                ships[8][0]= ships[5][0]+3;
                ships[8][1]= ships[0][1];
                }while((ships[8][0]>9) ||
                       (checkShip(ships)==1)
                    );
            }
            if(n2==1){
                do{
                ships[5][0]= rand()%10;
                ships[5][1]= rand()%10;
                ships[6][0]= ships[5][0];
                ships[6][1]= ships[5][1]+1;
                ships[7][0]= ships[5][0];
                ships[7][1]= ships[5][1]+2;
                ships[8][0]= ships[5][0];
                ships[8][1]= ships[0][1]+3;
                }while((ships[8][1]>9) ||
                        (checkShip(ships)==1)
                       );
            }

    }
int checkShip(int ships[][2]){
    int i;
    for(i=0;i<5 ; i++){
        if((ships[5][0]==ships[i][0])&&(ships[5][1]==ships[i][1])){
            return 1;
            break;}
        }
        for(i=0;i<5 ; i++){
        if((ships[6][0]==ships[i][0])&&(ships[6][1]==ships[i][1])){
            return 1;
            break;}
        }
        for(i=0;i<5 ; i++){
        if((ships[7][0]==ships[i][0])&&(ships[7][1]==ships[i][1])){
            return 1;
            break;}
        }
        for(i=0;i<5 ; i++){
        if((ships[8][0]==ships[i][0])&&(ships[8][1]==ships[i][1])){
            return 1;
            break;}
        }

        return 0;
}

1 个答案:

答案 0 :(得分:1)

您的垂直处理似乎有错字

   ...
   ships[7][1]= ships[5][1];
   ships[8][0]= ships[5][0]+3;
   ships[8][1]= ships[0][1];
                     ^^^^^^^