From 6a8ac7814cc98298f02a2a41364640b2b2e8d9e5 Mon Sep 17 00:00:00 2001 From: "goprife@gmail.com" Date: Sat, 24 Nov 2012 05:56:16 +0000 Subject: [PATCH] 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 --- bsp/simulator/snake/snake.c | 10 +++++++--- bsp/simulator/snake/snake_gui.c | 11 ++++++++--- 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); } -- GitLab