Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html>
- <head>
- <title>
- Simulador de paloma mensajera
- </title>
- <link rel="stylesheet" type="text/css" href="common.css" />
- <style type="text/css">
- div.map {
- float: left;
- text-align: center;
- border: 1px solid #666;
- background-color: #fcfcfc;
- margin: 5px;
- padding: 1em;
- }
- span.casa,
- span.paloma {
- font-weight: bold;
- color: red;
- }
- span.aire {
- color: blue;
- }
- </style>
- </head>
- <body>
- <h1>
- <?php
- $tamañoMapa = 10;
- # Posicionar la paloma
- class Paloma
- {
- private $palomaX;
- private $palomaY;
- public function crearPalomaX($posicion)
- {
- $this->palomaX = $posicion;
- }
- public function crearPalomaY($posicion)
- {
- $this->palomaY = $posicion;
- }
- public function posicionX()
- {
- return $this->palomaX;
- }
- public function posicionY()
- {
- return $this->palomaY;
- }
- public function moverPaloma($casaY, $casaX)
- {
- if ($this->palomaX < $casaX) {
- $this->palomaX++;
- } elseif ($this->palomaX > $casaX) {
- $this->palomaX--;
- }
- if ($this->palomaY < $casaY) {
- $this->palomaY++;
- } elseif ($this->palomaY > $casaY) {
- $this->palomaY--;
- }
- }
- }
- $paloma1 = new Paloma();
- $paloma2 = new Paloma();
- do {
- $casaX = rand(0, $tamañoMapa - 1);
- $casaY = rand(0, $tamañoMapa - 1);
- $paloma1->crearPalomaX(rand(0, $tamañoMapa - 1));
- $paloma1->crearPalomaY(rand(0, $tamañoMapa - 1));
- $paloma2->crearPalomaX(rand(0, $tamañoMapa - 1));
- $paloma2->crearPalomaY(rand(0, $tamañoMapa - 1));
- } while ((abs($casaX - $paloma1->posicionX()) < $tamañoMapa / 2) && (abs($casaY - $paloma1->posicionY()) < $tamañoMapa / 2) && (abs($casaX - $paloma2->posicionX()) < $tamañoMapa / 2) && (abs($casaY - $paloma2->posicionY()) < $tamañoMapa / 2));
- # Con la línea precedente nos aseguramos de que la posición inicial de la paloma
- # y su casa disten como mínimo la mitad del mapa. La función abs() devuelve el valor
- # absoluto, esto es, la cifra sin signo.
- do {
- $paloma1->moverPaloma($casaY, $casaX);
- $paloma2->moverPaloma($casaY, $casaX);
- #Mostrar el mapa actual
- echo '<div class="map" style="width: ' . $tamañoMapa . 'em;"><pre>';
- # Recuérdese que con la etiqueta <pre> los saltos de línea que haya se reflejan en la pantalla
- for ($y = 0; $y < $tamañoMapa; $y++) {
- for ($x = 0; $x < $tamañoMapa; $x++) {
- if ($x == $casaX && $y == $casaY) {
- echo '<span class="casa">+</span>'; //Casa
- } elseif ($x == $paloma1->posicionX() && $y == $paloma1->posicionY()) {
- echo '<span class="paloma">%</span>'; #Paloma
- } elseif ($x == $paloma2->posicionX() && $y == $paloma2->posicionY()) {
- echo '<span class="paloma">%</span>'; #Paloma
- } else {
- echo '<span class="aire">.</span>'; #Aire
- }
- echo ($x != $tamañoMapa - 1) ? " " : ""; #siempre se añade un carácter de espacio en cada celda, salvo al final.
- }
- echo "\n"; #Salto de línea. como se está dentro de un <pre>, se reflejará en la pantalla.
- }
- echo "<pre>palomax=".$paloma1->posicionX()." palomaY=".$paloma1->posicionY()."\n";
- echo "paloma2x=".$paloma2->posicionX()." paloma2Y=".$paloma2->posicionY()."</div>\n";
- } while (($paloma1->posicionX() != $casaX || $paloma1->posicionY() != $casaY) || ($paloma2->posicionX() != $casaX || $paloma2->posicionY() != $casaY));
- ?>
- </h1>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement