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
Ir a la versión completa