From 9128673eba53708319dd20bb06d2d8bc490d4356 Mon Sep 17 00:00:00 2001
From: DaniRafeh28 <daniel.rafeh@student.reutlingen-university.de>
Date: Sun, 4 May 2025 17:25:17 +0200
Subject: [PATCH] Konzept

---
 Mars.py                                   |  31 --------
 __pycache__/Map.cpython-312.pyc           | Bin 0 -> 215 bytes
 __pycache__/Mars.cpython-312.pyc          | Bin 0 -> 3605 bytes
 __pycache__/MarsRover.cpython-312.pyc     | Bin 4909 -> 5153 bytes
 __pycache__/Plateau.cpython-312.pyc       | Bin 2100 -> 2100 bytes
 rover.py                                  |   3 +-
 src/Mars.py                               |  86 ++++++++++++++++++++++
 src/MarsMap.py                            |   0
 MarsRover.py => src/MarsRover.py          |   3 +-
 src/MissionControl.py                     |  65 ++++++++++++++++
 Plateau.py => src/Plateau.py              |   0
 src/__pycache__/Map.cpython-312.pyc       | Bin 0 -> 219 bytes
 src/__pycache__/Mars.cpython-312.pyc      | Bin 0 -> 3609 bytes
 src/__pycache__/MarsMap.cpython-312.pyc   | Bin 0 -> 223 bytes
 src/__pycache__/MarsRover.cpython-312.pyc | Bin 0 -> 5157 bytes
 src/__pycache__/Plateau.cpython-312.pyc   | Bin 0 -> 2104 bytes
 16 files changed, 155 insertions(+), 33 deletions(-)
 delete mode 100644 Mars.py
 create mode 100644 __pycache__/Map.cpython-312.pyc
 create mode 100644 __pycache__/Mars.cpython-312.pyc
 create mode 100644 src/Mars.py
 create mode 100644 src/MarsMap.py
 rename MarsRover.py => src/MarsRover.py (95%)
 create mode 100644 src/MissionControl.py
 rename Plateau.py => src/Plateau.py (100%)
 create mode 100644 src/__pycache__/Map.cpython-312.pyc
 create mode 100644 src/__pycache__/Mars.cpython-312.pyc
 create mode 100644 src/__pycache__/MarsMap.cpython-312.pyc
 create mode 100644 src/__pycache__/MarsRover.cpython-312.pyc
 create mode 100644 src/__pycache__/Plateau.cpython-312.pyc

diff --git a/Mars.py b/Mars.py
deleted file mode 100644
index cc638aa..0000000
--- a/Mars.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from MarsRover import Rover
-from Plateau import Plateau
-
-class Mars(Rover):
-    def __init__(self, x, y, direction, plateau):
-        super().__init__(x, y, direction)
-        self.plateau = plateau
-        self.plateau.move(x, y)
-
-    def drive(self, cmd) -> str:
-        for command in cmd:
-            if command == 'F':
-                if self.plateau.obstacle_detection_system(self.x, self.y, self.direction):
-                    self.move_forward()
-                else:
-                    return f"Obstacle detected at {self.x}, {self.y}. Stopping movement."
-            elif command == 'B':
-                if self.plateau.obstacle_detection_system(self.x, self.y, self.direction):
-                    self.move_backward()
-                else:
-                    return f"Obstacle detected at {self.x}, {self.y}. Stopping movement."
-            elif command == 'L':
-                self.turn_left()
-            elif command == 'R':
-                self.turn_right()
-            else:
-                raise ValueError(f"Unknown command: {command}")
-        return f"Final position: {self.x}, {self.y}, facing {self.direction}."
-
-
-
diff --git a/__pycache__/Map.cpython-312.pyc b/__pycache__/Map.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..634325a8dc8d09fb955f4918fbb0338866a69141
GIT binary patch
literal 215
zcmX@j%ge<81R-*w86f&Gh(HIQS%4zb87dhx8U0o=6fpsLpFwJVl_gungche36~}l4
z#Q5i>x)f!WrN#slC01k>7Zl}ZrDm5X1gGYv7MG+JDVW6+AWP_$q$X$N<>%z5XQn14
z7H6gwm89xs=H=y=C6;97=cVSw<R%ss=Vlfc19{2$c_l^pIWfM81$qUQw>WHa^HWN5
ZQtgUZfzDtA;$jfvBQql-V-Yiu1puC2J?#Jh

literal 0
HcmV?d00001

diff --git a/__pycache__/Mars.cpython-312.pyc b/__pycache__/Mars.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..3cddf50cab0e19dca2f7a1fcc0314481c6203e20
GIT binary patch
literal 3605
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
FKLIkHMOFX+

literal 0
HcmV?d00001

diff --git a/__pycache__/MarsRover.cpython-312.pyc b/__pycache__/MarsRover.cpython-312.pyc
index 3ce2f34bb72ed1779ef6426739768f08cef9b847..0b5bc9f53b6c7fd55a2933085b4890c5790eab68 100644
GIT binary patch
delta 1438
zcmcIk-%C?b96#UP-RpI`+uD{*o#oZqbh$tcMa2ezta@me*odIXaPt@KZrr;<O|l0c
z3W}2RkUm8DR3et*LrO?K7CmGTB%_CZ`~xzBB7!>S-t9W|r5-vDpY#3wIh@bAciuZw
z+wsO?F(I-Xj*@|4GeTdflV8T1u~kZp`^bP!p%|J#F_<%GnTu$|;A18y6bMcJILY;+
zG1Ozk4d4eBN8n&_rf6VLNhjqId<|B?gIf)i=G(RnSJ_SD9bpS$n{fhvGCTkWzRr|`
z6HhahV8ScRc_<;dFD@6Mk;^Dl5Kt(qD9TREvsGpr4Odd2wPmn@L#!Kj7>~A(p&^dM
zcP$d-cZG=C$IO8i1#<Wy9)B)!;-@A7I1GFV-e=+LOup+LNEh^)pSc?Mj(nq@51OlK
zH(uk4dD1B8i4fNe8qG(&#JWvq)9Ivny{A*C#wpImjiF%}(oa@Us;H%lLQ{@Y8|W^m
zXw3~fqf)soI!(-!HsemC7q42(7V-kLMXEVG$@`!bzu<!noNOoY3>QtM;!;eu5J$FB
zpeke-B`wc_>>##6Z<9*oDfZOwr-9QXaszGf!d>B(@PT)~<K0u;55v>pN8OLZGvO!Q
z&myyt^@{fQ{0SVe{=(->URC}7qUcVw_Nuv8@j^vga>9i;U0XcPvAUei+T9l1dZC1S
zvw77tO;qlJ-n?QvHC3zrQa#ZnA0`sW9tyQojJ!I6wWj{qKdQ47uvP<<EJbZ2&>?mu
zuf}CDl~e}PgGot@_N9rNAi+djO1Fu%qXxe?YV!HTzG&~D)GzvY*+-92N8u2KDr~n`
zRnSKx`w3)<dXtGnREjC|X^QH19<sY2i2Lk{w{hXfbMK;ep>)}?-0?EF5?pRsYkL)Y
zE4`N1&t6)$Mb`NU`4RlK*NxLxmt&yTHfs%an+VL3e+IRk6eybt^lp^n1SU|{$g<^G
zE5in|CKX(42(pa_2yQl7*dCZ-Hj%n3-_%{3M@NN%KG0^i(!n}UhHp<KV^=Q619BTl
WsAQCXlL3J5hAw~}$Rc%9oBjYkswigw

delta 1317
zcmb7DT}V_x6rQ>F&fP!P{c-)N)%E)CmPD2zR){~41!5^>B1OvXmTP%e=B|bkXdvZF
zpq&SO36!7|kqTdW>F+6`2L<t=1)qYV2f;MxrH5u_cU?svYL@-x%y-T`bLKlUv*nAW
zouBP?D`Ml+ny2R(v%d00a*%|v-NB40B%vl0L}Mt37o@nSlW`#wl-N&RkP{qcoD{;)
z?8<d4;5doVkm4tSNmu4%=XG2+`MMrVxEL!?f%BjZzrj9mO8Lqo$2NLwI|Qn78{SG!
zunVrqhp`*(%K6v=Q}Pw;iMu~#XR*XIhl7`a!3)wf>V|JhK}kBNeH=Ut0*M-!iIBqn
zywL3~s32Z=N9<UFS866WO{#q-a02TcP)V}D#z^k>?(v-vzN=~tRFMpLs#c46L#<Bb
zvhC#37e(|%dl9VIRM68bkZ&RfMj9e=%@oh$-Ib$8crKU|o>VnKYt#hwHXk%AW>_}c
z>?VFnKJKAj36>=<Y^D?Id|C_T-K5#zvYabcsDm$rPIhL+WFt!FF?BK9;FWVF$1Nqc
z3{Dg=W)v;0TMDuFUj^MO*j_RBi=7lSDUmZFY!PdVL(;#C({HFrcS^zC8YOk!uU=Bu
z{ojjH4$zrz>`C?LKlN6#3Yl)Sm_sR7Fez!8qs(?RB`K_1{=f}qDfTQqa1P<>jK%><
zLwZ!}j~L--IHI4{%7>*2ZP@Cs&~A1I!ul=EZ>D8Dub)F62MrqC1-ZO+^az8PDG=%F
z>(+w?zvr5G6r=8J+yK*VqqJn^^7HoD_L=i@4Rg^KgY$!PJuiFTdp`O;_*UvJtvFg&
z%&pV|l^I7zc<&QCa4WTI316OMFdu(l)XfRLn*e@Tql&>8+ENtKgtyXUQoCgpkVRVX
z*6~b+o5$>=4NuFPNX*7BF^d-~(v19IDUi6eEq+B%F+wAQAsQq7G^|JCwN>*Vek(;4
zG4t8JNO0gzsFt2#oG67?x+!Cfe@iVGx8a{CK6OdRl0M!&;hJb%HRp_yFNlnW9!Bm*
MR@Lk^ltV<;zcX_NV*mgE

diff --git a/__pycache__/Plateau.cpython-312.pyc b/__pycache__/Plateau.cpython-312.pyc
index 986dfdb773b6ec17b358aa2cbd922577b288cfd3..c90c8b8878f00b6654ad2820b65d992365f6dee4 100644
GIT binary patch
delta 19
ZcmdlYutk9DG%qg~0}wd9*~q2E0RS>g1f2i?

delta 19
ZcmdlYutk9DG%qg~0}#Z$-pHlJ0RS@Z1h@bI

diff --git a/rover.py b/rover.py
index 75d1331..34c4d81 100644
--- a/rover.py
+++ b/rover.py
@@ -481,4 +481,5 @@ class TestRover(unittest.TestCase):
     
 
 if __name__ == '__main__':
-    unittest.main()
\ No newline at end of file
+    unittest.main()
+
diff --git a/src/Mars.py b/src/Mars.py
new file mode 100644
index 0000000..b97387e
--- /dev/null
+++ b/src/Mars.py
@@ -0,0 +1,86 @@
+from MarsRover import Rover
+from Plateau import Plateau
+
+class Mars(Rover):
+    def __init__(self, x, y, direction, plateau):
+        super().__init__(x, y, direction)
+        self.plateau = plateau
+        self.plateau.move(x, y)
+
+    def drive(self, cmd) -> str:
+        executed_commands = []
+        for command in cmd:
+            if command == 'F':
+                next_x, next_y = self.calculate_next_positions(self.x, self.y, self.direction)
+                if self.plateau.obstacle_detection_system(self.x, self.y, self.direction):
+                    self.move_forward()
+                    executed_commands += command
+                else:
+                    return f"Obstacle detected at {next_x}, {next_y}. Stopping movement."
+            elif command == 'B':
+                prev_x, prev_y = self.calculate_next_positions(self.x, self.y, self.direction)
+                if self.plateau.obstacle_detection_system(self.x, self.y, self.direction):
+                    self.move_backward()
+                    executed_commands += command
+                else:
+                    return f"Obstacle detected at {prev_x}, {prev_y}. Stopping movement."
+            elif command == 'L':
+                self.turn_left()
+                executed_commands += command
+            elif command == 'R':
+                self.turn_right()
+                executed_commands += command
+            else:
+                raise ValueError(f"Unknown command: {command}")
+        return f"Final position: {self.x}, {self.y}, facing {self.direction}."
+
+
+    def calculate_next_positions(self, x, y, direction):
+        if direction == 'N':
+            y += 1
+        elif direction == 'S':
+            y -= 1
+        elif direction == 'E':
+            x += 1
+        elif direction == 'W':
+            x -= 1
+        elif direction == 'NE':
+            x += 1
+            y += 1
+        elif direction == 'NW':
+            x -= 1
+            y += 1
+        elif direction == 'SE':
+            x += 1
+            y -= 1
+        elif direction == 'SW':
+            x -= 1
+            y -= 1
+        return x, y
+    
+    def _calculate_prev_positions(self, x, y, direction):
+        if direction == 'N':
+            y -= 1
+        elif direction == 'S':
+            y += 1
+        elif direction == 'E':
+            x -= 1
+        elif direction == 'W':
+            x += 1
+        elif direction == 'NE':
+            x -= 1
+            y -= 1
+        elif direction == 'NW':
+            x += 1
+            y -= 1
+        elif direction == 'SE':
+            x -= 1
+            y += 1
+        elif direction == 'SW':
+            x += 1
+            y += 1
+        return x, y
+
+plateau = Plateau(16, 16, [(3, 5), (4, 6)])
+mars = Mars(3, 6, 'N', plateau)
+mars.drive("FFRF")
\ No newline at end of file
diff --git a/src/MarsMap.py b/src/MarsMap.py
new file mode 100644
index 0000000..e69de29
diff --git a/MarsRover.py b/src/MarsRover.py
similarity index 95%
rename from MarsRover.py
rename to src/MarsRover.py
index 8677861..badc2f2 100644
--- a/MarsRover.py
+++ b/src/MarsRover.py
@@ -5,6 +5,7 @@ class Rover:
         self.y = y
         self.direction = direction
         self.directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW']
+        self.history = []
 
     def turn_left(self):
         current_index = self.directions.index(self.direction)
@@ -76,5 +77,5 @@ class Rover:
             else:
                 raise ValueError(f"Unknown command: {command}")
             
-        return f"Current position: ({self.x}, {self.y}), facing {self.direction}"
+        return f"Rover position after movement: ({self.x}, {self.y}), facing {self.direction}"
     
\ No newline at end of file
diff --git a/src/MissionControl.py b/src/MissionControl.py
new file mode 100644
index 0000000..8cb2c66
--- /dev/null
+++ b/src/MissionControl.py
@@ -0,0 +1,65 @@
+from MarsRover import Rover
+from Mars import Mars
+from Plateau import Plateau
+
+import re
+
+class Map:
+    def __init__(self):
+        self.obstacles = set()
+        self.rover_position = None
+        self.size_x = None
+        self.size_y = None
+
+    def update_rover_position(self, x, y):
+        self.rover_position = (x, y)
+
+    def add_obstacle(self, x, y):
+        self.obstacles.add((x, y))
+
+    def update_boundaries(self, x, y):
+        if self.size_x is None or x >= self.size_x:
+            self.size_x = x + 1
+        if self.size_y is None or y >= self.size_y:
+            self.size_y = y + 1
+
+        if x < 0:
+            pass
+        if y < 0:
+            pass
+
+
+class MissionControl:
+    def __init__(self, rover):
+        self.rover = rover
+        self.map = Map()
+        self.rover_position = (rover.x, rover.y)
+        self.rover_direction = rover.direction
+        self.map.update_rover_position(rover.x, rover.y)
+
+    def send_command(self, command:str):
+        result = self.rover.drive(command)
+        print("Rove response:" + result) 
+
+        if result.startswith("Final position:"):
+            match = re.search(r"Final position: (\d+), (\d+), facing (\w+)", result)
+            if match:
+                x, y, direction = map(str.strip, match.groups())
+                self.rover_position = (int(x), int(y))
+                self.rover_direction = direction
+                self.map.update_rover_position(int(x), int(y))
+                self.map.update_boundaries(int(x), int(y))
+
+        elif "Obstacle detected at" in result:
+            match = re.search(r"Obstacle detected at (\d+), (\d+)", result)
+            if match:
+                obstacle_x, obstacle_y = map(int, match.groups())
+                self.map.add_obstacle(obstacle_x, obstacle_y)
+
+        print(f"Mission Control: Rover position: {self.rover_position}, Obstacles: {self.map.obstacles}, Direction: {self.rover_direction}")
+
+plateau= Plateau(16, 16, [(3, 5), (4, 6)])
+rover = Mars(3, 6, 'N', plateau)
+mission_control = MissionControl(rover)
+mission_control.send_command("B")
+
diff --git a/Plateau.py b/src/Plateau.py
similarity index 100%
rename from Plateau.py
rename to src/Plateau.py
diff --git a/src/__pycache__/Map.cpython-312.pyc b/src/__pycache__/Map.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..74d6c4e3990a24af8545f47c09025b99acbc307f
GIT binary patch
literal 219
zcmX@j%ge<81R-*w86f&Gh(HIQS%4zb87dhx8U0o=6fpsLpFwJVRV7=+gche36~}l4
z#Q5i>x)f!WrN#slC01k>7Zl}ZrDm5X1gGYv7MG+JDVW6+AWP_$q$X$N<>%z5XQn14
z7H6gwm89xs=H=y=C6;97=cVSw<R%ss=Vlfc19{2$c_l^pIWfgW$uYi(1$qUQw>WHa
d^HWN5QtgUZflgrr;$jfvBQql-V-Yiu1pvIQKa~Ig

literal 0
HcmV?d00001

diff --git a/src/__pycache__/Mars.cpython-312.pyc b/src/__pycache__/Mars.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..edc9b489eb8f9280cecc83f6509e324bf2521582
GIT binary patch
literal 3609
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
O#?i?){*8DmmiYn4dq#}_

literal 0
HcmV?d00001

diff --git a/src/__pycache__/MarsMap.cpython-312.pyc b/src/__pycache__/MarsMap.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..6ead88b8634e2fe2d147aeffe872c33ef9090d57
GIT binary patch
literal 223
zcmX@j%ge<81R-*w86f&Gh(HIQS%4zb87dhx8U0o=6fpsLpFwJV)g@cSgche36~}l4
z#Q5i>x)f!WrN#slC01k>7Zl}ZrDm5X1gGYv7MG+JDVW6+AWP_$q$X$N<>%z5XQn14
z7H6gwm89xs=H=y=C6;97=cVSw<R%ss=Vlfc19{2$c_l^pIWfgW$uYh_Vc*08y@JYH
g95%W6DWy57c15f}=P&|sF^KVznURsPh#ANN0N!pvEC2ui

literal 0
HcmV?d00001

diff --git a/src/__pycache__/MarsRover.cpython-312.pyc b/src/__pycache__/MarsRover.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a6b7242259072a3155611f429bdbc8f52965aca8
GIT binary patch
literal 5157
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

literal 0
HcmV?d00001

diff --git a/src/__pycache__/Plateau.cpython-312.pyc b/src/__pycache__/Plateau.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1ef4b349085591b9c1d9f4698e71587994190de4
GIT binary patch
literal 2104
zcmb_dO>7%g5PolW?f5spZqneExN?ZtptgcS4~4Y2Y6^-J6OmSxg6Y=rzNDMjyUE*4
zh%E;dDF+u-BIS})2oa=8xbzZEP>Dmz35iRRQemw)MB-G$A=H&nIWe>TiCdKe5>MLs
z`DW(Ld!BjYpMpUjfpz+i(B%#{A-|zgTT)dh?+0Op2;?oIk|m<j+d{=MMzVq|rfUAk
zJyoR~2VsRUGDcN0Ca8W@V4^C*C#iJ8t-6+6W0L9yy{V3QmZULP9rH4`DzT;skLm;5
zlcjRNZW>7^EtZ^%+ip|KF=e63v$mTvYmV!w+L`efP4J2Em45)TLh>|E6p$(_FMvkt
zn)s2B7j-&G0IlAR5DRy3R$jPW^*uvAky64WNeS<V30agHeCRWL;5>_xO0Emn+!Dkr
zN+2DqNRX+1S{3uUYT2^jNgeMG8l+n^F1tB~aP+jj#<*!EQ)y<}E}qmUnJrCnO|_f3
zG0(U%W0;zy8M^GUC6lEm_9D3#!>MB8HW6HZf0#OvIBzm;Cf*)NyrZ)-T$^W!5uRMo
z%o%P>v1uzZ$}-Hf7>^uJ%rqJfTP$^1H`2zW#>SJT#<;}}Yr1aCCow<M6PYA8Gn#3F
zmNImU8|j3}Q;BLZkIZCkkD_S0W+_UpwT9LZtcH0B$Q82Fd7vO&^Ovfu@91XV>o>YL
z+5v2S<R$~B=|<o8!}mf%cZSzzZw?mwZVunu_sW;UtFxb~Ybbs<ycHS(Z||;~^h68N
zeNXuD!zR*s?D2MJ$n1n9U$w^$NO!!kF5g|j1>)T<q&8i!X*Pw;R9jdFr@798;53&o
zfh|?D6RYm6LgP)<@jc-)@_D_jD9I98i08WB#o|RWK-Gw4L~2z$5s?KRfLPl#!!_NK
zMIHo=w;^c<Vq!WdC2s+4OSnNUQ2Q-WL)?4;$Q4rRiL4!3ohV2@d&0kZf}5>!vG<q$
zfvx_5P5I<z^QrruH_PA%Ev9OmrLc-mJS;4UbN4tr3b?zd(&-oB9PYfJ3OP8}qM%;_
zRBS-I9P~V(QWd3DU#brQ>S{pIm+Gegbvvj(U-xaua1`uK4R$B0!QKOQPlFxLMIC$P
zEG=O7I(DD4|6aUf2h2AOH#MU;IG$C%=>%9quw%uq1xLzMeR$vxSXt=DX%=pgcY0(B
zd*`V&?|5VbaxiYw_yZg^HXXI;piM8>LVOTD;G@7tFFe55v*(}%a3g0JI8R!Zp6Uq>
z7a=A(L1R=qqq{aW6qUil#o8)n7T$Fxcc|7b|LPLL{eA}mJ>(CqirfBhDG*$4yL$F&
ztQ72Ajcx}I{zss9JNSGxq!4=|_W!aJVmtmoVfN$KmSd}-FTyv%+o9efEylift+%bK
z-%fusz5Q~m)Ukgj5G>3VjxV2Exp@8JmOlzmsilMCRN(lxCVO#A>B$UJ6x*jL8AF{*
zqa09_*|}u8Y7yae@>UGm2gDXli`&w;VWfE!^joB|A-+bAZ^$87Zu31LOXN?%=ZdbT
zb_uXz)L|RFWz=?`gNa0!!Gs)Lkgus_hwu8ru2AvVE&;Y)VH*|p<ExJltmMU%ahX<9
l_hWwNe$LSFyivK*N&XTToHHT5D^g1T5{}T&LjuGJ_y_p!{kZ@D

literal 0
HcmV?d00001

-- 
GitLab