Pascal/Turbo Pascal - movimientos en una matriz

   
Vista:

movimientos en una matriz

Publicado por referee (8 intervenciones) el 06/01/2008 10:57:06
Hola que tal foreros, tenia una duda a ver si me la pudieran resolver,se trata de que yo tengo una matriz creada con numeros aleatorios y colores aleatorios a partir de un array bidimensional, pues bien teniendo esa matriz tengo que hacer que desaparezcan elementos,al desaparecer esos elementos los numeros de las filas superiores se desplazan hacia abajo verticalmente y el espacio que dejan estos numeros arriba tengo que volver a rellenarlo con numeros aleatorios pero no tengo ni idea de como hacerlo. Les dejo el proceso que h exo para construir la matriz.

{PROGRAMA TABLERO}

TYPE

tficha=RECORD

color:integer;

valor:integer;

END;

tmatriz=ARRAY['A'..'H',1..8] OF tficha;

tcolor=byte;

tcolores=ARRAY [1..6] OF tcolor;

ttablero=ARRAY[1..Num_filas,1..Num_columnas] OF integer;

VAR

colores:tcolores;

tablero:ttablero;

colormatriz:ttablero;

ficha:tmatriz;

PROCEDURE Inicializarmatriz(VAR matriz:ttablero; VAR coloresmatriz:ttablero; VAR fichas:tmatriz);

VAR

i,j,cont,num:integer;

letra:char;

BEGIN

textcolor(4);

writeln('A':5,'B':5,'C':5,'D':5,'E':5,'F':5,'G':5,'H':5);

textcolor(15);

writeln;

writeln;

cont:=1;

FOR i:=1 TO Num_filas DO

BEGIN

FOR j:=1 TO Num_columnas DO

BEGIN

matriz[i,j]:=random(3)+cont;

coloresmatriz[i,j]:=random(6) + cont;

fichas[letra,num].valor:=matriz[i,j];

END;

END;

END;

PROCEDURE Escribirmatriz( matriz:ttablero;coloresmatriz:ttablero;fichas:tmatriz);

VAR

i,j,num:integer;

letra:char;

BEGIN

FOR i:=1 TO Num_filas DO

BEGIN

FOR j:=1 TO Num_columnas DO

BEGIN

write(matriz[i,j]:5);

CASE coloresmatriz[i,j] OF

1:textcolor(4);

2:textcolor(1);

3:textcolor(14);

4:textcolor(15);

5:textcolor(2);

6:textcolor(5);

END;

END;

writeln;

writeln;

END;

textcolor(4);

gotoxy(45,6);

writeln('1');

gotoxy(45,8);

writeln('2');

gotoxy(45,10);

writeln('3');

gotoxy(45,12);

writeln('4');

gotoxy(45,14);

writeln('5');

gotoxy(45,16);

writeln('6');

gotoxy(45,18);

writeln('7');

gotoxy(45,20);

writeln('8');

gotoxy(45,22);

textcolor(15);

END;

PROCEDURE Cargarmatriz(VAR matriz:ttablero;VAR coloresmatriz:ttablero;VAR fichas:tmatriz);

BEGIN

clrscr;

randomize;

writeln('TABLERO');

writeln;

Inicializarmatriz(matriz,coloresmatriz,ficha);

Escribirmatriz(matriz,coloresmatriz,ficha);

readkey;

END;

BEGIN

Cargarmatriz(tablero,colormatriz,ficha);

END.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:movimientos en una matriz

Publicado por Laysquad (47 intervenciones) el 06/01/2008 13:54:16
Hola que tal^^. disculpa amigo. ya entiendo que es lo que quieres pero para poder explicartelo necesito que me digas quien o de que forma seleccionas los colores que se van a correr^^
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:movimientos en una matriz

Publicado por referee (8 intervenciones) el 06/01/2008 14:20:36
Ah si perdona se me olvido. Pues mira se trata de un juego de dos jugadores. Previamente a cargar la matriz cada jugador ha elegido tres colores entre los seis disponible(rojo,azul,amarillo,blanco,verde,violeta) entonces cada jugador tiene que hacer combinaciones con las fichas de su color(tres o mas fichas) al hacer la combinacion se supone que dichas fichas desaparecen,caen las de arriba para rellenar los huecos,y estos huecos se vuelven a rellenar aleatoriamente.Mi duda es como desplazar las fichas hacia abajo y hacer que salgan fichas nuevas aleatorias en el lugar que dejan.
Un saludo y muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:movimientos en una matriz

Publicado por Laysquad (47 intervenciones) el 06/01/2008 15:05:45
^^ ooo ya se de que se trata, es muy parecido a un juego que hice mas o menos hace 6 meses imitando el juego de nintendo tetrisattack^^, es decir que la matriz va a estar afectada por la gravedad^^. es encillo: solo debes hacer los siguiente:

1. debes revisar cada vez que haya un movimiento si 3 piezas se encuentran juntas: de la siguiente forma:

var
x, y, y2 :integer ;{contadores y y2 para no perder el valor de y}
cona,cona2 :integer ; {los colores en la parte de arriba y en la parte de abajo}
{esto por si sejuntan mas de 3 colores verticalmente}
color :integer ; {cambialo si es necesrio^^}
cont :integer; {para bajar registros}
vertical:

for x := 0 to totalx do
for y := 0 to totaly do
begin
color := matriz[x,y] ;
cona := -1 ;
repeat
inc(cona) ; {así verificamos si por encima de este registro, hay colores iguales}
{diciendolo de ota forma: contandolos}
until matriz[x,y-cona] <> color ;
cona2 := -1 ;
repeat
inc(cona2) ; {así verificamos si por debajo de este registro, hay colores iguales}
{diciendolo de ota forma: contandolos}
until matriz[x,y+cona] <> color ;
if (cona+cona2+1) >= 3 then {si hay 3 o mas colores por encima y por debajo de este}
begin
cont := y-cona-1 ;
for y2 := matriz[x,y+cona2] downto matriz[x,y-cona] do
begin
if cont > -1 then {si podemos bajar un registro}
begin
matriz[x,y2] := matriz[x,cont] ; {el registro que se borrará toma el valor del color que estaba arriba del primer bloque que desaparecerá}
matriz[x,cont] := random(6) ; {para un nuevo color en este registro}
end
else {si cont < 0}
matriz[x,y2] := random(6) ;
end ;
end ;
end ;

end ;

eso es para un movimientp vertical, te dejo de tarea la horizontal ^^ te aseguro que es muy parecida pero en vez de buscar hacia arriba y hacia abajo, solo buscas a los lados^^

espero que te sirva de algo, si deseas mas ayuda, puedo ayudarte personalmente, solo mandame un mail a finaljuan@hotmail.com y yo te contactaré ^^ saludos^^..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:movimientos en una matriz

Publicado por referee (8 intervenciones) el 06/01/2008 17:54:53
muxisimas gracias me has ayudado muxisimo. la verdad es que no tenia ni idea de hacerlo, muxas gracias

cuando lo haga pa los movimientos horizontales lo cuelgo aqui a ver que te parece
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:movimientos en una matriz

Publicado por Laysquad (47 intervenciones) el 07/01/2008 16:27:49
^^ que bueno que te haya sido de ayuda^^, espero que postees el movimiento horizontal ^^ Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:movimientos en una matriz

Publicado por Vero (1 intervención) el 23/06/2008 16:23:50
requiero hacer un programa en pascal que se de el movimiento de un carro, este proyecto ya m imagino que lo han realizado pero quiero que me des paso a paso como hacerlo por favor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:movimiento de un carro en pascal

Publicado por luis luiyi_2794@hotmail.es (1 intervención) el 10/06/2011 03:35:32
porfa mandame un programa para mover un carro a control remoto por medio de la PC.... gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar