Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
websockets_php [2023/06/27 07:54] manuel_jose_moles_canal ↷ Page name changed from websockets_php.cat to websockets_php |
websockets_php [2023/07/05 18:35] (actual) enric_mieza_sanchez no sortien els títols |
||
---|---|---|---|
Línia 1: | Línia 1: | ||
====== Pràctica. Creació d'un laberint amb WebSockets i PHP ====== | ====== Pràctica. Creació d'un laberint amb WebSockets i PHP ====== | ||
- | En construcció | + | =====Joc online. Apunts.===== |
+ | |||
+ | ====Video-joc UF4 M7==== | ||
+ | Ho anirem fent per activitats (etapes) incrementals, | ||
+ | |||
+ | **Objectiu: | ||
+ | |||
+ | **El joc:** El joc ha d’estar sostingut pel servidor, és a dir, és el servidor qui marca quin joc és, quines són les regles, i és qui respon a les accions dels usuaris i procesa els moviments i els events. Cadascú ha de decidir quin joc vol implementar. L' | ||
+ | |||
+ | **El client:** El client fa de ‘joystick’ i de pantalla. Presenta les dades procedents del servidor i envia al servidor l’estat de les tecles (tecles de cursor, control i espai). | ||
+ | |||
+ | **El servidor:** El servidor, primer, en començar el joc, envia un arxiu d’imatges al client (imatge gran amb sprites tots de la mateixa mida). | ||
+ | |||
+ | A partir d’aquest moment, sempre que hi hagi un canvi en el joc, el servidor informarà a l’altre jugador. | ||
+ | |||
+ | Proporcionarà la posició dels diferents elements i l’sprite associada | ||
+ | |||
+ | En els exemples, el servidor només aguantarà una partida. Serà interessant trobar la forma de fer que suporti múltiples partides. | ||
+ | |||
+ | ======Act1. Exemple Websockets.====== | ||
+ | =====Exemple: | ||
+ | Partim de l' | ||
+ | [[https:// | ||
+ | |||
+ | En aquesta pàgina web trobem una introducció teòrica a la tecnologia de websockets, enllaç a la lliberia PHP-Websockets ([[https:// | ||
+ | |||
+ | <WRAP tip> | ||
+ | L' | ||
+ | </ | ||
+ | |||
+ | <WRAP todo> | ||
+ | De la pàgina anterior, implementa l' | ||
+ | </ | ||
+ | |||
+ | |||
+ | A continuació, | ||
+ | |||
+ | --> index.html | ||
+ | <file html websockets/ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | var socket; | ||
+ | function init() { | ||
+ | socket = new WebSocket(" | ||
+ | |||
+ | socket.onopen = function (msg) { | ||
+ | alert(" | ||
+ | }; | ||
+ | socket.onmessage = function (msg) { | ||
+ | alert(" | ||
+ | }; | ||
+ | socket.onclose = function (msg) { | ||
+ | alert(" | ||
+ | }; | ||
+ | } | ||
+ | function send(msg_xat) { | ||
+ | if(msg_xat.length > 0) { | ||
+ | socket.send(msg_xat); | ||
+ | } | ||
+ | } | ||
+ | function quit() { socket.close() } | ||
+ | function reconnect () { quit(); init(); } | ||
+ | </ | ||
+ | <input type=" | ||
+ | <input type=" | ||
+ | < | ||
+ | <input type=" | ||
+ | <input type=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | <-- | ||
+ | |||
+ | --> SalaXatServer | ||
+ | <file php websockets/ | ||
+ | <?php | ||
+ | require_once(' | ||
+ | |||
+ | class SalaChatServer extends WebSocketServer { | ||
+ | protected function process($user, | ||
+ | echo 'user sent: ' . $message . PHP_EOL; | ||
+ | foreach ($this-> | ||
+ | if ($currentUser !== $user) | ||
+ | $this-> | ||
+ | } | ||
+ | } | ||
+ | protected function connected($user) | ||
+ | { | ||
+ | echo 'user connected' | ||
+ | } | ||
+ | protected function closed($user) | ||
+ | { | ||
+ | echo 'user disconnected' | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $chatServer = new SalaChatServer(" | ||
+ | |||
+ | try { | ||
+ | $chatServer-> | ||
+ | } catch (Exception $e) { | ||
+ | $chatServer-> | ||
+ | } | ||
+ | </ | ||
+ | <-- | ||
+ | |||
+ | <WRAP todo> | ||
+ | A partir dels fitxers d' | ||
+ | Demani el nom. No ha de permetre la connexió si el nom no està introduït. Si la connexió està establerta, que no permeti modificar el nom. | ||
+ | |||
+ | Que enviï el nom al servidor (juntament amb el missatge, en format JSON). | ||
+ | |||
+ | Que mostri en pantalla tant els missatges enviats com els rebuts (en un div addicional), | ||
+ | </ | ||
+ | |||
+ | ======Act-2. Laberint: Iniciant la partida====== | ||
+ | =====Primera fase===== | ||
+ | En aquesta primera fase, farem que el client entri al servidor i es pugui connectar a una partida o crear-ne una de nova. | ||
+ | - Et connectes al servidor. El servidor et respon amb un json de la forma {connexio: | ||
+ | - Li pases el teu nom d’usuari. {nom: | ||
+ | - El servidor t’informa de les partides en curs. {partides: | ||
+ | - Pots optar per crear una nova partida o connectar-te a una existent {accio: | ||
+ | - Si hem fet ‘nova partida’, el servidor ens retorna el llistat de partides, amb la nostra incorporada. | ||
+ | |||
+ | <WRAP todo> | ||
+ | Prenent com a referència el codi treballat en l' | ||
+ | </ |