This is my first MIDLet game.
It's just a simple puzzle game.
mobilepuzzlegame.rar - 0.00MB



[pascal]
program EnkoFirstGame;

const
NUM = 16; //la mA¬°xima cantidad de numeros
ADD = 13; //desplazamiento para la salida de los numeros

var
board: array[1..4, 1..4] of integer; //nuestro tabla
x,y: integer; //variables que guardan la posicion del espacio vacio
key: integer; //la tecla presionada
gameOver: boolean; //indicarA-a si el juego sigue


//llena la tabla con numeros ordenados del 1 al 16
//algo asA- (el 16 es el espacio vacio):
{ 1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
}
procedure setBoard;
var
i,j,k: integer;
begin
k:=1;
for j:=1 to 4 do
for i:=1 to 4 do
begin
board[i,j] := k;
k := k+1;
end;
end;

//intercambia los numeros de las tablas segun sus indices
procedure swap(a,b,c,d: integer);
var
k: integer;
begin
k := board[a,b];
board[a,b] := board[c,d];
board[c,d] := k;
end;

//asigna la posicion del espacio vacio
procedure setPos(a,b:integer);
begin
x:=a;
y:=b;
end;

//imprime en la pantalla los numeros menos el 16
procedure printBoard;
var
s: string;
i,j: integer;
begin
//ponemos negro como color activo
setColor(0,0,0);
//lenamos la pantalla con el color activo
//GetWidth y GetHeight son funciones predeterminadas
fillRect(0,0, GetWidth, GetHeight); //devuelven el Ancho y Alto maximo
//elegimos el color blanco
setColor(255,255,255);
for j:=1 to 4 do
for i:=1 to 4 do
begin
//como solo se puede imprimir cadenas, transormamos los numeros en cadenas
s:= IntegerToString(board[i,j]);
// si el nuemro no es 16, se imprime segun la posicion en la tabla
if s<>'16' then drawText(s, ADD+i*18, j*1;
end;
//indispensable, actualiza la pantalla del mobile.
repaint;
end;

procedure Presentation;
var
key: integer;
begin
setColor(0,0,0);
fillRect(0,0, GetWidth, GetHeight);
setColor(255,0,0);
drawText('Enkos Puzzle', 20,20);
drawText('Loading', 20,40);
repaint;
delay(2000);
end;

procedure Ending;
var
key: integer;
begin
setColor(0,0,0);
fillRect(0,0, GetWidth, GetHeight);
setColor(255,0,0);
drawText('Enkos Puzzle', 20,20);
drawText('Good Buy',20,40);
repaint;
delay(2000);
end;


//buscamos en la tabla la posicion del espacio vacio
//la verdad, es que hay formas de evitar hacer esto
//pero como que tenia un BUG y tuve que hacerlo
procedure getPos;
var
i,j: integer;
begin
for i:=1 to 4 do
for j:=1 to 4 do
begin
if board[i,j] = 16 then
begin
x := i;
y :=j;
end;
end;
end;

//incercambia las posiciones de los numeros
//para que despues el jugador los tenga que ordenar
procedure randomBoard;
var
i,j,i1,j1,k: integer;
begin
randomize;
for i:=1 to 4 do
for j:=1 to 4 do
begin
i1:= random(4)+1;
j1:= random(4)+1;
swap(i,j,i1,j1);
end;
getPos; //obtenemos la posicion del espacio vacio
printBoard;//imprimimos la tabla
end;

//procedimiento que realiza el desplazamiento del espacio vacio
//b nos indica la direccion, 1: Arriba, 2eracha, 3:Abajo, 4:Izquierda
//segun el caso, no podemos desplazar el espacio vacio afuera del tablero, por eso
//esta la condicion adicional si es mayor o menor a 4 o a 1.
procedure moveBoard(b:integer);
begin
if (b=1) and (y<4)then swap(x,y,x,y+1)
else if (b=2) and (x>1) then swap(x,y,x-1,y)
else if (b=3) and (y>1) then swap(x,y,x,y-1)
else if (b=4) and (x<4) then swap(x,y,x+1,y);
delay(200); //retrazamos la jugada siguiente, porque sino, se mueven muy rapido
getPos;
printBoard;
end;

// el programa en si
begin
Presentation; //mostramos la presentacion
setBoard; //iniciamos el tablero
randomBoard; //lo mezclamos
repeat //el ciclo del juego
key := getKeyPressed; // obtenemos la pulsacion
if (key = KE_KEY2) or (KeyToAction(key) = GA_UP) then moveBoard(1);
if (key = KE_KEY6) or (KeyToAction(key) = GA_RIGHT) then moveBoard(2);
if (key = KE_KEY or (KeyToAction(key) = GA_DOWN) then moveBoard(3);
if (key = KE_KEY4) or (KeyToAction(key) = GA_LEFT) then moveBoard(4);
until (key = KE_KEY0) ; //se juega hasta quese presiona 0
Ending; //la pantalla de despedida
end.
[/pascal]