Avatar billede frossen Nybegynder
07. oktober 2004 - 19:23 Der er 5 kommentarer

Tournerings System

Jeg sidder og er ved at lave et tournerings system
Jeg bruger en tabbednotebook så jeg på første side har administrations tingene og på anden side har tourneringsplannen.

Mit problem er at programmet skal være dynamisk siden jeg ikke kan vide hvor mange spillere der bliver i tourneringen.

Nogle ideer til hvordan jeg får lavet denne tourneringsplan?

Der skal kunne være fra 2 op til mange (men lad og bare sige 16 til at starte med)

Efter det skal man kunne ændre hvem der vinder hvilke kampe og på den måde skal de gå videre i systemet.

Jeg kan simpelthen ikke komme på hvordan jeg skal bygge dette op, lige nu er jeg ikke sikker på om man overhovedet kan lave det.

Håber nogle af jer kan hjælpe :)
Avatar billede hreiff Nybegynder
08. oktober 2004 - 15:22 #1
Skal det være knock-off (man er ude når man har tabt) eller alle mod alle ?
Avatar billede frossen Nybegynder
11. oktober 2004 - 03:17 #2
det skulle være til det der kaldes single eller double elimination, så ja knock-off

jeg ved godt det er svært, jeg kunne i hvertfald ikke komme på noget, men hvis ikke andet kan vi jo diskutere hvad man måske kunne gøre..

problemet er som jeg ser det at man skal lave object based programming (tror jeg det hedder) altså for et tilfældigt antal spillere skal der komme nogle boxe frem og knapper måske og sådan.. og de skal så kunne ændre noget i planen så som hvem der går videre og sådan.

Derfor objekter der ikke finde ide programmet bliver laver skal komme frem og virke "forskeligt" på de andre nye ting der også er kommet frem hvis du forstår..
Avatar billede hreiff Nybegynder
11. oktober 2004 - 15:26 #3
Her er lidt at starte på:

Formen indeholder en listbox, en editbox, button1 (tilføj), button2 (ok) og en stringgrid (col1 fixed). Når der trykkes på button2, overføres alle navnene i tilfældig rækkefølge til stringgrid'en. 1 og 2 kæmper mod hinanden, 3 og 4 osv.
Der dobbeltklikkes på vinderen af den enkelte kamp. Vinderen bliver farvet grøn, taberen bliver rød. Når alle kampe er afgjort, overføres vinderene til næste række.
Jeg har kun lavet hertil. Resten må du gå videre med. Men her er mit forslag:

unit Konkm;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;
      Rect: TRect; State: TGridDrawState);
    procedure StringGrid1DblClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x,y: integer;
  a: array[0..5,0..10] of byte;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
i,j: integer;
myrect: tgridrect;
begin
  for j := 0 to stringgrid1.rowcount do
  begin
    a[0,j]:= 1;
    stringgrid1.cells[0,j] := inttostr(j+1);
  end;
  myrect.top := -1;
  myrect.left := -1;
  myrect.bottom := -1;
  myrect.right := -1;
  stringgrid1.selection := myrect;
  listbox1.items.add('Alex');
  listbox1.items.add('Bente');
  listbox1.items.add('Carsten');
  listbox1.items.add('Dorte');
  listbox1.items.add('Erik');
  Edit1.text := '';
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;
  Rect: TRect; State: TGridDrawState);
var s: string;
begin
  case a[col,row] of
  0:    stringgrid1.canvas.brush.color := clWhite;
  1:    stringgrid1.canvas.brush.color := clBtnFace;
  2:    stringgrid1.canvas.brush.color := clGreen;
  3:    stringgrid1.canvas.brush.color := clred;
  end;
  if ((a[col,row]=2) or (a[col,row]=3)) then
  begin
    stringgrid1.canvas.fillrect(rect);
    stringgrid1.canvas.pen.color := clBlack;
    stringgrid1.canvas.textout(rect.left+2,rect.top+2,stringgrid1.cells[col,row]);
  end;
end;

procedure TForm1.StringGrid1DblClick(Sender: TObject);
var i,nyantal : integer;
  klar: boolean;
  temp : string;
begin
  case a[stringgrid1.selection.left,stringgrid1.selection.top] of
  0,3: begin
        a[stringgrid1.selection.left,stringgrid1.selection.top] := 2;
        a[stringgrid1.selection.left,stringgrid1.selection.top-((stringgrid1.selection.top mod 2)*2-1)] := 3;
      end;
  2:  begin
        a[stringgrid1.selection.left,stringgrid1.selection.top] := 0;
        a[stringgrid1.selection.left,stringgrid1.selection.top-((stringgrid1.selection.top mod 2)*2-1)] := 0;
      end;
  end;
  stringgrid1.refresh;

  klar := true;
  for  i := 0 to stringgrid1.rowcount-1 do
    if a[1,i] = 0 then
      klar := false;
  if klar then          {alle i rækken er udfyldt}
  begin
    nyantal := stringgrid1.rowcount div 2 + stringgrid1.rowcount mod 2;
    for i := 0 to nyantal do
    begin
      if (a[1,i*2] = 2) then stringgrid1.cells[2,i] :=  stringgrid1.cells[1,i*2]
      else  stringgrid1.cells[2,i] :=  stringgrid1.cells[1,i*2+1]
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Listbox1.items.add(edit1.text);
  edit1.text := '';
  edit1.setfocus;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i,j: integer;
begin
  stringgrid1.rowcount :=  listbox1.items.count;
  randomize;
  i := 0;
  repeat
    j := random(listbox1.items.count);
    stringgrid1.cells[1,i] := listbox1.items[j];
    listbox1.items.delete(j);
    inc(i);
  until listbox1.items.count = 0;
  button1.enabled := false;
  button2.enabled := false;
end;

end.
Avatar billede hreiff Nybegynder
11. oktober 2004 - 15:28 #4
PS. array a skal gøres dynamisk og størrelsen følge grid'en.
Avatar billede hreiff Nybegynder
05. november 2004 - 10:21 #5
Hallo ???
Er det sådan noget du er ude efter ?
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