You are on page 1of 22
CCA TTR TTC M TTT Els [sm con UPD ee een patrén ritmico Instalando el juego con Inna Setup SON ii 20 Videajuegos AUTOR DE LA oBRA Nacos Mecina DIRECCION EDITORIAL ard Toibio etrio@berrenacom CCoOROMUACION EDITORIAL Fa Margaita Garcia, aber ron Disefio Y MAQUETACION ‘Antonio G* Tom ‘PRODUCCION Marisa Cogoro SUSCRIPCIONES Tol $1 628.0203 Fax 91 628 09 35 sscrpiresSibepera com uumacidtFotgreim Dui mnesiOn: Gréficas Don Bosco ‘DUPLICACION co.ROM: MP0. Fin de la obra Terminamos con este nmero nuestra obra dedicada al disefto y le progra- macién de videojuegos, dedicada a formar al alurnno en las principales téo- nicas relacionadas en ei desarrollo completo de un videojuego 3D. Alo largo de la obra hemos aprendido programacién a nivel general y a nivel especifico con ciertas herramientas y lenguajes. También hemos tra- bajado con distintas aplicaciones de edicion y retoque de imagenes, tanto ‘en 2D como en 3D. Hemos descubierto las aplicaciones mas importantes. ara crear nuestra propia musica y toda clase de efectos sonoros, y hemos. aprendido la historia de los videojuegos desde sus inicios hasta el panora- ma actual. ‘Ademés, con esta obra se ha pretendido ayudar a fomentar la creatividad del lector, dandole ideas para sus desarrollos y disefios y animandole siem- pre a practicar, pues asi es como se consiguen los mejores resultados. Terminamos aqui el viaje de 20 semanas articulade en 400 paginas y 20 CD-ROMs, en el que deseamos que hayas adquirido una buena base para oder continuar a partir de abi. na mens Aprovechamos para agradecer tu confianza, esperamos que Programacién om ¥ Disefio de Videojuegos haya sido una obra provechosa y que, on defi- ea tecect net) Titiva, te hayas divertido, Ore (Madrid) Porque en el fondo, de eso se trata. Tel: 91 657 6900 evra erprensa woe berprensa.com 381 Zona de desarrollo Coneluimos #1 desarrollo de nuestro juego “Zone of Fighters" implomentan- cate do un sencilo médule multiugador Usando el protacolo UDP. REDACCION, PUBLICIDAD Y ‘ADMINISTRACION / ce io Te, 7 Pol. nd. 1 Noga”) 28110 Algete (Mac) Tel: 91 628 0203 Fax 91 628 09:35 (at nt ener) Dero Leal: Ma5e4-2002 |i: Coons 5241725 Teo 20495211741 bra ample 849226175 385 Zona de graficos 389 Zona de audio Continuamos, en esta ocasién, compl tando el patrén ritmico. edicion de patrones, 391 Blitz 3D algunos ejercicios para conocer mejor su funcionamiento. 395 Tutorial Aprendemos como realizar un instalador de nus sumartio Para finalizar la seccién de diseno gréfico hemos querido recorrer algunas de las herramientas que hemos utllizado para avanzar un poco mas en Su Uso. Seguidamente, anadiremos alguna melodia, efectos y trabajaremos con la No queremos dejar las funcionas de red e internet sin antes haber realizado tro juego usando el pro- copra 1803 Grama Inno Setup, anna sr 397 Historia del videojuego ‘Terminamos de ver los simuladores de velocidad: esta vez eprenderemos MMT acne sobre simuladores de motociclisma y de tipo futurist -"Programaciée y Diseho 6e Videojuegos” son 399 Cuestionario ‘waataamn compte, pare on cre cee ‘Cada semana un pequeno test de autoevaluacién, en este numero encon- {eects on wre wards tambien los respuestas ‘aed ur bens ae 9 se te i Irvenee nee o s sre na a oa Contenido CD-ROM {cto on ee ae ‘se sient se acshesibciniebeevsnesinrveyt nty indanipetth ee ees res ea ‘SERVICIO TECMICO: PARA ENCUADERNAR LA OBRA: Para consulas,dudastéonicasy reclamacionesIberprensa tec a siguentedreccion de core electrnic: » Tapas del volumen 1 disponibles en Iberprensa. ‘gameseberprense.com Pedidos por teléfono: 916260203. > Tapas del volumen 2 ya a la venta en quioscos. tpacrighepaencegintlinersraned £1 envio de nimoros sueltos 0 atrasedos se reaizaré contra > Los suscriptores recibirdn las tapas en su domicilio | _rembolso del precio de vent a publice més el coste de los sin cargo alguno como obsequio de Iberprensa. ‘gastos de enva. Pueden ser solicitados enol eléfono de atencién ‘al cliente 91 626 02 03 Sistema multijugador oncluimos el de: rrollo de nuestro juego “Zone of Fighters” imple- mentando un sencillo médulo multijugador usando el proto- colo UDP para dos ordenado- res conectados entre si por Fed local. ‘Como sabemos, este proto- colo es ideal para intercambiar datos entre ordenadores a gran velocidad, necesario para juegos fen tiempo real como “Zone of Fighters". Hemos implementado ‘el médulo multijugador en un programa totalmente indepen- diente, para facilitar su com- prensién. La idea basica es que uno de los ordenadores funcio- ne como anfitrién del juego (Host) y el otro como invitado 0 remoto. La jugabilidad o game- play se basard en varios modos de juego en el que las dos biona- ves lucharén en un mismo terre- no contra un numero determina- do de ovnis enemigos y segtin el juego elegido, entre ellas tam~ bien. ) CONCEPTOS BASICOS DE DESARROLLO Antes de programar cualquier juego con algun sistema multiju- gador hay que tener muy claro qué es Io que se quiere, ya que testear este tipo de programas. depende de una instalacién ade- cuada. En primer lugar, tenemos dos ordenadores que envian y reciben paquetes de informa- clon entre si a través de un mismo programa. Por lo tanto, este programa debe hacer dis- tincién entre quién es el host y quién el remoto. Para ambos casos, debemos realizar un cédigo diferente pero mante- niendo una estrecha relacion entre si. Aparte, el resto del OB bor areciin de cédigo ser de uso comin ‘como: recursos, la relacion con el entorno, la creacién de dispa~ ros, sistema de particulas, visualizacién de indicadores, etc, Los paquetes de informa- clon contienen datos acerca de la posicién y estado de ambas bionaves y su flujo debe mante- ner un cierto orden para evitar cortes de conexion. Ademés, debemos controlar al maximo la cantidad de bytes de cada paquete enviado para aumentar el rendimiento de respuesta. Por 80, solo se incluird informacion fundamental de cada jugador imposible de obtener. El resto de informacién se debe procurar ‘obtener en base a los datos dis- ponibles. Todo paquete debe ir ‘encabezado con un byte que indique de qué tipo es, ya que ‘en el protocolo UDP no va iden- tificada. Por Ultimo, el host es el encargado de crear el juego y sus caracteristicas. Por lo tanto, el jugedor remoto se adapta a elios come invitado a la partida. MODULO PRINCIPAL. PREPARANDO EL JUEGO Como novedad al cédigo de “Zone of Figthers” para un juga- dor, disponemos de varios modu- los diferentes que explicamos en esta entrega: médulo principal ("Multijugadorbb"), médulo de control del jugador local (host o remoto) ("JugadorLocal.bb"), médulo de control del juego (“Juego.bb"), médulo de control de ovnis enemigos ("Ovnis.bb") y médulo de control de red ("Red.bb"), Enel médulo principal (’Muttijugador.bb") se encuentra el bucle principal del juego, el cual llama a las demas funcio- nes. Pero antes, debemos pre- eng et Pose re eee ee ee ein) mie es oe fen) Actualizar_JugRemoto (host) Carron recite _Esquams de a relein otro un equipo remot Conectado 9 un prtign creat porn equipo Stein tot guntar al usuario si quiere ser el anfitrién 0 el invitado para que el programa ejecute una parte del cédigo u otra. Este control lo realizamos simplemente a través de la variable global “Host” (1= Host /O = Remoto) Si se elige ser el host, se le pregunta al usuario qué tipo de juego va a crear y en qué escena- rio. Si por el contrario, decide ser el remoto, es decir, unirse a una partida creada, solo es necesario preguntarie el escenario donde se ha creado la partida y la direc cién IP del host para poder entrar en contacto con él. Después de esto, ol programa ya esta prepa- rado para diferenciar a ambos jugadores conectados. El siguiente paso es cargar mode- los, texturas y el audio del juego, ‘asi como preparar el entorno y crear el resto de elementos. Seguidamente, preparamos el “stream” o fichero de comunica- cién para el envio de paquetes y creamos lo jugadores. Para esto ultimo hay que tener un concep- to claro: tanto el host como el remoto son jugadores locales: es decir, en el ordenador host, su jugador es el local y el jugador del ‘ordenador invitado es el remoto. Y para el ordenador remoto, su 381 ‘mental jgabied ya posblid de ica jugador es el local y el jugador de! ordenador host es el remoto. Por lo tanto, en ambos casos debe mos crear un jugador local Ahora bien, su direccion IP y puerto de comunicacion seran diferentes (Ver Cédigo 1) Cuando un jugador crea una Partida (host) solo tiene que crear su bionave y colocaria en el terre- no. Sin embargo, para el jugador remoto, ademas de crear su bio- nave, debe comunicérselo al host pare que éste pueda crear y colo- car en su terreno la bionave invita- da. Asi que bastara con enviarle tun paquete con su nombre de identifieacion y su posicién. Este Paquete se identifica con el nume- ro 100. Veremos luego en el médulo de red cémo se recibe esta informacion por el otro equi- po. Una vez preparada la comuni- cacién, entramos en el bucle de juego donde controlamos y actualizamos al jugador local ‘Control JugadorLocal{ JugLocal)” y "Actualizar_ JugadorLocal (JugLocal)", la comunicacion “Actualizar Red(JugLocal)” y el juego “Actualizar Juego)". Las funciones para controlar al juga~ dor local son exactamente igual a las utilizadas en el juego original de “Zone of Fighters”. La nica diferencia es que utilizamos como variables de control (Entidad, rota- cién y velocidad) los campos de la estructura " JugadorLocal” previe~ ‘mente definida en el médulo de dafiniciones: ‘type JugadorLocal Field Entidad Field yy#,velocidadé Field Estado End Type MODULO DE RED. CONTROLANDO LA COMUNICACION En este médulo controlamos todo el flujo de paquetes de informacion entre los dos jue- 0s, Dependiendo de si el equi- Po se comporta como host 0 Femoto entraremos en un con- trol u otro. Sin embargo, las ‘operaciones para los dos juga- dores son basicamente las mis- Cédigo 1. La P sera ctferente segin quien elja ser el host Tf Hoot TP = HostIP(1) Puerto. host=2001 reser$ setedrR(P) + Nombre Host$=nombres IP host=Int_1e(1PSer$) Upp_stream-Createupestrean(Puerto_ host) SJugfocal .JugadorLocal crear_gugadorlocal () Positionintity Juglocal\Entidad, 730,300,800 Hse Puerto Renoto=Rand(3000,4000) = Nombre RenotoSenonbres ‘UDP_streamsCreateuDpstream(Puerto Resto) ‘Jugiocal.Jugadorlocal= Crear_JugadorLocal () PositionEntity Juglecal \Entidad, 71300, 300,800 Weitenyte UDP strean,100 WeiteLine UDP Stream,llonbre_Rerotos Jiciteshort UDP_ stream, 7300 eiteshort UDP_strean,300 Weiteshort UDP_strean, 800 SendUDP¥sq UDP_Strean,1P host, Puerto host Endl ase mas pero orientadas a cada tipo de jugador. (#) CONTROL POR EL HOST Si hemos elegido ser el anfitrion del juego, el programa ejecutara las sentencias contenidas a par- tir de: “If Host”. Lo primero que debemos hacer es obtener el paquete que nos envian por medio de “RecvUDPMsg" en la variable "Msg". A partir de ahi, podemos obtener la direccién IP y el puerto del jugador remoto. La IP ya la tenemos en “Msg” a través de “RecUDPMsg" y e| puerto lo hallamas con “UDPMsgPort” Tf Host sg = RecvUDeMsg (UDP_strean) TP Remotomtag Puerto Renoto-UDPMsgPort (uop_strean) Lo siguiente es comprobar si realmente nos ha llegado un paquete. Si es asi, obtenemos el primer byte que, como sabe- mos, nos dird el tipo de informa- clon que trae (Tipo_Mensaje). De esta forma, podemos seleccio- nar las acciones por medio de una estructura “Select.. Case”: TE Msg "Tipo Monsaje-Readbyto(UDP_Strosn) Select Tipo Mensaje Una forma de ahorrar bytes en paquetes de informacién es evitar en lo maximo posible variables de tipo “Float”, ya que ocu- pan 4 bytes cada una. Por ‘ejemplo, si no precisamos de posiciones precisa: podemos sustituirlas por variables de tipo “Short’ que ocupan la mitad. En nuestro caso, es lo mismo utilizar 500.5, 1200.8, 300 que 500,1200,300 ya que el terreno es de grandes Como primera opcién, vamos _ tendré las coordenadas de posi- a gestionar el envio del paquete _cién X, Y.y Z dela bionave, asi remoto de tipo 100 que hizo el como dos bytes més indicando jugador remoto al unirse a la si ha disparado y con qué arma, artida (Ver Cédigo 2). Estos dos ultimos datos son Siguiendo la lectura del stre- suficientes para que el progra- am (recordemos que los datos __ma anfitrion genere los disparos en un stream se escriben yleen _y explosiones con el codigo. secuencialmente), encontramos comin. ‘el nombre del jugador remoto y su posicién. case 2 Evidentemente, si un jugador | RifeRtesdFloat (UDP Stream) se ha unido a nuestra partida ReX*ReadShort(UDP_Strean) debemos verlo en la pantalla ReYeReadshort(UDE_Stream) : Por lo tanto, es necesario crear Rez+Readshort (UDE_Stream) otra bionave como jugador DispsReadayte(UDE_Strean) remoto ademas dela nuestra ‘ArmarRoadayte(UDP_strean) (ugador local). actualizar JugadorRenato El control de esta nueva bio- (R#, RPK, RPY, PZ, Disp, Arma) nave lo realizamos en el médulo “Juego.bb". Bien, hasta aqui Debido a que el desplaza- todo perfecto. Sin embargo, si miento de la bionave y los dis- nos situamos en el ordenador _paros dependen de un pivote del jugador nuevo veremos que es necesario proporcionar el 41 solo ve su bionave y no la del dngulo de rotacion exacto al host. Asi que éste debe enviar otro ordenador en una variable un paquete al remoto comuni- de tipo “Float"(RY#). Para candole que esta dentro dela_—_actualizar esta bionave solo partida y que debe crear otra. tenemos que posicionarla en bionave que represente al host. las coordenadas recibidas, Este paquete sera de tipo 4y se controlar su municién y la gestionara en la parte del cédi-__deteccién con los bonos. g0 del remoto. Elsiguiente paso Estos dos ultimes procesos se importante para el host es podian haber sustituido por actualizar a su bionave invitada variables contenidas en el ademas de la suya propia, Paquete de informacién indi- Obviamente, esta ultima es con-_candolos. Pero, como dijimos, wrolada por el jugador pero para__hay que evitar envios sustitul- la remota dependera de la infor- bles por otros métodos. macién que reciba del otro orde- Los siguientes tipos de men- nador. Todos los paquetes de _sajes se refieren al control de la actualizacién recibidos por el __partida en si como informacion remoto seran de tipo 2ycon- _siel jugador remoto ha muerto, (Cécigo 2. Eljugador remoto envi6 un paquete de tipo 100 Case 100 jcrear jugador reaoto Yonbre Renoto$=ReadLine(UDP_stream) [PxteReadshort (UDP_Stream) :REV¥=ReadShort (UDP_stream): eztReadshort (UDP stream) ‘JugRemoto. JugadorRenoto=Crear_JugadorRemato() PositionEntity JugRemoto\Entidad, RPK, RPY, RPE Weiteayte UDP stream, 4 eiteLine UDP_stream,lionbre Host $ eiteshort UDP_Strean, Ent ityX(JusLocal\Entidad) Weiteshort UDP_Strean,tnt ity’ (Juglecal \Entidad) eiteshort UDP_Strean,Entity2 (Juglocal \Entidad) ritenyte UDP_Strean, odo Juego Weitenyte UDP strean,umovnis SendUDPMsg UDP_Strean,1P Renoto,Puerto_Remoto £1 nuevo medul para muttiugederincuye dos "pos de ambientacion erent. abandona el juego o sila partida hha terminado. Es conveniente enviar toda la informacion posible de una sola vez en un solo paquete que muchos envios de pequefios paquetes, Por eso, implementa- mos en este mismo médulo el envio de informacién después de analizar los paquetes recibidos. ‘Aun siendo el host y jugador local en nuestro equipo, en el ordena- dor del remoto nos corresponde ser el remoto y debemos mandar- le nuestra posicion y estado con- tinuamente antes de terminar y actualizar el juego (Ver Cédigo 3), (a) CONTROL POR EL JUGADOR REMOTO Si hemos elegido formar parte de una nueva partide, nos con- vertiremos en un jugador remo- to. Por lo tanto, el programa eje- cutaré el cédigo a partir de la instruccién “Else” de la funcion “Actualizar Red (ugLocel. JugadorLocal)” Al igual que ocurrie con el host, el remoto también recibe y procesa informacion provenien- te de éste con "RecvUDPMsg”, Los tipos de mensajes son igua- les pero con otro numero de identificacion diferente. Cuando nos unimos a un host debemos crear su bionave en nuestro torreno. Para allo, debemos haber recibido un mensaje de tipo 4 enviado por el host cuan- do entramos en la partida: Case 4; Crear jugador Host nbxe_Hosts-ReadLine (UDP_strean) sea ex-Roadshort (UDP_stream) : Rpv=Readshort (UDP_Strean) [RPt-Readshort (UDP Stream) Yodo Juego=Readbyte(UDP_Stxean) ‘NunOvniseReadByte UDP Strean) ‘JugRenoto. JugadorRenoto= Crear JugadorRenoto() PositionEntity Jugkenoto\ Entidad, RPK, APY PZ For n= 1 To Nunvnis Crear_ovNI() Next ‘Come podemos observar, hemos recibido también infor- macién del juego creado ("Modo_Juego” y, “NumOvnis”) y que necesitaremos para con- olar la partida en el remoto, ya que éste carece de esa informa- ion, Si recordamos, el host envia continuamente paquetes de tipo 1 con su posicién y estado al jugador remoto para actualizer su posicién. Por lo tanto, debe- ‘mos tener en este caso el mismo cédigo del host: case 1; Actualiza Host RY-Read? loat (UDP_Strean) Disp-ReadByte(UDP_Strean) ‘Arma=ReadByte(UDP_Strean) Actualizar_JugadorRenoto (RY¢, RPK, RPY, RBZ, Disp, Arma) Es importante que esté claro que esta informacién solo la utiliza el jugador remot para actualizar la bionave que repre- senta al host en su terreno de juego. Para terminar, al igual ‘que ocurre con el host, es necesario que el remoto le envie continuamente su posi- cién y estado antes de salir de la funcién. En este caso en un paquete de tipo 2 () LOS OVNIS La presencia de ovnis en el juego conlleva un envio de infor- ‘macién para que en ambos equi- pos se muestren en la misma posicién y con el mismo estado durante Ia partida. Esto trae con- sigo un envio adicional muy importante de informacion, la ‘cual debemos realizar junto a la de los jugadores en el médulo de red. Luego, dependiendo de si el programa es host o remoto, se ejecutard una funcion de actualizacin diferente para los ovnis. Para disponer de las coor- denadas y estado de cada ovni de una forma ordenada y que podamos enviarlo todo junto en el médulo de red, vamos a dis- poner de una estructura de datos temporal que almacene estos valores en la funcién “Actualizar_OVNIS Host ()" del médulo “Ovnis. bb": ‘Temp.tipo temp = First tipo temp For OWNE.tipo OVNI= Bach tipo om ‘Temp \OvELAA=OVNT\x ‘Temp\OVETY#-OVNT\y ‘Temp\OVIEIZP=OVNT\z ‘Tomp\vida-ovnr\vida ‘Temp\Disparo-OvN\ Send disparo ovr ‘Texp\Arna-onir\tipo_armanento ‘Tenp = After Temp ext Seguidamente, los datos de esta estructura los volcamos en el stream de envio, los cuales seran leidos por el remoto y Es importante mostrar una estan de osu {doe do Jago a tial de a porta ya que umenta ls competiviad entre los jugadores 10 cual invita seguir joganda que utilizaré la funcién “Actualizar_OVNIS_remotos () del médulo “Ovnis.bb" For Tamp.tipo temp = Bach tipo temp ‘eiteShort UDP_Strean,Tenp\ oINIX#: Weiteshor: UDP_Strean,Temp\OVAIU# Weieeshort UbP_strean,Tenp\OVNIZ Weitesyte UDP Strean,Temp\vida WeiteByte UP_Stxean,omp\Disparo: WeSceByte UDP_Strean,Tomp\ra Weiteayte UDP_Strean,Temp\objetivo Next Hay que recordar que el host es quien crea y desplaza a los ovnis y el remoto solo se limita a tenerlos como clones en el terre- no. Los procesos expuestos en este ntimero son los basicos en este nuevo médulo para “Zone of Fighters”. El resto del progra- ma esta ampliamente comenta- do en el cédigo fuente, incluido ‘en el CD. Siguiendo el flujo del programa y leyendo los comen- tarios es facil comprender su funcionamiento. Hasta la proxima. ‘Codigo 3. Debemes mandar continuamente nuestra posicién y estado Tf gugiocal\estado“i Weitesyte UDP stream,1 Else WriteByte UDP_stream,10 ; Muerto mate Weiterloat UDP Strean,Jugtocal\yy + Writeshort UDP_Strean,ntityy (Juglocal\Entidad) ieiteByte UDP_stream,Send disparo + SendUDPMsg UDP_Stream, TP Remoto, Puerto Renoto 384 ieiteShort UDP_Strean,Entityx(Juglocal \Entidad) liriteshort Ubp_stream,mntityz(Juglocal\Entidad) Writebyte UDP_Strean,tipo arnanento SEs Técnicas avanzadas de disefAo grafico ara finalizar la sec: Pee errs ete) eee! ee ee eet eee ae i Pere Cerne pene eee ea ea ace ce Cease eee ee jos. Practicamonte, Deop Paint 3D ee eee eee tay Pee heer ere eee cas Reece te eee eas ary eee arene aire Cena een Cr cea Rea eee cs ec ee Cen ed ee cee ere ance ee eee a eae! 2 eee Peet ee es oe eee Pee ere eet ht ea ee ee ae ] RECORDATORIO directorio “Extras” del CD. tracer earner Cree weaenetacis Dee reales Apareceré el modelo de espal- Ce gy ee ea eae See eae eee oe Pee ome es a ad Pen yaaa’ CO ee es Reet eae ene eee keene! x poco obtner sexu an uns napa vent. Pree ear) rm para rela cambios en 20. Renee ae naertns Peete ee oe) [ee eae ney Pentre nani att eset ee a eee Pee ec et aca ed eee Sey Pree ee roth ne ee caer eee Cee aon ears Pees iets eee eet ene eae ae eerie et) See eee) Perea eect aes) focus keen eed Cee eet ee Pee ara t) eee kaa Peary eee seen Sauna ieee ce eer) Seen sett ine Peerless Pte ee ee een Renee ata eee ee ee Pree atts eee eee eee ne laure de tetas rel por igual on 20 30 PRCT | cetmente en el mode Reem eae Boe eee) Peace ges ence ely seccién de capas (F7) y elegir la eae eae eee eae ke ree es ents es) ane eo es eee era Pee en cet) eee er ua) Sea ca eo Preeti nee eet eae tates Pete ee ee eas eet en ome ae) Cee ener ea et eae eee) ates Rese cin cr (Cote ort ne nee reek Bre eee) eee ee eed eed Eee eae eo ee Sent ae ne Ree eee ec) Pee oe eae Ba eer Reese ete a ee eae eae) cores oon es ee ea teed Eero ca aera eee Teer See eee ce Pee oa enor) eee ete Sena eee eet eee ess Ce cece neo Peete hs ear) Layer, © bien Clear Layer para ee eM ee Pre eaeee eteee Cea Bren ee ee eae eee eee Reems eee ead Ree eee Rey eee ee cic) ieee a rong Perea ees Peete can too ene ue eC ed Se eee poe arn) ene sauna Nac Poe eee ee Eee eee eit Pee tne) Peet a eee eee eons Parana r Mortars Be Rees Peete ee ees see Poe as ieee en ees ee ea eee Bene ae a eee Pree ae caries Cee tae Ree a eed Pee ey) Sheet ne it cts sertar puntos y el de la derecha Pees ane) Peete eer ee Rear raat) editable. Con ol primer icono Bee eee et ee ay eric ees rere raat Pre Re ay ee ttm Peet Team! a Poe ence rae ae nic) (Scale) de 4 y elegimos un color et ee ea Cee ee ee Pee earl cee ae ee ae aecl ear a ied vere) Rene ei eee ea ae eee ea ac Cee ea eee eee aed Bene Westar ee CO ag een eee ae een Sate rer ames HL Ce ee Perego ee neta Nee Te a) Rea art nee oceans) eee arate) Peek ee ne ett ae ea ya ete ea Ree eae eee ett eee ere Perera etter Ra oer een modificar la intensidad y posi- arena ee tase kate pre cet et re Sree arose) ore renee Ce ace Peerage ee ene rr a eae ae Bret ae achat Boece ta ce) eee eee ee ae eee Mere eee ares Pee EE heard eee anc! repre eae ener Cee eee) Peer ee eae Peete eee ee Peeve ue ier) See eae a oad eae ate a ere eon ee tare ee ee ae) See ee aaa ra) y en alambrico (wireframe). One ees sactivar cada uno de los atribu- ene ears Para cambiar el color del fondo Pea roe eee eo amen Fig. 8), ee eee eee) Peete et eat) Peasant ae ee cay et ae eee) ea ee eee a Pteerere etary Saeco teen 7) Videu| eee aaa YA eet Rena ee ee Aen omnia ae acy eae eee ‘mos la ventana de previsualiza- Beet rore eaten ee eee ei Cee te nce ee ed ae Ree racer ee) ae can Prete ac La primera de ellas seré la base Peer Nae) ero tne ee a Coes encased Varn recat un recuadro que englobe a los Pree ee aed) een Bane ee ed Sree eos een ten tera Peres eer eT Perens rte iy) Eee eee re ues Yukon Core eee res Perea ee res Cee rea) Pcs) ree ee ees ee id ieee aerate ees Steet es eee eee ato Pers eee tere pene eee ace peer ee tae 2 a Ce ea te tien tate Peete ee cae ee eas Peet uri ene aa ee ae Peo e amen ena ee oc e aac e rata ae PRR ee eee) Re een Sees eee eee eee ae cake kaos tenida en “Extras” del CD "mu- Peete ecet a Dee et eto Ree eer crs! Peete eet Pts ee [eee ee tars enna ey Perea eae a Pee tae ead eae eae Pea eed eC eee eee eee Pea eae oe Peete eee eee a aE ae ee eee eens oe ee cco Praeger) eae eee sa eee eee ete oy eae ee ey Pe Reset ke) eee eee ae a eee eee ene Pee nc Pret Rec Ce aca) ee eens ee eer tres eo ec crey Cee we eee Geo) eee Oar ete xeles de la capa activa con los cee eo er eae eee een Cee ee eee cl ee eee RAC en Cee eae RO en amie (Cee la RRroed (eter ieee area eee ea) eee ace acca ee ae cata See etree ely eer ee eed ter ee ky oe aaa Sioa eee ey ere ee tenn eee atest Se ae ers Pee ed ane aed ee ae Cre eee een ae Pee ce eS eee tae Pe eee ens eee ess em) eet ere entry eee ara) Pee ett eae ee een ets Pee eg tee aes eee ren eee) Peete ete nent} incidencia y su radio de accion eee ent ed eee re cg ed eee eg ee eed situamos como se muestra en Chee aed ee ence ees Cee Pree icast rc) eRe E i, 5 Seon cony cy oer Tr eee Preeti eri Coe ok pee eee ety Ee aren ener y ae peers Pere eaee uc) eee a etre ene ea rr Poe reer) Coe rae acc eee ernie Peter nee uri Ce ae eee a ka eae aa eee ae ca eee ear ae eee ees Pica aerate Cease ees Secuenciadores trackers (yl) Rac Cee oe peace) Seer a) cee eet Pee ena Bicester eee aca eeeeee i ecats Pees eee rs pear eae ene eet ns ee es Coreen Rar Ca ac ee ea) ee ee ee eg Teen) eee ea) Pee aes Cree eee re eee eee EArt ad Pee ane er errca Pe ER esd eee t gl ee eo as eae ae ete ec ntaceats Beene aot eee erat eee) Ceasar) een eeat ance) basice en el canal 4. ee eee! En ee eens Peres Poem aes olor ed Poet a eso niy ee eee Poet ee eco oer) See ec Cee cas eee ee enemy Cac Ear que la muestra sonaré completa Peake ce teces Cree Re ee Pree ena a te eee ea em ein Pe ee er) eee re Peete ee) Pe tee te) Pee ee Co eee ee te eee Sa are Poets ee aC eco ect) ek me ens Oe ee eter ate Pen ee rer eee’ a eh Ee koe Pere ere werd Set ee BROCE Te mre ted inc. ON inc. ON Colocando ls nots de maracas deforma mis © Nee eee peat mee Cree eee he ee See ee ne a Bete een tee ee ee ener ce Peete a ee ee) Bee ance ee ee eee ee rear eee ae ee ere Pence tt oent aa eae ore eee ete een nec tes eee (Fig. 2) See ea) Nene ata eae Oe ett Mea aes asa eee es eee ee ey pee ee tre ete ee ee ore eee ee et as Oe a a Rr ty eee te mene te ee Cree ee ora kee rey Re ee eee eee aed 7) Lise} eee eta art Se eee eee ee at Peres eae te el ae Pee ee ee ee eee Rete eet a ee eee en eer ts anasto a) eee ee ae ee een ema Tee) er eat ge ee Eee PEPER ota solitaria se mantiene so- _de acordes a partir de combina fen varin canal vee Pane asa fee ee See eT at Cee ee et ee ete aed Pe cae et eee ee eee Pea ae me ees inka ed siga sonando solo hasta el final _notas del acorde. Una vez activa: ee ar Ey mos aplicar una bajada de su vo- abrir el editor de acordes Chord ee ee ee een ne a ee ed eee ee ea Roe atten ay ee eee eed ee as Pe ee an een ae ey Pent ee eee ee et Pee ea ae ee ora ne ae Pree? do. En la casilla Shortcut Key ele- La posted de tar una combina do Cee ocean eee eee tes del ordenador pare produsr sods nos Ceca! preter eec sero seer fen ee eee ee eed) ene ee ce he ee OOM eo ee ee ae TRUCO plo, si queremos modificar la ve- _elegidos previamente las notas see eee eae eae ee a Ror Pete ee reset ae a) Pee wees aed eee A pece a saer nn ae eee as Serene ae eet meron eee ney enn et ney eee ene! ey eet esi Funciones de red Cy Ill y ampliacion del lenguaje ‘© queremos dejar las |/Hor iii) He) Conti) funciones de red e TPlocal$=TPiccals+DottedIP internet sin antes (Host2>(n)) haber realizado algu- Nex: nos ejercicios para conocer _—_—Bppitle "IP Toes] = "/4Plecal mejor su funcionamiento. También damos a conocer Para obtener la IP local utiliza algunos trucos que nos ayu- mos la instruccién darén a optimizar nuestro “CountHostlPs”. La instruccion codigo y que mostrames en —_“GetEnv” nos proporcionara el las figuras 1, 2 y 3. nombre del equipo en la red. Por tiltimo, hablaremos de las Después de obtener la notacion posibilidades de ampliacién del__de la IP preguntamos a qué direc- lenguaje y de su futuro préximo. _cién IP vamos @ comunicarnos. Asi que la pedimos en notacién @ CHATEANDO 1.2.3.4 y luego la convertimos a POR UDP la notacién de numero entero Eneste primer ejemplohemos —_que entiende Blitz3D: querido realizar un sencillisimo programa que permite hablar Locate 10,20:1epests=tapue§ entre dos ordenadores conecta- | (*P Destino? *) dos por red utilizando el protoco- | 1PDestinos intIe(1PbestS) lo UDP. El fundamento es que el mismo programa envie y reciba La funci6n “IntIP* simplemen- mensajes utilizando un puerto de te transforma ol string con nota- entrada y salida y otro de desti-—_cién 1.2.3.4 a. un numero entero no, el cual equivale al de entrada, (Ver Cédigo 1). Ademés, utilizamos dos streams —_Para lio, isiamos los cuatro para albergar los mensajes de —_nmeros separados por un punto y ‘envio y llegada, Cada ordenador —_ sumamos sus valores previamente debera introducir la direccién IP _calculados con la funcién “Val”: dol otro para establecer la comu- nicacion, inction val (strings) Al principio del programa se valor=0 pide la IP del equipo local para Tf Left(Drin(strings),1)="-" ‘obtener informacién. Esta IP se ‘signo=-1 visualizara como titulo dela ven- Else tana! signe! mndlt ‘Conttp-countHost Ps (GetBav For nel To Len(strings) (*tocaltiost”)) ‘orAsc (Mids (StringS,n/1)) Cédigo 1. Funcion “intiP” ‘unction inei® (125) aisval (Loft( PS, Instr(1PS, adeval(taft(1P5, Inst (10S, ateval (Left(285,Inotr (10S, afeval(IE8) Return (al ShL 24) + (a2 hl 16) + (a3 Shl 8 ) 408 Bd Function 1) :1PSsnight (12S, en(1P$)-Instr(1P6," PSRight (29, Len(1P9) Inst," PS-Right (159 Len(1PS)-tnstr(1P5," 3f GAT And c<58 ‘then m= valor : mm shi valor-valor shi 3 valorsvalortarc-t8 EndIf TE on46 Exit Next valor-valor*signo Return valor End Function Esta funcién simplemente con- vierte un string en un nimero con Signo incluido, recorriendo cada uno de sus caracteres y convirtién- dolo con la instruccién “Asc” Seguidamente, pasamos a dofinir los puertos y a crear los streams de entrada y salida. Busrtoentrada4000 PuertoSalida 6300 Buertodest:ino=6000 ‘Ubp_Streank=createuDestrean (Puertomntreda) UDP_Streanii=createvDestroam (Puertosalida) Ya tenemos el programa pre- parado para enviar y recibir men- sajes. Por lo tanto, ya pademos entrar en el bucle principal del programa. La idea es que a medi- da que escribamos los caracteres ‘se imprimiran en el otro ordena- dor, admitiendo también el cam= bio de linea con la tecla “Enter” Para ello utilizamos la funcion “GexKey()" para obtener los caracteres desde el teclado uno a uno. A medida que tecleamos enviaremos cada cardcter al otro equipo a traves del stream de salida "UDP_StreamWV". Igual ‘que los caracteres, enviamos el cambio de linea, el cual corres ponde al caracter 13: ‘TeclasGetkey() If Teola>d If Tecla=13 Print 31 EE Writebyte(UDP_Streanl, ecla) SendUDPHsy UDP Streant, TPDest ino, PuertoDest ino Else rite chr(Tecla) ritenyte(UDP_Streantl, Tecla) SendUDPMag UDP strani, IPDest.ino,PuertoDestino malt malt Por ultimo, nos queda recibir el mensaje del otro ordenador. Para ello, utilizamos la instruc- clon “RecUDPMsg” y el stream de lectura "UDP_StreamR”’ Mensa je=RecvUbeMsg(UDP Stream) TE Mensajeoo Longitud-Readavail (Uoe_streane) Tf Tongitue>d caracter-Readsyte (woe streams) If Caracter=13 Print Ese rite Chr(Caracter) mart mart mare Antes de leer @ imprimir el caracter en pantalla comproba- mos que hemos recibido un mensaje correcto a través de su fongitud Evidentemente, para probar este ejemplo debemos tener dos, equipos conectados entre si por cable de red. @ INTERNET ‘Queremos mostrar unos peque- fios ejemplos de comunicacion a traves de internet utilizando e! protocol TCP/IP. @ ENVIAR UN EMAIL En primer lugar, mostramos la forma mas sencilla de enviar un ‘email a una direccian de Internet utilizando la funeion "OpenTCPStream". Para poder establecer la comunicacién debe- mos introducir la direccién donde queremos enviar el email. En este caso es admisible la notacion "www" o bien "1.2.3.4" 382 Dixecoions=Input$ (*DIRECCION (notacion IP 0 wwe)? “) ‘Texto=Inpat$(“Bscriba el mnail:*) Una vez introducido el texto que queremos enviar ala direc- cién especificada, abrimos el archivo de escritura con “OpenTCPStream": ‘mmail-dpercestrean (Direccion$, 60) If Not Enail Runtimetrror (ERROR EM LA. CONEKTON”) Si la operacién devuelve un valor nulo salimos del programa con un error. Si la comunicacion se ha inicializado correctamente pasamos a mandar el texto escri- biendo el stream abierto, WiriteLine mail,texto Print “EMAIL: Print “<* + Textot” > Print “ENVIADO CORRECTAMENTEY ® ACCEDER A UN SERVIDOR tra utlidad interesante es la pos bilidad de acceder a un servidor para enviar o recibir archivos. Presentamos un pequerio ejemplo de apertura de conexién con un servidor determinado. Simplemen- te, mostramos cémo acceder des- ués de introducir el nombre de usuario y la contrasefia, En primer lugar, debemos pedir la direcci6n de! servidor para poder abrir el archivo de comunicacién: Servidors = Input ("2Direcci6n del Servidor? *) ‘Comin cacion-opentCPStrean (Servidors,21) El siguiente paso, después de detectar si ha habide conexion, @s pedir el nombre de usuario. Este se enviara precedido de la directiva "USER" necesaria para que el servidor reconozca el tipo de orden enviada: If ict Coounicacion Runtinerror (ERROR NIA CONEXTON”) Usuarios=Input $(“2Nombre de usuario? “) Ordeng="USER"+Usuario$ WriteLine Comunicacion,Ordens Hacemos la misma operacion con Ia contrasefia, esta vez con la directiva "PASS" Pass$-Input§(“éContrasefia? *) orden$="Pass"*Pass$ WriteLine Comunicacion, Orden$ Una vez realizadas todas las ‘operaciones de enlace con éxito pasamos al bucle principal, el cual utiliza mos para enviar todas las ‘rdenes que queramos al servidor: Repeat Mensa jeS-feadineCominicacicn) Print Mensajes ‘rden$=Tnput ("zoperacion? >*) WeiteLine Comnicacion, Ordens Until ordon$="Pin* Como podemos comprobar este tipo de operaciones os real- mente sencillo y proporciona una gran flexibilidad para desarrollar aplicaciones para internet. ® DIRECTPLAY No queremos dejar el uso de las DirectPlay con las funciones para TCP sin mostrar un sencillo ‘ejemplo de cémo crear un juego multijugador con ellas. La idea basica es mostrar en pantalla un jugador local y uno remoto representados por una pequena esfera de distinto color. Ambos son movidos por el usuario con los cursores. El jugador local vera su esfera moverse en su pantalla y en Ia del otro ordena- dor y viceversa. Al principio cre- amos un jugador local y cuando #1 remoto se una creamos oro con diferente grafico. Este se moverd siguiendo las coordena- das recibidas a través de la red; es decir, cada jugador envia al otro equipo sus coordenadas x @Y, y ambos las utilizan para mover al jugador remoto. Para ‘empezar, y después de definir las estructuras para cada juga- dor, debemos preguntar quién hard de anfitrion; es decir, quién creard el juego, lo cual almace- amos en la variable “Host”. En 1 ejemplo no usaremos la ven- tana estandar de las DirectPlay de Windows. Para ello, utiliza- mos la funcién “HostNetGame" Deere ae

You might also like