Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Exemple de code pour une �quipe p
- ; C'est ce fichier que vous devez remplir
- ;
- ; BUG
- ; Si sur Case Noire des autres côtés, il va en face, et y reste
- ;
- ;
- ;
- ;
- globals [
- p_team ;tous les agents de mon �quipe
- liste_marquage
- position_depart
- base_occupee
- marque
- liste_bas
- liste_colonne
- liste_end
- ]
- ;code du comportement de mon �quipe
- to p_run
- ask p_team [
- ; Initialisation
- if ticks = 0 [
- ; Liste indiquant au robot qu'il est en bas
- set liste_bas n-values 20 [false]
- ; Liste indiquant au robot qu'il a fini
- set liste_end n-values 20 [false]
- if color = blue [
- ; Liste des positions des robots en colonne
- set liste_colonne []
- ; -1 pour les 3 premiers. Ces 3 la, iront bloquer les bases adverses
- foreach [-1 -1 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16] [
- let temp min-pxcor + bordure + ?
- set liste_colonne lput temp liste_colonne
- ]
- ]
- ]
- ; Si le robot a une boite
- ifelse charge [
- let l direction_base
- ifelse l != false [
- ifelse direction_base != [-1 0] [
- let px item 0 l
- let py item 1 l
- deposer_boite px py
- ]
- [
- let d2 targeted xcor (ycor - 1)
- if d2 != false [
- move_to item 0 d2 item 1 d2
- ]
- ]
- ]
- [
- to_base
- ]
- ]
- ; Si le robot n'a pas de charge
- [
- let ind (id)
- let val item ind liste_end
- ifelse val = true [
- ifelse precision xcor 0 != (min-pxcor + id) and precision ycor 0 != (max-pycor - 3) [
- let d_end targeted (15 + id) (max-pycor - 3)
- if d_end != false [
- move_to item 0 d_end item 1 d_end
- ]
- ]
- [
- ]
- ]
- [
- let i id
- ;print i
- let v item i liste_colonne
- ifelse v = (min-pxcor + bordure - 1) [
- if i = 0 [
- let b item 1 bases
- ifelse precision xcor 0 != item 1 b and precision ycor 0 != item 2 b [
- let d_base targeted item 1 b item 2 b
- ifelse d_base != false [
- move_to item 0 d_base item 1 d_base
- ]
- [
- move_alea
- ]
- ]
- [
- ]
- ]
- if i = 1 [
- let b item 2 bases
- ifelse precision xcor 0 != item 1 b and precision ycor 0 != item 2 b [
- let d_base targeted item 1 b item 2 b
- ifelse d_base != false [
- move_to item 0 d_base item 1 d_base
- ]
- [
- move_alea
- ]
- ]
- [
- ]
- ]
- if i = 2 [
- let b item 3 bases
- ifelse precision xcor 0 != item 1 b and precision ycor 0 != item 2 b [
- let d_base targeted item 1 b item 2 b
- ifelse d_base != false [
- move_to item 0 d_base item 1 d_base
- ]
- [
- move_alea
- ]
- ]
- [
- ]
- ]
- ]
- [
- ; Sil est dans une zone noire
- ifelse [pcolor] of patch-here = black [
- ; Si il n'est pas à la position qu'on lui a indiqué
- ifelse precision xcor 0 != item (id) liste_colonne and precision ycor 0 != (max-pycor - bordure + 1)[
- let d targeted (item (id) liste_colonne) (max-pycor - bordure + 1)
- if d != false [
- move_to item 0 d item 1 d
- ]
- ]
- ; Sinon il peut retourner dans la zone blanche
- [
- let d2 targeted xcor (ycor - 1)
- if d2 != false [
- move_to item 0 d2 item 1 d2
- ]
- ;set heading position_depart
- let index (id)
- ; On indique qu'il n'est plus en bas
- set liste_bas replace-item index liste_bas false
- ]
- if precision ycor 0 <= (min-pycor + bordure) and item id liste_bas = false [
- let index (id)
- set liste_bas replace-item index liste_bas true
- let temp item index liste_colonne
- let new temp + 20
- ifelse new > (max-pxcor - bordure) [
- set liste_end replace-item index liste_end true
- ]
- [
- set liste_colonne replace-item index liste_colonne new
- ]
- ]
- ]
- [
- let l accessible_boxes
- ifelse not empty? l [
- let x item 0 l
- let px item 0 x
- let py item 1 x
- prendre_boite px py
- ]
- [
- ifelse item id liste_bas = true [
- let d2 targeted item (id) liste_colonne (max-pycor - bordure + 1)
- if d2 != false [
- move_to item 0 d2 item 1 d2
- ]
- ]
- [
- let d2 targeted xcor (min-pycor + bordure - 1)
- ifelse d2 != false [
- move_to item 0 d2 item 1 d2
- ]
- [
- let listeDirection direction_free
- let dir item 0 listeDirection
- let dirX item 0 dir
- let dirY item 1 dir
- move_to dirX dirY
- ]
- ]
- ]
- ]
- ]
- ]
- ]
- ]
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement