Hola a todos!
Necesito ayuda con un proyecto para la universidad, estoy haciendo un juego con matrices (Memotest, juego de buscar los pares). Necesito ayuda para hacer lo básico, de perfeccionarlo me encargo yo.
Hasta ahora he logrado cargar las imágenes en una matriz de 6x6 (la matriz está hecha usando las herramientas de FormPaint de Delphi). Tengo que cargar las imágenes de a pares, o sea, en una matriz de 6x6 hay 36 casillas, lo que es igual a 18 imágenes pares..
1. ¿Cómo hago para cargar las imágenes de a pares, para que una imagen no se repita dos 3 o mas veces en la matriz?
2. ¿Cómo hago para que al hacer click una imagen se de vuelta? Esto suponiendo que al momento de iniciar el juego todas las imágenes ya estan cargadas
pero están boca abajo.
Agradecería cualquier ayuda o idea, especialmente con mi primer pregunta.
Anexo el código de mi trabajo hasta el momento:
Formulario Principal:
Código Delphi
[-]
unit UFPantalla;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,UCCuadricula, StdCtrls,JPEG;
type
TfrmPantalla = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDblClick(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
private
MC : Cuadricula;
Lista : Array[1..18] of TJPEGImage;
X,Y : Integer;
TA,TH: Integer;
public
end;
var
frmPantalla: TfrmPantalla;
implementation
{$R *.dfm}
procedure TfrmPantalla.FormCreate(Sender: TObject);
var i: Integer;
begin
MC:=Cuadricula.Create;
MC.CargarEtepa(1);
Randomize;
for i:=1 to 18 do
begin
Lista[i]:=TJPEGImage.Create;
Lista[i].LoadFromFile('C:\Users\Familia\Desktop\MemoTest Imagenes\Imagenes
\im'+inttostr(i)+'.jpg');
end;
TA:=Trunc((Screen.Width div MC.NroColumnas)*0.9); TH:=Trunc((Screen.Height div MC.NroFilas)*0.9); X:=(Screen.Width-(MC.NroColumnas*TA)) div 2; Y:=(Screen.Height-(MC.NroFilas*TH)) div 2; end;
procedure TfrmPantalla.FormDblClick(Sender: TObject);
begin
Application.Terminate;
end;
procedure TfrmPantalla.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label1.Caption:='X: '+Inttostr(X)+' | '+'Y: '+Inttostr(Y);
if (X>=71) and (X<=1289) and (Y>=39) and (Y<=729) then
Screen.Cursor:=-21
else
Screen.Cursor:=crDefault;
end;
procedure TfrmPantalla.FormPaint(Sender: TObject);
var j,i,Px,Py: Integer;
begin
Canvas.Pen.Color:=clRed;
Canvas.Pen.Width:=1;
Canvas.Rectangle(X-1,Y-1,(TA*MC.NroColumnas)+X-1,(TH*MC.NroFilas)+Y-1);
Py:=Y;
for i:= 1 to MC.NroFilas do
begin
Px:=X;
for j:= 1 to MC.NroColumnas do
begin
Canvas.Pen.Color:=clRed;
Canvas.Pen.Width:=1;
Canvas.Rectangle(Px-1,Py-1,Px+Ta+1,Py+Th+1);
Canvas.StretchDraw(RECT(Px,Py,Px+Ta,Py+Th),Lista[MC.ObtenerImagen(i,j)]);
Px:=Px+TA;
end;
Py:=Py+TH;
end;
end;
end.
-----------------------------------------------------------------------
Unidad Creada:
Código Delphi
[-]
unit UCCuadricula;
interface
Uses SysUtils, Math;
Const
MaxF=16;
MaxC=16;
Type
TCelda = Record
Img : Byte;
Estado : Byte;
End;
TCuadricula = Array[1..MaxF,1..MaxC] of TCelda;
Cuadricula = Class
Private
Filas,
Columnas : Word;
Celdas : TCuadricula;
Public
Constructor Create;
Procedure CargarEtepa(E : Byte);
Procedure ReDimensionar( F,C : Word);
Function NroFilas : Word;
Function NroColumnas : Word;
Procedure ColocarImagen(F,C:Word; I : Byte); Procedure CambiarEstado(F,C:Word; E : Byte); Function ObtenerImagen(F,C:Word):Byte; Function ObtenerEstado(F,C:Word):Byte; End;
implementation
procedure Cuadricula.CambiarEstado(F, C: Word; E: Byte);
begin
If (F>0)and(F<=Filas)and(C>0)And(C<=Columnas) then
Celdas[F,C].Estado:=E
else raise Exception.Create('Error : Columna o Fila Incorrecta');
end;
procedure Cuadricula.CargarEtepa(E: Byte);
var i,j,c: Word;
a: byte;
begin
c:=0; a:=0;
Randomize;
for i:=1 to Filas do
for j:=1 to Columnas do
begin
Celdas[i,j].Img:=Random(18)+1;
Celdas[i,j].Estado:=0;
end;
end;
procedure Cuadricula.ColocarImagen(F, C: Word; I: Byte);
begin
end;
constructor Cuadricula.Create;
begin
Filas:=6;
Columnas:=6;
end;
function Cuadricula.NroColumnas: Word;
begin
Result:=Columnas;
end;
function Cuadricula.NroFilas: Word;
begin
Result:=Filas;
end;
function Cuadricula.ObtenerEstado(F, C: Word): Byte;
begin
Result:=Celdas[F,C].Estado;
end;
function Cuadricula.ObtenerImagen(F, C: Word): Byte;
begin
Result:=Celdas[F,C].Img;
end;
procedure Cuadricula.ReDimensionar(F, C: Word);
begin
Filas:=F;
Columnas:=C;
end;
end.