c++ - Checking for collision -


i'm coding game our final project in our major using allegro issues collision. game battleships , did after loading screen, screen appear wherein can select coordinates of ships using arrow keys , lock space bar. , if coordinates chose occupied space bar doesn't work.

my problem can't check ships' length , width collision before placing. ships length , width considered when you've placed ship , next ship can overlap other ships. i've tried issues. , not part of grid cannot chosen though it's empty.

void shipplacement(){   //something cursor ship placement  shipx = 0;  shipy = 0;   while(!placed)  {  allegro_event ev;  al_wait_for_event(prepqueue, &ev);    if(ev.type == allegro_event_key_down) {      switch(ev.keyboard.keycode) {         case allegro_key_up:            key[key_up] = true;            break;          case allegro_key_down:            key[key_down] = true;            break;          case allegro_key_left:             key[key_left] = true;            break;          case allegro_key_right:            key[key_right] = true;            break;          case allegro_key_space:         xcheck();  // checks coordinates of ship controlled         tst();     // checks collision , if space bar should work            break;      }   }    else if(ev.type == allegro_event_key_up) {      switch(ev.keyboard.keycode) {         case allegro_key_up:            key[key_up] = false;            break;          case allegro_key_down:            key[key_down] = false;            break;          case allegro_key_left:             key[key_left] = false;            break;          case allegro_key_right:            key[key_right] = false;            break;            }            }    if(redraw && al_is_event_queue_empty(prepqueue)){       if (shippl[1]){          //redraw background , draw "selector"          }       else if (shippl[2]){         //redraw background , draw new "selector" , placed ship.          }       else if (shippl[3]){          //redraw background , draw new "selector" , placed ships.          }       else if (shippl[4]){          //redraw background , draw new "selector" , placed ships.          }       else if (shippl[5]){         //redraw background , draw new "selector" , placed ships.          }  redraw = false;  al_flip_display();}     }    }        void tst(){        if(logic == 0){                                              makeittrue();                                              shippl[count] = false;                                              shipfx[count] = shipx;                                              shipfy[count] = shipy;                                              count++;                                              logic++;                                              shipx = 0;                                              shipy = 0;                                              }          else if(logic == 1){                     if(!s1[xholder][yholder] && !s1[xholder][y2] && !s1[xholder][y3] && !s1[xholder][y4]){                                               makeittrue();                                              shippl[count] = false;                                              shipfx[count] = shipx;                                              shipfy[count] = shipy;                                              count++;                                              logic++;                                              shipx = 0;                                              shipy = 0;                                              }                     }         else if(logic == 2){                     if(!s2[xholder][yholder] && !s2[xholder][y2] && !s2[xholder][y3] && !s1[xholder][yholder] && !s1[xholder][y2] && !s1[xholder][y3] && !s1[xholder][y4]){                                               makeittrue();                                              shippl[count] = false;                                              shipfx[count] = shipx;                                              shipfy[count] = shipy;                                              count++;                                              logic++;                                              shipx = 0;                                              shipy = 0;                                              }                     }         else if(logic == 3){                     if(!s3[xholder][yholder] && !s3[x2][yholder] && !s3[x3][yholder] && !s2[xholder][yholder] && !s2[xholder][y2] && !s2[xholder][y3] && !s1[xholder][yholder] && !s1[xholder][y2] && !s1[xholder][y3] && !s1[xholder][y4]){                                               makeittrue();                                              shippl[count] = false;                                              shipfx[count] = shipx;                                              shipfy[count] = shipy;                                              count++;                                              logic++;                                              shipx = 0;                                              shipy = 0;                                              }                     }         else if(logic == 4){                     if(!s4[xholder][yholder] && !s4[xholder][y2] && !s3[xholder][yholder] && !s3[x2][yholder] && !s3[x3][yholder] && !s2[xholder][yholder] && !s2[xholder][y2] && !s2[xholder][y3] && !s1[xholder][yholder] && !s1[xholder][y2] && !s1[xholder][y3] && !s1[xholder][y4]){                                               makeittrue();                                              shippl[count] = false;                                              shipfx[count] = shipx;                                              shipfy[count] = shipy;                                              count++;                                              logic++;                                              shipx = 0;                                              shipy = 0;                                              }                     }         }   void makeittrue(){       // s1 ship1 length of 4 blocks       // s2 ship2 length of 3 blocks       // s3 ship3 width of 3 blocks       // s4 ship4 length of 2 blocks       // s5 ship5 width of 2 blocks       if(count == 1){                y2 = yholder + 1;                y3 = yholder + 2;                y4 = yholder + 3;       s1[xholder][yholder] = true;       s1[xholder][y2] = true;       s1[xholder][y3] = true;       s1[xholder][y4] = true;       placeflag[xholder][yholder] = true;       placeflag[xholder][y2] = true;       placeflag[xholder][y3] = true;       placeflag[xholder][y4] = true;       }        else if(count == 2){                y2 = yholder + 1;                y3 = yholder + 2;       s2[xholder][yholder] = true;       s2[xholder][y2] = true;       s2[xholder][y3] = true;       placeflag[xholder][yholder] = true;       placeflag[xholder][y2] = true;       placeflag[xholder][y3] = true;       }        else if(count == 3){                x2 = xholder + 1;                x3 = xholder + 2;       s3[xholder][yholder] = true;       s3[x2][yholder] = true;       s3[x3][yholder] = true;       placeflag[xholder][yholder] = true;       placeflag[x2][yholder] = true;       placeflag[x3][yholder] = true;       }        else if(count == 4){                y2 = yholder + 1;       s4[xholder][yholder] = true;       s4[xholder][y2] = true;       placeflag[xholder][yholder] = true;       placeflag[xholder][y2] = true;       }        else if(count == 5){                x2 = xholder + 1;       s5[xholder][yholder] = true;       s5[x2][yholder] = true;       placeflag[xholder][yholder] = true;       placeflag[x2][yholder] = true;       }          } 

please me. i'm out of ideas.

edit

forgot mention grid 10x10.

sample of happens

note: used ff ship sprites cause haven't finished creating own.

so seems needed take break coding. managed fix making separate variables each ship can check each part of accurately , avoid overloading variable.


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -