diff --git a/README.md b/README.md index 25988bd..95477bc 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,168 @@ -# proyectoIntegrado +SimulaciĆ³n de una estaciĆ³n de servicio + +
+
+import threading
+import random
+import time
+import turtle
+
+class EstacionDeServicio:
+    def __init__(self):
+        self.surtidor1 = 80
+        self.surtidor2 = 60
+        self.lock = threading.Lock()
+
+    def repostar_gasolina(self, coche, cantidad):
+        with self.lock:
+            if coche.gasolina_actual < coche.capacidad_deposito and cantidad > 0:
+                cantidad_a_repostar = min(cantidad, coche.capacidad_deposito - coche.gasolina_actual)
+                if cantidad_a_repostar <= self.surtidor1:
+                    coche.gasolina_actual += cantidad_a_repostar
+                    self.surtidor1 -= cantidad_a_repostar
+                    return True
+                elif cantidad_a_repostar <= self.surtidor2:
+                    coche.gasolina_actual += cantidad_a_repostar
+                    self.surtidor2 -= cantidad_a_repostar
+                    return True
+            return False
+
+class Coche:
+    def __init__(self, nombre, capacidad_deposito, color):
+        self.nombre = nombre
+        self.capacidad_deposito = capacidad_deposito
+        self.gasolina_actual = 0
+        self.color = color
+
+    def dibujar_coche(self, x, y):
+        turtle.penup()
+        turtle.goto(x, y)
+        turtle.pendown()
+        turtle.color(self.color)
+        turtle.begin_fill()
+        for _ in range(2):
+            turtle.forward(60)
+            turtle.right(90)
+            turtle.forward(20)
+            turtle.right(90)
+        turtle.end_fill()
+
+        for i in range(2):
+            turtle.penup()
+            turtle.goto(x + i * 55, y - 30) 
+            turtle.pendown()
+            turtle.color("black")
+            turtle.begin_fill()
+            turtle.circle(10)
+            turtle.end_fill()
+
+        turtle.penup()
+        turtle.goto(x + 10, y + 20)
+        turtle.pendown()
+        turtle.color(self.color)
+        turtle.begin_fill()
+        for _ in range(2):
+            turtle.forward(40)
+            turtle.right(90)
+            turtle.forward(20)
+            turtle.right(90)
+        turtle.end_fill()
+
+        turtle.penup()
+        turtle.goto(x + 30, y + 5)
+        turtle.pendown()
+        turtle.color("black")
+        turtle.write(f"{self.gasolina_actual}L", align="center", font=("Arial", 8, "normal"))
+
+        turtle.penup()
+        turtle.goto(x + 30, y + 40)
+        turtle.pendown()
+        turtle.color("black")
+        turtle.write(self.nombre, align="center", font=("Arial", 8, "normal"))
+
+    def dibujar_surtidor_gasolina(self, x, y):
+
+        turtle.penup()
+        turtle.goto(x, y)
+        turtle.pendown()
+        turtle.color("red")
+        turtle.begin_fill()
+        for _ in range(2):
+            turtle.forward(20)
+            turtle.right(90)
+            turtle.forward(40)
+            turtle.right(90)
+        turtle.end_fill()
+
+ 
+        turtle.penup()
+        turtle.goto(x + 10, y - 15)
+        turtle.pendown()
+        turtle.color("black")
+        turtle.write(f"{self.gasolina_actual}L", align="center", font=("Arial", 8, "normal"))
+
+
+        turtle.penup()
+        turtle.goto(x + 10, y + 20)
+        turtle.pendown()
+        turtle.color("black")
+        turtle.write("Surtidor", align="center", font=("Arial", 8, "normal"))
+
+def conductor(estacion, coche):
+    while estacion.repostar_gasolina(coche, random.randint(2, 20)):
+        time.sleep(1)
+    print(f"{coche.nombre} ha terminado de repostar. Gasolina actual: {coche.gasolina_actual}")
+
+
+estacion = EstacionDeServicio()
+
+capacidades_deposito = random.sample(range(10, 61), 6)
+colores = ["green", "blue", "orange", "pink", "yellow", "grey"]
+coches = [Coche(f"Coche {i + 1}", capacidad, colores[i]) for i, capacidad in enumerate(capacidades_deposito)]
+hilos_conductores = [threading.Thread(target=conductor, args=(estacion, coche)) for coche in coches]
+
+print("Estado inicial de los coches:")
+for coche in coches:
+    print(f"{coche.nombre}: Gasolina actual = {coche.gasolina_actual}/{coche.capacidad_deposito}")
+
+for hilo_conductor in hilos_conductores:
+    hilo_conductor.start()
+
+
+fila1_y = 100
+fila2_y = -100
+for i, coche in enumerate(coches):
+    if i < 3:
+        coche.dibujar_coche(-150 + i * 150, fila1_y)
+    else:
+        coche.dibujar_coche(-150 + (i - 3) * 150, fila2_y)
+
+
+for hilo_conductor in hilos_conductores:
+    hilo_conductor.join()
+
+coche_surtidor1 = Coche("Surtidor 1", 0, "")
+coche_surtidor2 = Coche("Surtidor 2", 0, "")
+coche_surtidor1.surtidor1 = estacion.surtidor1
+coche_surtidor2.surtidor2 = estacion.surtidor2
+coche_surtidor1.dibujar_surtidor_gasolina(-75, -30)
+coche_surtidor2.dibujar_surtidor_gasolina(75, -30)
+
+
+print(f"\nEstado final de los surtidores:")
+print(f"Surtidor 1: {estacion.surtidor1} litros")
+print(f"Surtidor 2: {estacion.surtidor2} litros")
+
+print("\nEstado final de los coches:")
+for coche in coches:
+    print(f"{coche.nombre}: Gasolina actual = {coche.gasolina_actual}/{coche.capacidad_deposito}")
+
+turtle.hideturtle()
+
+turtle.done()
+
+
+ + +