Avatar billede gangsta12dk Nybegynder
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!
Avatar billede 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;
..
..
Avatar billede gangsta12dk Nybegynder
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??
Avatar billede hrc Mester
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.
Avatar billede 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]
Avatar billede stoney Nybegynder
01. marts 2005 - 09:48 #5
brug den jeg hjalp dig med her http://www.eksperten.dk/spm/594201

Du skal bare navngive dine shape, så kan du genbruge din dragDrop kode

Stoney
Avatar billede gangsta12dk Nybegynder
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.
Avatar billede stoney Nybegynder
01. marts 2005 - 14:30 #7
du mangler at declare Row og Col som integer

Stoney
Avatar billede gangsta12dk Nybegynder
07. marts 2005 - 21:27 #8
Stoney >> Det har jeg gjort, men det virker stadgi ikke.
Avatar billede gangsta12dk Nybegynder
12. april 2005 - 16:35 #9
lukker spørgsmålet :(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester