From 36d6fb1e467151e4fe278eb20257e984f96f4758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9tro?= <yann.roberge@polymtl.ca> Date: Thu, 22 Oct 2020 20:48:48 -0400 Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20de=20plus=20de=20fonction?= =?UTF-8?q?s=20de=20d=C3=A9placement=20et=20leurs=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rsiTurtle.lua | 101 ++++++++++++++++++++++++++------------------------ test.lua | 86 +++++++++++++++++++++++++++++++++--------- 2 files changed, 122 insertions(+), 65 deletions(-) diff --git a/rsiTurtle.lua b/rsiTurtle.lua index 800d603..797d662 100644 --- a/rsiTurtle.lua +++ b/rsiTurtle.lua @@ -47,6 +47,7 @@ function RSI_Turtle:init() return turtle end + --- -- \brief Affiche la position et l'orientation de la tortue function RSI_Turtle:print() @@ -70,25 +71,35 @@ function RSI_Turtle:print() end +--- +-- \brief Affiche la position et l'orientation de la tortue +-- \return int,int,int Positions X, Y et Z +function RSI_Turtle:getPos() + return self.pos_["x"], self.pos_["y"], self.pos_["z"] +end + + --- -- \brief Déplacement parallèle au sol +-- \return bool Succès function RSI_Turtle:moveTo2D(x, z) - --TODO: Implementer + return self:move2D(x - self.pos_["x"], z - self.pos_["z"]) end --- -- \brief Déplacement dans les trois dimensions +-- \return bool Succès function RSI_Turtle:moveTo(x, y, z) - --TODO: Implementer + return self:move(x - self.pos_["x"], y - self.pos_["y"], z - self.pos_["z"]) end --- --- \brief Déplacement s'assurant de rester au niveau du sol --- escalade et descend automatiquement les pentes -function RSI_Turtle:moveToGrounded(x, z) - --TODO: Implementer +-- \brief Retourner au point d'origine (0,0,0) +-- \return bool Succès +function RSI_Turtle:moveToOrigin() + return self:moveTo(0,0,0) end @@ -97,17 +108,16 @@ end -- Ordre de déplacement: X, Z -- \return bool Succès function RSI_Turtle:move2D(dx, dz) - local success + local success = true if dx >= 0 then self:face(12) - else + success = self:moveForward(dx) + elseif dx < 0 + then self:face(6) - end - for i=1,dx,1 - do - success = self:forward() + success = self:moveForward(-1*dx) end if not success @@ -115,22 +125,32 @@ function RSI_Turtle:move2D(dx, dz) return false end - if (dx <= 0 and dz >= 0) or (dx >= 0 and dz <= 0) + if (self.facing_ == 0) then - self:turnLeft() - else - self:turnRight() + if dz < 0 + then + self:turnLeft() + elseif dz > 0 + then + self:turnRight() + end + elseif (self.facing_ == 6) + then + if dz > 0 + then + self:turnLeft() + elseif dz < 0 + then + self:turnRight() + end end if not success then return false end - - for i=1,dz,1 - do - success = self:forward() - end + succes = self:moveForward(math.abs(dz)) + return success end @@ -141,7 +161,7 @@ end -- Ordre de déplacement: X, Z, Y -- \return bool Succès function RSI_Turtle:move(dx, dy, dz) - local success + local success = true if (dy > 0) then @@ -165,6 +185,14 @@ function RSI_Turtle:move(dx, dy, dz) end +--- +-- \brief Déplacement s'assurant de rester au niveau du sol +-- escalade et descend automatiquement les pentes +function RSI_Turtle:moveToGrounded(x, z) + --TODO: Implementer +end + + --- -- \brief Déplacement s'assurant de rester au niveau du sol -- escalade et descend automatiquement les pentes @@ -201,17 +229,7 @@ end -- \brief Déplacement avant -- \return bool Succès function RSI_Turtle:forward() - turtle.forward() - - if self.facing_ == 0 then - self.pos_["x"] = self.pos_["x"] + 1 - elseif self.facing_ == 3 then - self.pos_["z"] = self.pos_["z"] + 1 - elseif self.facing_ == 6 then - self.pos_["x"] = self.pos_["x"] - 1 - elseif self.facing_ == 9 then - self.pos_["z"] = self.pos_["z"] - 1 - end + return self:moveForward(1) end --- @@ -225,7 +243,7 @@ function RSI_Turtle:moveForward(distance) do traveled = traveled + 1 end - + if self.facing_ == 0 then self.pos_["x"] = self.pos_["x"] + traveled elseif self.facing_ == 3 then @@ -244,20 +262,7 @@ end -- \brief Déplacement arrière -- \return bool Succès function RSI_Turtle:backward() - result = turtle.back() - - if result then - if self.facing_ == 0 then - self.pos_["x"] = self.pos_["x"] - 1 - elseif self.facing_ == 3 then - self.pos_["z"] = self.pos_["z"] - 1 - elseif self.facing_ == 6 then - self.pos_["x"] = self.pos_["x"] + 1 - elseif self.facing_ == 9 then - self.pos_["z"] = self.pos_["z"] + 1 - end - end - return result + return self:moveBackward(1) end diff --git a/test.lua b/test.lua index 73aa4a8..ec796e6 100644 --- a/test.lua +++ b/test.lua @@ -58,23 +58,75 @@ e:print() -- print("Test ground();") -- t:ground() -print("Test move;") -print("1;") -t:move(0,0,5) -print("2;") -t:move(-3,-2,5) -print("3;") -t:move(2,2) -t:ground() - -print("Test moveForward;") -t:moveForward(5) - -print("Test move;") -t:moveBackward(5) - -print("Test move;") -t:moveBackward(5) +-- print("Test move;") +-- print("1;") +-- t:move(0,0,5) +-- print("2;") +-- t:move(-3,-2,5) +-- print("3;") +-- t:move(2,2) +-- t:ground() + +-- print("Test moveForward;") +-- t:moveForward(5) + +-- print("Test moveBackward;") +-- t:moveBackward(5) + +function checkPos(x,y,z) + xPos, yPos, zPos = t:getPos() + return ( xPos == x and yPos == y and zPos == z ) +end + +-- print("Tests face;") +-- for i=0,9,3 +-- do +-- for j=0,9,3 +-- do +-- t:face(i) +-- assert(t.facing_ == 0 +-- t +-- end +-- end + +print("Tests moveTo;") +assert(t:moveToOrigin()) +print(t:getPos()) +assert(checkPos(0,0,0)) + +assert(t:moveTo2D(5,0)) +print(t:getPos()) +assert(checkPos(5,0,0)) + +assert(t:moveToOrigin()) +print(t:getPos()) +assert(checkPos(0,0,0)) + +print("Tests problematiques") +assert(t:moveTo2D(0, 5)) +print(t:getPos()) +assert(checkPos(0,0,5)) + +assert(t:moveTo2D(0,-5)) +print(t:getPos()) +assert(checkPos(0,0,-5)) + +assert(t:moveToOrigin()) +print(t:getPos()) +assert(checkPos(0,0,0)) + +assert(t:moveTo(10,2,-1)) +print(t:getPos()) +assert(checkPos(10,2,-1)) + +assert(t:moveTo(-5,5,5)) +print(t:getPos()) +assert(checkPos(-5,5,5)) + +assert(t:moveToOrigin()) +print(t:getPos()) +assert(checkPos(0,0,0)) +t:face(12) print("Fin des tests") -- GitLab