28. februar 2005 - 19:09
Der er
8 kommentarer og
1 løsning
Simple hjælp til Mastermind!
Hej, jeg kan lidt Delphi programmering, men dog ikke ret meget. Jeg skal lave et mastermind spil, og jeg har lavet lidt af den. Jeg har lavet 4 x 8 cirkler af formen TShape. Jeg har en anden felt hvor der er 8 TShape firkanter med farve. Jeg har skrevet en lille kode (vha. dragDrop) hvor jeg kan trække en af de otte farver i den første cirkel og ændre dens farve (dvs. cirklens farve bliver lige med den farve der bliver flyttet oven på den). Nu ønsker jeg at gøre det samme med de resten 31 cirkler. Jeg kan naturligvis kopiere den samme kode til alle 32 cirkler, men det er spild af tid of programmet vil fylde en del.
Findes der derfor ikke en simpel måde, hvorpå man kan flytte en af de farver til den cirkel man ønsker og dermed ændre cirklens farve??
Hvis I vil hjælpe, kan jeg godt sende jer mit lille program så i bedre kan forstå hvad jeg mener :D. Skriv venligst jeres e-mail.
På forhånd tak!
nca
Juniormester
28. februar 2005 - 19:16
#1
du må kunne lave en funktion, hvor cirklens navn indgår i kaldet, så det er den samme funktion du bruger til alle cirkler.
Noget i stil med:
function SkiftFarve(Cirkelnavn,NyFarve;
..
..
28. februar 2005 - 21:30
#2
Ja, men problemet er at jeg har lavet 32 cirkler. dvs. at hver cirkel hedder Shape1, Shape2, Shape3 ... Shape32. Jeg ville også gerne vide hvordan man kan lave en funktion så alle 32 cirkler indgår i et navn :D....Har du et bud??
28. februar 2005 - 22:53
#3
Hvad med i stedet, at lave en bitmap af knapperne; en for hver farve. Så kan du lave pæne bitmapper med skygger og alt det andet gejl der fylder en bondegård at skrive.
nca
Juniormester
01. marts 2005 - 08:32
#4
Jeg troede at du havde oprettet cirklerne dynamisk, så du kunne referere til dem som Shape[1], Shape[2]
01. marts 2005 - 10:54
#6
Stoney>> Jeg har gjort det du har skrevet, og jeg har umiddelbart gjort det forkert da det ikke virker. Men her er koden:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
ShapeA: TShape;
ShapeB: TShape;
ShapeC: TShape;
ShapeD: TShape;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
ShapeSilver: TShape;
ShapePurple: TShape;
ShapeAqua: TShape;
ShapeBlack: TShape;
ShapeRed: TShape;
ShapeBlue: TShape;
ShapeGreen: TShape;
ShapeYellow: TShape;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ShapeRedDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure ShapeRedDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
private
{ Private declarations }
public
{ Public declarations }
myshapes: array [1..8, 1..4] of Tshape;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
Row, Col: Integer;
begin
for Row := 1 to 8 do
for Col := 1 to 4 do
begin
myshapes[Row, Col] := Tshape.Create(Self);
myshapes[Row, Col].Parent := Self;
myshapes[Row, Col].Shape := stCircle;
myshapes[Row, Col].Brush.Color := clwhite;
myshapes[Row, Col].Height := 49;
myshapes[Row, Col].Width := 49;
myshapes[Row, Col].Top := Row * 55 + 45;
myshapes[Row, Col].Left := Col * 56 + 40;
end;
shapeA.Brush.Color:=clRed;
shapeB.Brush.Color:=clblue;
shapeC.Brush.Color:=clGreen;
shapeD.Brush.Color:=clGray;
shapeA.Visible:=False;
shapeB.Visible:=False;
shapeC.Visible:=False;
shapeD.Visible:=False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
shapeA.Visible:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
shapeA.Visible:=true;
shapeB.Visible:=true;
shapeC.Visible:=true;
shapeD.Visible:=true;
showmessage ('I am disappointed!');
end;
procedure TForm1.ShapeRedDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if source is TShape then
myshapes[8,1].Brush.Color:=(Source as Tshape).Brush.Color;
end;
procedure TForm1.ShapeRedDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=(Source is TShape);
end;
end.
I en af de sidste linjer hvor der står:
myshapes[8,1].Brush.Color:=(Source as Tshape).Brush.Color;
er kun et eks. til den ene cirkel, men jeg ville helst have skrevet
myshapes[Row,Col].Brush.Color:=(Source as Tshape).Brush.Color;
men der står at Row og Col er Undeclared identifier.