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.
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
Post a Comment