summaryrefslogtreecommitdiff
path: root/bsp/simulator
diff options
context:
space:
mode:
author[email protected] <[email protected]>2012-11-24 05:56:16 +0000
committer[email protected] <[email protected]>2012-11-24 05:56:16 +0000
commit6a8ac7814cc98298f02a2a41364640b2b2e8d9e5 (patch)
tree562b43ae96c258016c444a75cda03c5ebd4bbf29 /bsp/simulator
parent90c3859e32704c6a5930ed52ce7634b5db70654d (diff)
fix bug in snake (bsp/simulator) with patch by provided by Romeo(xeonrun@@gmail.com)
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2444 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'bsp/simulator')
-rw-r--r--bsp/simulator/snake/snake.c10
-rw-r--r--bsp/simulator/snake/snake_gui.c11
2 files changed, 15 insertions, 6 deletions
diff --git a/bsp/simulator/snake/snake.c b/bsp/simulator/snake/snake.c
index a3ec774459..ae25352d14 100644
--- a/bsp/simulator/snake/snake.c
+++ b/bsp/simulator/snake/snake.c
@@ -10,7 +10,7 @@
}while(0)
rt_list_t snake_head;
-SNAKE_DIR prevdir;
+SNAKE_DIR prevdir, newdir;
static SNAKE_DIR dir_adjust(SNAKE_DIR dir)
{
@@ -20,14 +20,14 @@ static SNAKE_DIR dir_adjust(SNAKE_DIR dir)
|| (SNAKE_DIR_RIGHT == prevdir && SNAKE_DIR_LEFT != dir)
)
{
- prevdir = dir;
+ newdir = dir;
}
else
{
rt_kprintf("dirction change error\n\r");
}
- return prevdir;
+ return newdir;
}
static void across_XY(point_t *node, const map_t *map)
@@ -77,6 +77,10 @@ static SYS_STE node_update(snake_t *tail, const point_t *node, map_t *map)
}
map->range[node->y * map->width + node->x] = OVER;
+
+ if (ret != OVER)
+ prevdir = newdir;
+
return ret;
}
diff --git a/bsp/simulator/snake/snake_gui.c b/bsp/simulator/snake/snake_gui.c
index 8cbf5a9526..6e0ba91cd4 100644
--- a/bsp/simulator/snake/snake_gui.c
+++ b/bsp/simulator/snake/snake_gui.c
@@ -324,11 +324,16 @@ static rt_bool_t event_handler(struct rtgui_object *object, rtgui_event_t *event
static void timeout(struct rtgui_timer *timer, void *parameter)
{
struct rtgui_widget *widget;
-
+ SYS_STE ret;
+
if (!map)
return;
- if (snake_step(run_state, map) == FOOD)
+ ret = snake_step(run_state, map);
+ if (OVER == ret)
+ return;
+
+ if (FOOD == ret)
{
snake_len++;
if (snake_len >= (map->width * map->height) / 3)
@@ -350,7 +355,7 @@ static void timeout(struct rtgui_timer *timer, void *parameter)
food_init(map, 1);
}
-
+
widget = RTGUI_WIDGET(parameter);
snake_update(widget);
}