Programación General > Pascal

 Sopa De Letras

(1/1)

xikitina:
hola!!

Soy nueva aki,es la primera vez q os escribo preguntando,pero no es la primera vez q me ayudais!

Mirad,etoy haciendo una sopa de letras y tengo un gran problema q llevo intentando resolver desesperadamente desde hace ya bastante con libros y manuales xo no doi con ello.

Ya tengo construido un tablero relleno con letras aleatorias,y mi problema esta en que no se como meter las palabras introducidas por el usuario en el tablero para colocarlas o "esconderlas" entre las demas letras aleatorias del tablero.

He probado con 'insert' ,y 'copy' tambien,xo no consigo q me funcione.
Para las palabras introducidas por el usuario he construido un array de string mas o menos asi ---> palabras:array[1..30] of string[5];
y el tablero como un array bidimensinal de caracteres --> tablero:array[1..10,1..10] of char.
Nose si esq esas funciones no se pueden utilizar con arrays ,pq tambien las e probado con arrays mas sencillos pero no he conseguido nada...

Os ruego q me echeis una mano pq estoy realmente desesperada,basicamente porque sin eso no puedo continuar el programa. :ouch:

De todos modos muchas gracias por todo lo que me habeis ayudado en mi corta vida como "programadora"...

Un saludo

Enko:

--- Código: Text --- const   maxX = 50;   maxY = 50; var    Tablero: array[1..maxX, 1..maxY] of char; {str es la cadenainX es la posicion X inicial de donde empezara pegar la cadenainY es la posicion Y inicial.................dir es la direccion, true horizontal, false vertical.La funcion devuelve el resultado si la cadena se pudo pegar, por si es muy larga para entrar} function insertString(str: string; inX, inY:Byte;  dir:boolean): boolean;var   i: integer;begin  if dir then   begin     if inX + length(str) > maxX then      begin        insertString := False;        Exit;      end else      begin          for i:=inX to (inX+length(str)) do              Tablero[i, inY] := str[i-inX+1];          insertString := true;      end   end   else if not dir then    begin     if inY + length(str) > maxY then      begin        insertString := False;        Exit;      end else      begin          for i:=inY to (inY + length(str)) do                 Tablero[inX, i] := str[i-inY+1];           insertString := true;     end;   end;end;  Revisa el código por ahí tenga algun error ya que no lo puedo probar ahora, no estoy en casa y no tengo compilador.

Amilius:
Seria mejor una funcion más general como:

Para vertical descendente deltaX=0, deltaY=1;
Para horizontal normal deltaX=1, deltaY=0;
Para horizontal reverso deltaX=-1, deltaY=0;
Para diagonal deltaX=1, deltaY=1; deltaX=-1, deltaY=-1; deltaX=-1, deltaY=1; deltaX=1, deltaY=-1;


--- Código: Text --- const maxX=10;const maxY=10;var Tablero: array[1..maxX,1..maxY] of char;  function colocarEnLaSopa(cadena: string; PosX, PosY, deltaX, deltaY: integer): boolean;   function PosicionValida(PosX, PosY:integer):boolean;  begin    PosicionValida:=(PosX>=1) and (PosX<=maxX) and (PosY>=1) and (PosY<=maxY);  end;var  i, caracteres: integer;begin  //Para normalizar posicion inicial a 0 y no 1:  caracteres:=length(cadena)-1;  //Revisar posicion inicial y final, si ambas son validas, entonces se puede colocar en la sopa.  if PosicionValida(PosX, PosY) and PosicionValida(PosX+caracteres*deltaX,PosY+caracteres*deltaY) then  begin    //Primero revisar por las casillas si estan libres    for i:=0 to caracteres do      if Tablero[PosX+i*deltaX,PosY+i*deltaY] <> ' ' then      begin        colocarEnLaSopa:=false;        exit;//casilla ocupada, salir      end;    //Agregar las letras    for i:=0 to caracteres do      Tablero[PosX+i*deltaX,PosY+i*deltaY] := cadena[i+1];    colocarEnLaSopa:=true;  end  else    colocarEnLaSopa:=false;end;  

Enko:
es que se me ocurió lo de la diagonales ya cuando estaba terminando y bueno......
no lo quiería cambiar. :rolleyes:  :whistling:

Navegación

[0] Índice de Mensajes

Ir a la versión completa