Anda di halaman 1dari 29

Interacciones móviles: extensiones de la comunicación

¿Cómo se hacen los juegos para móviles?

Julio 2005
David Bueno Vallejo

Índice
• Consideraciones generales de los juegos
• Inteligencia Artificial en los Juegos
– Carreras de coches
– Path finding (b
(bú
úsqueda de caminos)
– Juegos mesa
– Shooting games (FPS -First Person Shooter
Shooter))
– Dead Reckoning (shooting games
games,, red)
• J2ME
– Introducció n
Introducció
– Primer programa
– Interfaz de usuario
– GameCanvas
– Ciclo de vida de un juego
– Sprites,, TyledLayer
Sprites TyledLayer,, Scroll
Scroll,, Colisiones
– Almacenamiento (RMS)
– Bluetooth
– Versiones de prueba
– Comunicaciones
– Sonidos, vibració
vibración, iluminació
iluminación
• Referencias
2

1
Consideraciones generales de los juegos
• En la programació
programaci ón de videojuegos es necesario prestar
atenció
atenci ón al elementos té
técnicos como:
– Lectura del dispositivo de entrada: teclado, rató
rató n, volante,
joystick,, keypad
joystick keypad……
– Refresco/Modos de pantalla
– Uso eficiente de la Memoria
– Tama
Tamañ ño del programa
– Gesti
Gestióón de colisiones
• Y a otros como:
– Objetivo del juego
– Jugabilidad
– Capacidad de motivació
motivació n
– Calidad grá
gr áfica
– Multijugador o Red
– Inteligencia Artificial
3

Inteligencia Artificial en los Juegos


• Desde hace mucho tiempo se ha intentado que los
ordenadores muestren cierta inteligencia
– En el siglo XIX, Babbage
Babbage,, arquitecto de computadoras, pensó
pensó en
programar su mámá quina analí
analí tica para que jugara al ajedrez
– En los 50, Shannon describi
describióó los mecanismos que podí
podían usarse
en un programa jugara al ajedrez
– Tambi
Tambié én en esa decada
decada,, Turing describi
describió
ó un programa para
jugar al ajedrez pero no lo construyó
construyó
– En 1952, Arthur Samuel construyó
construyó el primer programa de juegos
importante y operativo, jugaba a las damas en un IBM 701 y
podíía aprender de sus errores para mejorar su comportamiento
pod
– En 1966, Joseph Weizenbaum desarrollo el programa Eliza Eliza..
Simulaba una sesió
sesión con un psicó
psicólogo
– En 1997 el ordenador Deep Blue de IBM gana al campeó campeón del
mundo de ajedrez Gary Kasparov

2
Carreras de coches
• En este apartado se pretende dar una idea de có
cómo un juego de
coches genera los enemigos inteligentes
• El primer paso consiste en dividir el circuito en sectores
• Cada lílínea que separa el sector indica por donde deberí
debería pasar el
coche

Carreras de coches
• El jugador conoce el sector en el que se encuentra, la distancia al
principio, final y posició
posici ón de otros jugadores
• Para hacer jugadores má
más inteligentes, pueden mirar en la lílí nea de
carrera de varios sectores má
más allá
allá de su posició
posici ón actual
• Esto le permite ajustar la aceleració
aceleració n y direcció
direcció n
• El algoritmo má
más sencillo para adelantar consiste en seguir la linea
de adelantamiento
• Una forma rá
rápida de generar la lílí nea de carrera es almacenando los
datos de la mejor vuelta de un jugador humano.

3
Path finding (B
(Búúsqueda de caminos)
• Uno de los problemas que deben resolverse en muchos juegos es
encontrar un camino para ir de un punto a otro
• El algoritmo A* utiliza búsqueda heurí
heur ística y es uno de los más
empleados con sus muchas variaciones
• Para cada nodo del camino se tiene en cuenta lo que cuesta llegar
llegar a
ese punto y el coste estimado desde ese punto hasta el final
• La estimació
estimación que suele utilizarse es la distancia de Manhattan
• Se tienen dos listas de nodos
– Abierta. Con los nodos que pueden visitarse en cada iteració
iteració n
– Cerrada. Con los nodos ya visitados

Path finding (Algoritmo Bá


Básico
sico-- simplificado)
1. Se selecciona el punto inicial y se vací
vacían las 2 listas
2. Se asignan los valores de coste a destino y a final al nodo inicial
inicial
3. Se añ
añade el nodo a la lista abierta
4. Se selecciona el nodo con menor coste de la lista abierta y se
almacena en la lista cerrada.
1. Si es el final termina
terminaàà Camino encontrado
2. Si la lista abierta esta vací
vac ía à No ha solució
solució n
5. Selecciona los nodos conectados con el anterior. Para cada uno:
1. Si no estaba en ninguna lista se añ
añade a la lista abierta
2. Si estaba y el coste nuevo es mejor, se actualiza el coste y el camino
hacia el
3. En otro caso no se hace nada
6. Repetir desde 4

4
Demo Path Finding B ásico (J.A
(J.A.. Chacó
Chacón)

Path finding (tres pasos)


• El algoritmo A* bá
básico tiene le problema de que el ‘jugador
jugador’’ no
avanza hasta que no ha calculado el camino completo
• Eso da un efecto raro pues decimos a nuestro personaje que se
mueva y se queda parado un rato poniendo nervioso al jugador
• La solució
solución es usar el algoritmo en 3 pasos
– Camino rárápido. Avance inmediato hacia el destino (en lílínea recta)
– Camino completo. Mientras tanto se calcula el A* desde el destinodestin o al
final del camino rá
rápido (donde colisione)
– Conexi
Conexióó n entre los dos caminos

10

5
Demo 3 pasos

11

Path finding
finding-- Táctico
• Cuando hay enemigos que pueden representar una
amenaza para el jugador. Se puede implementar una
variante tá
t áctica de A*
• La idea consiste en dar un coste mayor a las celdas en
las que un enemigo tiene contacto visual

12

6
Demo Path finding Táctico (J.A
(J.A.. Chacó
Chacón)

13

Juegos de mesa
• Ajedrez, Othello
Othello,, Damas, Cuatro en raya
raya……
• Algoritmo Minimax
– Este algoritmo toma la situació
situació n actual del tablero
– Prueba los posibles movimientos del jugador actual intentando
maximizarlos utilizando una funció
función que evalú
evalúa la situació
situació n del tablero
– De forma recursiva, para cada una de las situaciones obtenidas se
miran los movimientos del contrario intentando minimizar la funci funció n de
evaluació
evaluación
• Es decir, seleccionando los mejores movimientos del contrario
– Las llamadas terminará
terminarán por:
• Se alcance un nivel de profundidad suficiente
• El tiempo de bú
búsqueda esté
esté restringido
• Uno de los jugadores gana
– la decisió
decisió n minimax maximiza la utilidad bajo el supuesto de que el
contrincante jugará
jugará perfectamente para minimizarla
• Poda alfa-
alfa- beta
– Se dejará
dejarán de explorar las situaciones que no lleven a obtener
resultados relevantes
– Esto permitirá
permitirá analizar má
más situaciones útiles a mayor profundidad
14

7
Juegos de mesa:
mesa : Cuatro en raya
• Como ejemplo se muestra una implementació
implementaci ón de las
cuatro en raya
• Caracter
Caracteríísticas
– Permite 1 o 2 jugadores en el mismo terminal
– 2 jugadores por bluetooth
– 3 niveles de dificultad (fá
(fácil, medio, difí
difícil)
– Música
– Vibraci
Vibracióón
• Inteligencia de la má
m áquina con minimax
– Con poda por niveles 3, 5 y 7 para cada dificultad

Autores:
JOSÉ GUERRERO BENÍTEZ
JUAN DANIEL GUERRERO LUQUE
JOSÉ ÁNGEL RELAÑO GALLARDO
JUAN RIVAS ORTIZ
15

Juegos de mesa:
mesa : Cuatro en raya
• Funci
Funcióón de evaluació
evaluaci ón
– Cuenta el nú
número de vecinos del mismo color en las 4 posibles
direcciones (horizontal, vertical, diagonales)
• Para cada posible posició
posici ón de la ficha se evalú
eval úan
– El ordenador mueve con negras
Posición elegida (5ª columna)

-300,-300,-300,2,3,-300,-300

16

8
Juegos de mesa:
mesa : Cuatro en raya
• Otra situació
situaci ón
– No habrá
habr á un ganador pronto, pero una de las posiciones destaca
con respecto a las demá
demás por dar varias opciones de victoria

Posición elegida (5)

3, 3, 3, 3, 4, 3, 3

17

Shooting games (FPS


(FPS--First Person Shooter
Shooter))
• Curiosamente en los juegos es má
más difí
difícil hacer que el ordenador
falle que acierte
• Hay que intentar que el jugador IA falle por poco para dar sensaci
sensacióón
de realismo al usuario
• Para no tener que realizar cálculos excesivos en tiempo real, en
algunos juegos se marca un punto en la parte superior
derecha/izquierda del jugador al que el jugador IA apunta
• Si el objetivo está
está en movimiento se utiliza la técnica de Dead
Reckoning que se describirá
describirá a continuació
continuaci ón

18

9
Dead Reckoning (shooting games
games))
• Los algoritmos de Dead Reckoning predicen el movimiento
• El origen fue una herramienta para navegantes.
– Un barco puede usar té cnicas de dead reckoning para estimar la
posició
posició n de su barco dado su posició
posició n original, el camino deseado y la
velocidad
• En dominios militares se utiliza para estimar movimientos de flotas
flo tas o
trapas enemigas entre diferentes saté
satélites, radares o contactos
visuales
• Ejemplo para juegos militares:
– Si hay un objetivo a 150 metros, que se mueve a 1 metro por segundo
segundo
a la derecha y la bala viaja a 50 m/s. Cuando llegue al destino el
objetivo ya no estará
estará en esa posició
posició n
Correcto
(Dead Reckoning)
Fallado

19

Dead Reckoning (juegos en red)


• Los juegos en red tienen problemas a la hora de sincronizar los
diferentes jugadores en cada ordenador
• Lo que todos los jugadores vean en sus ordenadores debe ser lo
mismo
• Una primera solució
solución es mandar todos los movimientos que se
realizanà
realizan à Coste excesivo de recursos de red
• La segunda solució
soluci ón es el dead reckoning
– Só lo se mandan algunos datos. Cada ordenador planifica
independientemente hasta que se llega a un umbral de error
– Si se llega al umbral se vuelven a actualizar los datos

20

10
J2ME :Introducci
:Introduccióón
• Se llama J2ME (Java Micro Edition Edition)) a las
implementaciones de Java par dispositivos mó
móviles
• Hay varias implementaciones dependiendo del tipo de
dispositivo

Teléfonos, PALM, Blackberry à CLDC y MIDP


PDAs Pocket PC à Personal Java (jdk 1.22)
Blackberry à API propia

• En esta presentació
presentaci ón se ve la implementació
implementaci ón
relacionada con Telé
Tel éfonos Móviles, PALM y Blackberry
(API MIDP)

21

Introducció
Introducci ón

El universo de J2ME. Imagen de [Knudsen2003]


22

11
Introducció
Introducci ón

Componentes software de MIDP. Imagen de [Knudsen2003]

23

Primer Programa: Hola Mundo


• A continuació
continuaci ón se va a realizar el primer programa:
HolaMundo
• Primero se compilará
compilar á y ejecutará
ejecutar á en el PC en un
emulador
• Despué
Despu és se enviará
enviar á al mó
m óvil y se ejecutar á en él.
• Los pasos son los siguientes:
1. Con un editor de texto escribir el programa de la
transparencia siguiente. Guardarlo como
HolaMundo.java

24

12
Primer Programa: Có
Código y explicació
explicación
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class DBVHolaMundo extends MIDlet implements CommandListener {
private Display pantalla ;
private TextBox texto1 ;
private Command salir;
public DBVHolaMundo() {
pantalla = Display.getDisplay(this); // Devuelve un manejador de la pantalla
salir = new Command("Salir", Command.SCREEN, 1); // Crea un nuevo comando para Salir
texto1 = new TextBox("Hola Mundo", "Mi primer MIDlet", 40, 0); // Crea un cuadro de texto
texto1 .addCommand(salir); // A ñade el comando al cuadro de texto
texto1 .setCommandListener(this); // Indica que la gestión de evento se hace en esta clase
}
public void startApp() { // Se ejecuta al comenzar la aplicación
pantalla .setCurrent(texto1); // Muestra en la pantalla el texto y el comando
}
public void pauseApp() { } // Se ejecuta si se interrumpe la aplicación
public void destroyApp(boolean unconditional) { } // Se ejecuta al terminar
public void commandAction(Command c, Displayable displayable) { // Gestiona los eventos
if (c == salir) { // Si el evento es pulsar el botón salir, termina
destroyApp(false);
notifyDestroyed();
}
}
}
25

Primer Programa: Proyecto


2. Abrir el programa Ktoolbar (c:
(c:\\j2me
j2me\\WTK23
WTK23\\bin
bin))
1. Seleccionar New Project

•Esto crea la siguiente estructura en c:\c:\ j2me \WTK23


WTK23\\ apps
apps\\ HolaMundo
•Hay que guardar en src el cócó digo (.java) (HolaMundo.java
(HolaMundo.java anterior)
•En classes se guardará
guardarán los (.class
(.class))
•En bin se guardará
guardarán los ficheros que hay que enviar al mó mó vil (.jad
(.jad y .jar
.jar))

26

13
Primer Programa: Generació
Generación
2. Ktoolbar
2. Compilar/Enlazar el có
có digo con el botó
botó n Build

27

Primer Programa: Ejecució


Ejecución en emulador
2. Ktoolbar
3. Seleccionar el emulador en el desplegable Device
4. Ejecutar mediante el botó
bot ón Run

•Siguiendo estos pasos se pueden probar todos los


programas que se realicen en el emulador. El siguiente paso
será
será pasar el programa al telé
telé fono
28

14
Primer Programa: Preparació
Preparación para el mó
móvil
2. Ktoolbar
5. Editar datos del proyecto: (Project
( Project àSettings
Settingsà
àRequired
Required))
Nombre del perfil. Por
defecto es MIDP-2.0. Si
el teléfono sólo es
Nombre del
compatible con MIDP -1.0
proveedor
es IMPRESCINDIBLE
cambiarlo. (Por ejemplo,
para el Nokia 3650)

Información sobre versiones soportadas para todos los dispositivos:


http://jal.sun.com /webapps/device/device

6. Generar los fichero .jar


.jar y .jar
.jar:: Project àPackage
Packageà
àCreate Package
7. Los 2 ficheros a enviar al telé telé fono son: HolaMundo.jad y
HolaMundo.jar,, guardados en c:
HolaMundo.jar c:\\ j2me \WTK23
WTK23\\ apps
apps\\ HolaMundo
HolaMundo\\ bin
29

Primer Programa: Enví


Envío al telé
teléfono bluetooth
3. Enviar los 2 ficheros al telé
tel éfono por bluetooth
1. Instalar dispositivo bluetooth en PC (Como ejemplo se
explicará
explicar á n los pasos para el dispositivo Bluetooth 3Com)
2. Arrancar en el PC el Bluetooth Connection Manager (o
programa similar que traiga el Bluetooth
Bluetooth))
3. Encender en el telé teléfono el bluetooth (Normalmente:
Conexionesà
Conexiones à Bluetooth
BluetoothààActivar
Activar))
4. Si todo va bien J el PC veráverá el
telé
telé fono. Con el botó
botó n derecho
sobre el icono seleccionar enviar
archivo
5. Seleccionar los 2 ficheros
HolaMundo.jad y HolaMundo.jar
y enviarlos al telé
teléfono

30

15
Primer Programa: Enví
Envío al telé
teléfono bluetooth
3. Enviar los 2 ficheros al telé
tel éfono por bluetooth
6. En el telé
teléfono se recibirá
recibirán 2 mensajes. Uno por cada fichero.
Aceptarlos.
7. En el menú
men ú mensajes
mensajesàà Buzon de entrada del telé
teléfono Abrir el
fichero HolaMundo.jad
HolaMundo.jad.. Aparecerá
Aparecerá un mensaje como:
¿Instalar HolaMundo 1.0 suministrado por David Bueno?

8. Donde el nombre de la aplicació


aplicación, la versió
versió n y el suministrador
son los que se hayan seleccionado al editar los datos del
proyecto
9. Si la instalació
instalación es correcta, se podrá
podr á ejecutar la aplicació
aplicación en
el menú
menú del telé
teléfono Aplicaciones
Aplicacionesàà Hola Mundo

31

Interfaz de Usuario en J2ME


• Hay 3 formas como un usuario puede interactuar con las
aplicaciones
– Command.
Command.- Son acciones que se asocian a los botones que el
usuario pulsa en el dispositivo para realizar alguna tarea
– Screen
Screen..- Interfaz de alto nivel con alertas, formularios, cuadros
de texto, radiobuttons
radiobuttons,, checkbox
checkbox,, listas similares a las utilizadas
en HTML
– Canvas.
Canvas.- Interfaz de bajo nivel en la que el usuario trabaja a
nivel de pixel
pixel,, utilizadas para aplicaciones como juegos

32

16
Programa: DBVCommands (Commands
Commands))

33

Programa: DBVChoice (Screen


Screen))

34

17
IU: Canvas y GameCanvas
• Canvas es la clase bá
básica para trabajar con la pantalla a bajo nivel:
Dibujar pixels
pixels,, lineas
lineas,, figuras, etc.
• GameCanvas mejora Canvas incluyendo carga de Imá
Im á genes, Sprites
Sprites,,
TiledLayers y un mejor control de los botones del telé
teléfono
• Estas clases son la utilizada para hacer los juegos Java que han
hecho tan populares los mó
m óviles
• La programació
programació n de juegos se convierte en algo mucho mámás sencillo
que en cualquier otra plataforma
• El programador no tiene que preocuparse de problemas clá clásicos
como:
– Refresco de pantalla, doble buffering
buffering,, colisiones, gestió n de capas o
mapas
• Las clases anteriores se encargan de todo el ‘trabajo sucio’
sucio’

35

IU: GameCanvas (Ciclo de vida de un juego


juego))
• Las aplicaciones no suelen utilizar directamente
GameCanvas,, sino que heredan de esta clase
GameCanvas
• Como mínimo hay dos clases clases:: Una para el midlet
principal y otra para la clase que hereda de GameCanvas
• El juego suele ejecutarse en una hebra independiente
con el siguiente bucle principal
// Dentro de la clase que hereda de GameCanvas
public void run() {
Graphics g = getGraphics();
while (jugando == true) {
colision(); // Controla colisiones
leeTeclado(); // Lee acciones del usuario
dibujaPantalla(g); // Dibuja la escena actual
try { Thread.sleep(retraso ); } // Retraso entre iteraciones
catch (InterruptedException ie) {}
}
}

36

18
IU: GameCanvas
GameCanvas:: Sprites
• La clase Sprite maneja los personajes del juego
• Carga del Sprite en un fichero con 5 posiciones
• Se indica el tamañ
tamaño de un elemento
Sprite babosin;
24
Image imagen;
imagen = Image.createImage("/babosin.png");
babosin = new Sprite (image,16,24);
16

0 1 2 3 4

24

80 Fichero: babosin.png

37

IU: GameCanvas
GameCanvas:: Sprites
• Para mostrar el sprite hay que seleccionar la posició
posici ón de
pantalla
• Tambi
Tambié én cual de los frames se va a mostrar
• Y có
cómo quiere mostrarse: Su posició
posici ón original, invertida
o girada en x grados
Sprite.TRANS_NONE , Sprite.TRANS_MIRROR, Sprite.TRANS_ROT90, Sprite.TRANS_ROT180,
Sprite.TRANS_ROT270, Sprite.TRANS_MIRROR_ROT90, Sprite.TRANS_MIRROR_ROT180,
Sprite.TRANS_MIRROR_ROT270

• Para dibujar se necesita un Graphics g que puede


obtenerse con: Graphics g = getGraphics
getGraphics();
();
babosin.setFrame(3); // Selecciona el frame (4ª imagen de las 5)
babosin.setTransform(Sprite.TRANS_NONE ); // Muestra la imagen en su posición original
babosin.setPosition(100,100); // Colocará en la pantalla el sprite en la posición (100,100)
babosin.paint(g); // Dibuja el Sprite.

38

19
IU: GameCanvas
GameCanvas:: TiledLayer

Deco.png
+ =
Image tileImages = Image.createImage("/deco.png"); // Carga la imagen con los elementos de la pantalla
TiledLayer decorado = new TiledLayer(40,24,tileImages ,8,8); // reserva espacio para la capa del decorado
// Selecciona los 40x24 elementos del decorado según su posición en deco.png
// 0 indica que no hay nada en esa posición
int[] map=
{42,41,42,41,1,2,42,41,1,2,42,41,1,2,42,41,1,2,42,41,1,2,42,41,1,2,42,41,1,2,42,41,1,2,42,41,42,41,1,2,
264,264,264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,264,
264,264,264,0,0,248,249,250,251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,264,

}
// Guarda los elementos del mapa en la posición de pantalla que corresponda
for (int i=0; i < mapa.length; i++) {
int columna = i % 40; // Se divide por el número de elementos de una fila =numero de columnas
int fila = i/40;
decorado.setCell(columna,fila,mapa[i]); // Actualiza 1 a 1 todas las celdas
} 39

IU: GameCanvas
GameCanvas:: TiledLayer+Sprite+Image

+
=
+
// Dibuja la imagen de fondo
g.drawImage(fondo,decox/4,decoy/4,0);
decorado.setPosition(decox,decoy ); // Actualiza el decorado
controlcapas.paint(g,0,0); // Pinta el decorado
// Actualiza el personaje
babosin.setPosition(babosinX,babosinY );
babosin.paint(g ); // pinta el personaje

40

20
IU: GameCanvas
GameCanvas:: Scroll Fondos
TRUCO
• En muchos juegos de plataformas los escenarios pueden
estar a diferentes distancias
• Los escenarios má m ás lejanos deben moverse a menor
velocidad que los cercanos para producir un movimiento
real
• Es fáfácil conseguir ese efecto dá dándole al primer plano
unas coordenadas (x,y (x,y)) y a cada plano má
más lejano se le
asignará
asignar á un (x/distancia,y
(x/distancia,y/distancia)
/distancia)
• En el ejemplo anterior el fondo se desplaza 4 veces má más
lentamente que el decorado principal
// Dibuja la imagen de fondo
g.drawImage(fondo,decox/4,decoy/4,0);

41

IU: GameCanvas
GameCanvas:: Colisiones
• Se puede mirar en cada momento si un Sprite choca con
otro Sprite, Imagen o TiledLayer
• Las colisiones se pueden hacer a nivel de pixel
(pixelLevel
pixelLevel=true)
=true) o aproximando la imagen a un
rectangulo (pixelLevel
pixelLevel=false)
=false)
// Mira si el sprite babosin choca con la imagen situada en x,y
choca=babosin.collidesWith(imagen,x,y,pixelLevel);
// Mira si el sprite babosin choca con la otro Sprite
choca=babosin.collidesWith(enemigo,pixelLevel);
// Mira si el sprite babosin choca con un tiledLayer
choca=babosin.collidesWith(escenario,pixelLevel);

42

21
Programa: DBVBabosin
• En el siguiente programa se combina todo lo relacionado
con GameCanvas
GameCanvas:: Sprites
Sprites,, Imá
Im ágenes, TiledLayer
TiledLayer,,
LayerManager,, Control de Teclado
LayerManager Teclado……
• Con esto se podrí
podría hacer prá
prácticamente cualquier juego
en 2D
• Se va a utilizar para el midlet la misma clase que en
(DBVGameCanvas
DBVGameCanvas))
• Por otro lado, se va a utilizar una clase que hereda de
GameCanvas (BabosinCanvas
BabosinCanvas)) en la que se desarrolla el
juego
• El programa carga una imagen de fondo, un tiledLayer y
un sprite y cuando se mueven los cursores, el sprite se
desplaza por el fondo que tambié también se desplaza,
detectando posibles colisiones
43

Programa: DBVBabosin

Con los cursores se


desplaza el personaje,
el escenario y el fondo

44

22
RMS (Record Management System)
• El almacenamiento en J2ME se realiza a travé
través de RMS
• No existen ficheros
• RMS permite guardar registros numerados
• El contenido de un registro es un array de bytes
• La gestió
gestió n de todo lo que haya en el registro debe hacerla el
usuario.
– Por ejemplo, si se guarda una cadena y un nú
número será
será el usuario el
encargado de escribirlo y leerlo correctamente convirtiendo los datos
a arrays de bytes
• La clase RecordStore es la encargada de la manipulació
manipulación de los
registros
Id registro contenido
1 valor1
2

45

Bluetooth:: Mario Karts


Bluetooth
• Juego de coches para dos jugadores
– Se juegan en dos mómó viles con bluetooth
– Scroll de pantalla
– Música de fondo
– Uso de má
máscaras y puntos de control
– Minimapa
– La pantalla se ajusta al tamañ
tama ño del telé
teléfono

Autores:
JESUS BEAS ARCO
PABLO GÓMEZ JIMÉNEZ
FCO JAVIER RODRIGUEZ
PABLO SANTANA BASTIDA 46

23
Bluetooth:: Mario Karts
Bluetooth
• Estructura cliente-
cliente-servidor
– Uno de los mó
mó viles hace de servidor de la partida
– El otro se conecta como cliente
• Servidor
– Se da de alta el servicio bluetooth para que otros dispositivos lo
encuentren
– Permanece a la espera hasta que algú
alg ún cliente inicie la conexió
conexi ón
• Cliente
– Busca los dispositivos bluetooth que haya en las proximidades
– Busca en cada uno de ellos el servidor del juego
– El usuario selecciona una de los servidores disponibles
– Se inicia la conexió
conexi ón
• Conectados
– Una vez conectados, cada movimiento se enví
envía al otro telé
teléfono
47

Bluetooth:: Mario Karts


Bluetooth

48

24
Problema: Versiones de Prueba
• Cuando se quiere entregar una muestra de un programa
antes de venderlo hay varias opciones:
– Limitar opciones
– Fecha lílímite de uso
– Nú mero limitado de ejecuciones
• Se pide utilizando RMS hacer una aplicació
aplicaci ón que sólo
pueda ejecutarse 5 veces
– Cada vez que se ejecuta debe decirnos cuantas pruebas nos
quedan
• Puede ser necesario otro programa que inicialice o
modifique el nú
número de evaluaciones posibles

49

Comunicaciones HTTP
• J2ME permite hacer conexiones por HTTP
• Esto permite hacer cualquier tipo de aplicació
aplicaci ón en la que
el dispositivo m óvil será
ser á el cliente
• Lo único que hay que hacer es definir un protocolo
propio para interpretar los mensajes entre el cliente y el
servidor
• Lo má
m ás sencillo es que el servidor devuelva texto plano
• Por ejemplo, el telé
tel éfono pide por el mé
método get la lista
de citas del dí
día, y el servidor las devuelve:
Cliente (Teléfono abre esta dirección) El servidor devuelve texto plano

Citas para hoy:


9:00-14:00 Curso de J2ME
http://miservidor.es/citas.jsp?idusuario=bueno&fecha=hoy 16:00-20:00 Examen 1ºTeleco

50

25
Vibraci
ibracióón, iluminació
iluminación
• Para hacer vibrar el telé
tel éfono a partir de MIDP 2.0
– Display.vibrate
Display.vibrate(100)
(100) .-
.- Tiempo en Milisegundos
– Display.flashBacklight(tiempo
Display.flashBacklight(tiempo).
).-- Enciende la luz del telé
teléfono
• Para probar estas caracterí
caracter ísticas se va a mostrar un
programa que permitirá
permitirá usar el telétel éfono para dar
masajes o como una linterna :- :- )
• En el emulador la vibració
vibraci ón se muestra con un zumbido
• La luz de fondo se muestra con un marco de color
• No todos los telé
tel éfonos permiten controlar la luz y el
vibrador
• Estos efectos son muy útiles para los juegos, como la
vibració
vibraci ón de los keypad
keypad/volantes
/volantes de las consolas

51

Programa:: DBVMasaje
Programa

zumbido

52

26
Sonidos
• Tonos en la clase Manager
playTone(int nota, int duracion, int volumen)

• Las notas se asocian igual que en un midi


midi,, cada tecla del
piano es una nota
• C(60
C(60--440Hz)C#(61)D(62)D#(63)E(64)F(65)F#(66)
G(67)G#(68)A(69)
• Volumen má
m áximo=100
Manager.playTone(60,1000,100)

53

Juegos de mis alumnos del Master 2004/05

Knight Rider
Master Esquivador Nemo Persia

Puzzle Booble

Star Battle 4 en raya Mario Karts

54

27
Para ampliar
ampliar……
• Servicios Web (jsr172)
• Bluetooth/OBEX (jsr82)
• Grá
Gr áficos 3D (jsr184)
• Sonidos y Música
sica.. MMAPI(Mobile Media API-API-jsr135)
• Uso de push para iniciar aplicaciones desde un servidor
en el movil
• Location (jsr179) Localizaci
Localizació
ón geogr
geográáfica (CLDC 1.1)

Cada especificación jsrXYZ se puede encontrar en:


http://jcp.org/en/jsr/detail?id=XYZ

55

Referencias
Libros sobre programació
programación de Juegos
(Algunas imá
imágenes tomadas de estos libros)
libros)
• Steve Rabin, “AI Games Programming Wisdom 1 y 2” 2”, 2002, 2004 de
Ed. Charles River Media
• Serie “Games Programming Gems 1, 2 y 3”,2000,2001,2002 de Ed.
Charles River Media
• Mat Buckland, “AI Techniques for Game Programming”
Programming”, 2002
• Antonio Ruiz, “Có mo Programar Videojuegos en Windows”
Windows”, 2001, Ed.
Rama

56

28
Referencias
Libros
• Jonathan Knudsen, “Wireless Java: Developing with J2ME”
J2ME ”, 2nd edition.
Ed. APress
APress,, 2003.
• James Keogh, “The Complete Reference: J2ME”
J2ME ”, Ed. Osborne, 2003.
• Jason Lam, “J2ME & Gaming”
Gaming”, 2004.
http://www.jasonlam604.com
Art ículos
Artí
• Qusay H. Mahmoud
Mahmoud,, “Wireless Application Programming with J2ME and
Bluetooth””, 2003
Bluetooth
http://developers.sun.com/techtopics/mobility/midp/articles/bluetoot
http ://developers.sun.com/techtopics/mobility/midp/articles/bluetooth1/
h1/ y /bluetooth2/
• Jonathan Knudsen, “Creating 2D Action Games with the Game API
API””,
2003. http
http://developers.sun.com/techtopics/mobility/midp/articles/game/
://developers.sun.com/techtopics/mobility/midp/articles/game/
Webs de Inter
Interé és
Forum Nokia. http://
http://www.forum.nokia.com
www.forum.nokia.com//
Java en sun. http://java.sun.com/
Dispositivos que soportan j2me: http://jal.sun.com/webapps/device/device

57

29

Anda mungkin juga menyukai