summaryrefslogtreecommitdiffhomepage
path: root/digital/io-hub/src/robospierre
diff options
context:
space:
mode:
authorJérôme Jutteau2011-06-03 15:25:58 +0200
committerNicolas Schodet2011-06-03 13:33:07 +0200
commitd1e8794ecc6f837ee84e3a2a50bcca1ab3eaa565 (patch)
treeebc7d81cdbc44a8d1f90d4429ce6a45df218996a /digital/io-hub/src/robospierre
parent1fb8f5180fa0dd78327cfc1d51296ecfa3da9737 (diff)
digital/io-hub: i like green (and tests)
Diffstat (limited to 'digital/io-hub/src/robospierre')
-rw-r--r--digital/io-hub/src/robospierre/element.c26
-rw-r--r--digital/io-hub/src/robospierre/element.h4
-rw-r--r--digital/io-hub/src/robospierre/test_element.c27
3 files changed, 55 insertions, 2 deletions
diff --git a/digital/io-hub/src/robospierre/element.c b/digital/io-hub/src/robospierre/element.c
index ae84bd20..18a3e4bd 100644
--- a/digital/io-hub/src/robospierre/element.c
+++ b/digital/io-hub/src/robospierre/element.c
@@ -164,8 +164,11 @@ element_init ()
if (!((team_color == TEAM_COLOR_LEFT && (e.attr & ELEMENT_LEFT)) ||
(team_color == TEAM_COLOR_RIGHT && (e.attr & ELEMENT_RIGHT))))
{
- e.bonus_load *= -1;
- element_set (i, e);
+ if (e.bonus_load > 0)
+ {
+ e.bonus_load *= -1;
+ element_set (i, e);
+ }
}
}
}
@@ -771,3 +774,22 @@ element_blocking_path (vect_t a, vect_t b, int16_t ab)
}
return 0;
}
+
+void
+element_i_like_green ()
+{
+ /* Negative bonus for the other green zone at start. */
+ /* Do not touch last green emplacement. */
+ int i;
+ for (i = ELEMENT_GREEN_START; i <= ELEMENT_GREEN_END - 2; i++)
+ {
+ element_t e = element_get (i);
+ if (!((team_color == TEAM_COLOR_LEFT && (e.attr & ELEMENT_LEFT)) ||
+ (team_color == TEAM_COLOR_RIGHT && (e.attr & ELEMENT_RIGHT)))
+ && e.bonus_load < 0)
+ {
+ e.bonus_load = 10;
+ element_set (i, e);
+ }
+ }
+}
diff --git a/digital/io-hub/src/robospierre/element.h b/digital/io-hub/src/robospierre/element.h
index 8366907b..9464c1f9 100644
--- a/digital/io-hub/src/robospierre/element.h
+++ b/digital/io-hub/src/robospierre/element.h
@@ -201,4 +201,8 @@ element_blocking (uint8_t element_id);
uint8_t
element_blocking_path (vect_t a, vect_t b, int16_t ab);
+/** Ask to adjust score for the opposed green zone. */
+void
+element_i_like_green ();
+
#endif /* element_h */
diff --git a/digital/io-hub/src/robospierre/test_element.c b/digital/io-hub/src/robospierre/test_element.c
index 8c93e876..e200902a 100644
--- a/digital/io-hub/src/robospierre/test_element.c
+++ b/digital/io-hub/src/robospierre/test_element.c
@@ -32,6 +32,8 @@
#define TEST_PRINT_TYPE_SCORE_PICK 0
#define TEST_PRINT_TYPE_SCORE_UNLOAD 1
#define TEST_PRINT_TYPE_ELEMENT 2
+#define TEST_PRINT_TYPE_BONUS_UNLOAD 3
+#define TEST_PRINT_TYPE_BONUS_LOAD 4
int test_print_type_ = TEST_PRINT_TYPE_SCORE_PICK;
position_t test_robot_pos_ = {{0, 2100}, 1};
@@ -189,6 +191,16 @@ test_element_get_score (uint8_t element_id)
return (long int) element_score (test_robot_pos_, element_id);
else if (test_print_type_ == TEST_PRINT_TYPE_SCORE_UNLOAD)
return (long int) element_unload_score (test_robot_pos_, element_id);
+ else if (test_print_type_ == TEST_PRINT_TYPE_BONUS_LOAD)
+ {
+ element_t e = element_get (element_id);
+ return (long int) e.bonus_load;
+ }
+ else if (test_print_type_ == TEST_PRINT_TYPE_BONUS_UNLOAD)
+ {
+ element_t e = element_get (element_id);
+ return (long int) e.bonus_unload;
+ }
else
return (long int) element_table[element_id].type;
}
@@ -253,7 +265,9 @@ int main ()
element_init ();
printf ("\ncommands:\n");
printf ("s: print scores, ");
+ printf ("a: print load bonus, ");
printf ("p: print unload scores, ");
+ printf ("z: print unload bonus, ");
printf ("e: print elements, ");
printf ("t: set match time, ");
printf ("c: set robot side, ");
@@ -262,6 +276,7 @@ int main ()
printf ("n: indicate there is no element, ");
printf ("m: id of nearest element, ");
printf ("g: get position and angle of desired element,");
+ printf ("u: call I like green,");
printf ("q: quit\n");
printf ("your choice: ");
fflush (stdin);
@@ -272,10 +287,18 @@ int main ()
test_print_type_ = TEST_PRINT_TYPE_SCORE_PICK;
test_element_print_table ();
break;
+ case 'a':
+ test_print_type_ = TEST_PRINT_TYPE_BONUS_LOAD;
+ test_element_print_table ();
+ break;
case 'p':
test_print_type_ = TEST_PRINT_TYPE_SCORE_UNLOAD;
test_element_print_table ();
break;
+ case 'z':
+ test_print_type_ = TEST_PRINT_TYPE_BONUS_UNLOAD;
+ test_element_print_table ();
+ break;
case 'e':
test_print_type_ = TEST_PRINT_TYPE_ELEMENT;
test_element_print_table ();
@@ -337,6 +360,10 @@ int main ()
vect_t pos = element_get_pos (x);
printf ("x: %u y: %u\n", pos.x, pos.y);
break;
+ case 'u':
+ printf ("call I like green ...");
+ element_i_like_green ();
+ break;
case 'q':
exit = 1;
break;