From ee28c8d71197fb705fba9b1301aa0bd03f3a7f86 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Thu, 17 Sep 2009 21:05:35 +0000 Subject: Wormlet: Fix food and argh possibly overlapping each other. Flyspray: FS#10589 Author: Asael Reiter git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22724 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/wormlet.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) (limited to 'apps') diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c index 4d86453178..3f67e61857 100644 --- a/apps/plugins/wormlet.c +++ b/apps/plugins/wormlet.c @@ -348,6 +348,8 @@ CONFIG_KEYPAD == MROBE500_PAD #define COLOR_BG LCD_RGBPACK(181, 199, 231) #endif +#define CHECK_SQUARE_COLLISION(x1,y1,s1,x2,y2,s2) (x1+s1>x2)&&(x2+s2>x1)&&(y1+s1>y2)&&(y2+s2>y1) + /** * All the properties that a worm has. */ @@ -830,21 +832,19 @@ static void make_food(int index) the entire food lies within the FIELD */ x = rb->rand() % (FIELD_RECT_WIDTH - food_size); y = rb->rand() % (FIELD_RECT_HEIGHT - food_size); - + collisionDetected = false; /* Ensure that the new food doesn't collide with any existing foods or arghs. - If one or more corners of the new food hit any existing + If the new food hit any existing argh or food a collision is detected. */ - collisionDetected = - food_collision(x , y ) >= 0 || - food_collision(x , y + food_size - 1) >= 0 || - food_collision(x + food_size - 1, y ) >= 0 || - food_collision(x + food_size - 1, y + food_size - 1) >= 0 || - argh_collision(x , y ) >= 0 || - argh_collision(x , y + food_size - 1) >= 0 || - argh_collision(x + food_size - 1, y ) >= 0 || - argh_collision(x + food_size - 1, y + food_size - 1) >= 0; + + for (i=0; irand() % (FIELD_RECT_WIDTH - argh_size); y = rb->rand() % (FIELD_RECT_HEIGHT - argh_size); - + collisionDetected = false; /* Ensure that the new argh doesn't intersect with any existing foods or arghs. - If one or more corners of the new argh hit any existing + If the new argh hit any existing argh or food an intersection is detected. */ - collisionDetected = - food_collision(x , y ) >= 0 || - food_collision(x , y + argh_size - 1) >= 0 || - food_collision(x + argh_size - 1, y ) >= 0 || - food_collision(x + argh_size - 1, y + argh_size - 1) >= 0 || - argh_collision(x , y ) >= 0 || - argh_collision(x , y + argh_size - 1) >= 0 || - argh_collision(x + argh_size - 1, y ) >= 0 || - argh_collision(x + argh_size - 1, y + argh_size - 1) >= 0; + + for (i=0; i