diff --git a/rsiTurtle.lua b/rsiTurtle.lua index 166a8678464b08605ce4a607f97753a4def180aa..d8e4f85b224165d782375e3085ec87de01358548 100644 --- a/rsiTurtle.lua +++ b/rsiTurtle.lua @@ -35,7 +35,7 @@ function RSI_Turtle:init() --- -- \brief Orientation de la tortue en cadrant horloge: - -- 0: Avant + -- 0: Avant -- 3: Droite -- 6: Arrière -- 9: Gauche @@ -66,25 +66,76 @@ function RSI_Turtle:print() end end + +--- +-- \brief Déplacement parallèle au sol +function RSI_Turtle:moveTo(x, y) + --TODO: Implementer +end + + +--- +-- \brief Déplacement dans les trois dimensions +function RSI_Turtle:moveTo(x, y, z) + --TODO: Implementer +end + + --- -- \brief Déplacement s'assurant de rester au niveau du sol -- escalade et descend automatiquement les pentes -function RSI_Turtle:moveGround(dx, dy) +function RSI_Turtle:moveToGrounded(x, y) --TODO: Implementer end + --- -- \brief Déplacement parallèle au sol +-- \return bool Succès function RSI_Turtle:move(dx, dy) - --TODO: Implementer + if dx >= 0 + then + self:face_(12) + else + self:face_(6) + end + for i=1,dx,1 + do + self:forward() + end + + if (dx <= 0 and dy >= 0) or (dx >= 0 and dy <= 0) + then + self:turnLeft() + else + self:turnRight() + end + + for i=1,dy,1 + do + self:forward() + end + end + --- -- \brief Déplacement dans les trois dimensions +-- \return bool Succès function RSI_Turtle:move(dx, dy, dz) --TODO: Implementer end + +--- +-- \brief Déplacement s'assurant de rester au niveau du sol +-- escalade et descend automatiquement les pentes +-- \return bool Succès +function RSI_Turtle:moveGrounded(dx, dy) + --TODO: Implementer +end + + --- -- \brief Tourne la tortue face à la direction voulue. -- \param Orientation en heures (3, 6, 9, 12) @@ -112,30 +163,66 @@ end -- \brief Déplacement avant -- \return bool Succès function RSI_Turtle:forward() - --TODO: Implementer + turtle.forward() + + if self.facing_ == 0 then + self.pos_["x"] = self.pos_["x"] + 1 + elseif self.facing_ == 3 then + self.pos_["y"] = self.pos_["y"] + 1 + elseif self.facing_ == 6 then + self.pos_["x"] = self.pos_["x"] - 1 + elseif self.facing_ == 9 then + self.pos_["y"] = self.pos_["y"] - 1 + end + end --- -- \brief Déplacement arrière -- \return bool Succès function RSI_Turtle:backward() - --TODO: Implementer + result = turtle.backward() + + if result then + if self.facing_ == 0 then + self.pos_["x"] = self.pos_["x"] - 1 + elseif self.facing_ == 3 then + self.pos_["y"] = self.pos_["y"] - 1 + elseif self.facing_ == 6 then + self.pos_["x"] = self.pos_["x"] + 1 + elseif self.facing_ == 9 then + self.pos_["y"] = self.pos_["y"] + 1 + end + end + return result end --- -- \brief Déplacement haut -- \return bool Succès function RSI_Turtle:up() - --TODO: Implementer + result = turtle.up() + + if result then + self.pos_["z"] = self.pos_["z"] + 1 + end + return result end + --- -- \brief Déplacement bas -- \return bool Succès function RSI_Turtle:down() - --TODO: Implementer + result = turtle.down() + + if result then + self.pos_["z"] = self.pos_["z"] - 1 + end + return result end + --- -- \brief Tourne 90 degrés dans le sens contraire des aiguilles d'une montre function RSI_Turtle:turnLeft() @@ -143,6 +230,7 @@ function RSI_Turtle:turnLeft() self.facing_ = (self.facing_ - 3) % 12 end + --- -- \brief Tourne 90 degrés dans le sens des aiguilles d'une montre function RSI_Turtle:turnRight() @@ -150,20 +238,29 @@ function RSI_Turtle:turnRight() self.facing_ = (self.facing_ + 3) % 12 end + --- -- \brief Déplacement à gauche -- \return bool Succès function RSI_Turtle:left() - --TODO: Implementer + self:turnLeft() + result = self:forward() + self:turnRight() + return result end + --- -- \brief Déplacement à droite -- \return bool Succès function RSI_Turtle:right() - --TODO: Implementer + self:turnRight() + result = self:forward() + self:turnLeft() + return result end + --- -- \brief Descendre jusqu'à rencontrer le sol -- \return bool Succès @@ -171,6 +268,7 @@ function RSI_Turtle:ground() --TODO: Implementer end + --- -- \brief Quadriller une zone carrée. La tortue traverse chaque case, ligne par -- ligne. N'affecte pas l'altitude. @@ -181,6 +279,7 @@ function RSI_Turtle:goThroughArea(action) --TODO: Implementer end + --- -- \brief Quadriller une zone carrée. La tortue traverse chaque case, ligne par -- ligne. Reste au niveau du sol. @@ -191,6 +290,7 @@ function RSI_Turtle:goThroughAreaGround(action) --TODO: Implementer end + --- -- \brief Vérifier l'ID du bloc en face -- \param Nom du bloc à vérifier diff --git a/test.lua b/test.lua index 70909a01986345efc4d4a16ab5b5b3728b144fa7..2362f53e5e8613e76f439ba979b489654f607ba0 100644 --- a/test.lua +++ b/test.lua @@ -47,3 +47,11 @@ t:print() t:face(9) t:print() +print("Test mouvements;") +t:face(6) +t:forward() +t:up() +t:print() +t:backward() +t:down() +t:print() \ No newline at end of file