Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Doppelkopf-Projekt (https://www.delphipraxis.net/65463-doppelkopf-projekt.html)

tankm26 16. Mär 2006 20:36


Doppelkopf-Projekt
 
Ich hatte es nicht geschafft, eine *.txt in einen string einzulesen.

Mittlerweile geht's.




mfg,

Wieland Sommer

Flare 16. Mär 2006 21:21

Re: Doppelkopf-Projekt
 
Tja...ich würde sagen ein gekürzter Code hätte auch gereicht. ^^

Nachdem ich mich mal durchgefitzt habe...bei welcher Zeile genau liegt/liegen die Fehler? du lädst an mehreren Stellen dateien ein.


Flare

tankm26 16. Mär 2006 21:43

Re: Doppelkopf-Projekt
 
Der Fehler: (bei der obrigen Einführung unter 'private'):

[Error] Unit1.pas(44): Unsatisfied forward or external declaration: 'Tform_doppelkopf.ComponentLoadFromFile'

betreffende Zeile: procedure ComponentLoadFromFile(Component: TComponent; const FileName: String);

danke für deine Mühe flare,

Wieland

Flare 16. Mär 2006 21:54

Re: Doppelkopf-Projekt
 
Also ich würde sagen du hast oben bei der Deklaration nicht deine Parameterliste nicht hingeschrieben. du solltest die vielleicht mal ergänzen.
Delphi-Quellcode:
private
  procedure ComponentLoadFromFile(Component: TComponent; const FileName: String);

Flare

tankm26 17. Mär 2006 13:40

Re: Doppelkopf-Projekt
 
Das war's nich, ich hatte es auch schon probiert. Nur halt oben ohne gelassen. In meiner Antwort ist aber bereits die aktuelle Zeile festgehalten.

Mahlzeit


Wieland

Der Jan 17. Mär 2006 14:10

Re: Doppelkopf-Projekt
 
In der fehlerhaften Zeile:

Delphi-Quellcode:
procedure Tform_doppelkopf.ComponentLoadFromFile(Component: TComponent; const FileName: String);
Schon solltes gehen.
Du mußt die Methoden ComponentLoadFromFile auch als solche in der Klasse reinpacken :)

tankm26 17. Mär 2006 14:26

Re: Doppelkopf-Projekt
 
Zitat:

Zitat von Der Jan

Schon solltes gehen.
Du mußt die Methoden ComponentLoadFromFile auch als solche in der Klasse reinpacken :)



Als was denn? Ich habe da jetzt nur

.
.

Button1: TButton;
Memo1: TMemo;
ComponentLoadFromFile: ;
.
.

Danke schonmal,

Wieland

tankm26 17. Mär 2006 15:06

Re: Doppelkopf-Projekt
 
Wieso kann Delphi mit der folgenden procedure die datei ordnung nich finden?

diese liegt im selben ordner wie die exe

edit: jetzt geht's


Delphi-Quellcode:
procedure Tformdoppelkopf.Button1Click(Sender: TObject);
var
f,ordnung:TextFile;
  s: string;
begin
  // hier wird eine Textdatei geöffnet und zeilenweise ausgelesen
  // StringGrid auf eine Zeile reduzieren
  StringGrid1.RowCount:=1;
  // Datei öffnen
  AssignFile(f, 'ordnung');
  Reset(f);
  // solange das Dateiende noch nicht erreicht ist
  while not eof(f) do
  begin
    // Zeile aus Textdatei in string lesen
    Readln(f, s);
    // in die linke Spalte wird die Zeilennummer geschrieben
    StringGrid1.Cells[0,StringGrid1.RowCount-1] := IntToStr(StringGrid1.RowCount);
    // in die rechte Spalte die Textzeile
    StringGrid1.Cells[1,StringGrid1.RowCount-1] := s;
    // Nach jedem Schreiben wird eine Zeile angehängt
    StringGrid1.RowCount := StringGrid1.RowCount + 1;
  end;
  // Letzte (zuviel) angehängte Zeile wieder entfernen
  StringGrid1.RowCount := StringGrid1.RowCount - 1;
  // Datei schliessen
  CloseFile(f);
end;

tankm26 17. Mär 2006 15:34

Re: Doppelkopf-Projekt
 
Wie kann ich eigentlich eine externe Datei mgl. einfach anzeigen lassen?


Gerne würde ich bei z.B. einem click auf'n button eine txt oder worddatei anzeigen lassen.


mfg

Wieland

Flare 17. Mär 2006 15:36

Re: Doppelkopf-Projekt
 
Da geht am besten mit einer Memo.


Flare

tankm26 17. Mär 2006 16:03

Re: Doppelkopf-Projekt
 
Zitat:

Zitat von Flare
Da geht am besten mit einer Memo.


Flare

Großartig!

Aber wie bekommt man die Datei da rein, dieses is mein problem.

tankm26 17. Mär 2006 20:20

Re: Doppelkopf-Projekt
 
Link: http://florianhaag.name/de/delphi/dp....htm#PLoadText

MrSpock 17. Mär 2006 22:17

Re: Doppelkopf-Projekt
 
Hallo,

wenn es dir nur um das Anzeigen geht und du die Daten nicht direkt im Programm benötigst, dann kannst du die Dateien mit Delphi-Referenz durchsuchenShellExecute mit dem Programm öffnen, das für die Anzeige registriert ist.

tankm26 18. Mär 2006 14:06

Re: Doppelkopf-Projekt
 
Liste der Anhänge anzeigen (Anzahl: 2)
anbei mal mein plan


ich hab den text jetzt erfogreich innen memo eingefügt - gerne wüsste ich ja, wie man dem programm sagen soll, dass es die datei selbst öffnen soll (ohne opendlg)


Das nächste ding wird dann eine message, ob man etwas ansagen will - z.B. mit "ja" oder "nein" als button.

tankm26 19. Mär 2006 11:03

Re: Doppelkopf-Projekt
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich hab jetzt ne zweite form eingebaut (für die Entscheidung).

Nicolai1234 19. Mär 2006 11:41

Re: Doppelkopf-Projekt
 
Warum wurde der erste Post so derartig beschnitten. Am besten einfach lassen, wie er ist, dann können andere mit dem selben Problem später immernoch hilfe finden!

tankm26 19. Mär 2006 22:07

Re: Doppelkopf-Projekt
 
Liste der Anhänge anzeigen (Anzahl: 2)
mein aktueller stand:


mit dem ansagen bin ich (jedenfalls die feststellung fertig), nun habe ich auch die Möglichkeit gefunden, die Hinweise/Ansagen im meomfeld an einer bestimmten Stelle anzeigen zu lassen.


naja, da es ein privates projekt is, muss auch der phasenplan ja nich ganz so eng gechnitzt sein....


schöne woche,

Wieland

tankm26 23. Mär 2006 15:58

Re: Doppelkopf-Projekt
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, das Ansagen ist nun fertig.


Wie kann man delphi sagen, dass es eine bestimmte datei öffnen soll /statt opendlg auszuführen?


kompl. Quelltext:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, Buttons, jpeg, ExtCtrls, ComCtrls, Spin,ShellApi,
  mmsystem ;

type
  Tformdoppelkopf = class(TForm)
    gridspieler1: TStringGrid;
    gridspieler2: TStringGrid;
    gridspieler3: TStringGrid;
    gridspieler4: TStringGrid;
    btaus: TBitBtn;
    btgebe: TBitBtn;
    logo_w: TImage;
    Chatfenster: TMemo;
    Edit1: TEdit;
    btKommentar: TButton;
    btchat: TButton;
    btregeln: TButton;
    mregeln: TMemo;
    OpenDlg: TOpenDialog;
    laspieler4: TLabel;
    laspieler3: TLabel;
    laspieler2: TLabel;
    Button1: TButton;
    Label1: TLabel;
    btvorbehalte: TButton;
    Label2: TLabel;
    gridstich: TStringGrid;
    lastich: TLabel;
    Panel1: TPanel;
    btsauen: TButton;
    bthochzeit: TButton;
    btsieg: TButton;
    btkeine9: TButton;
    bt5neun: TButton;
    btarmut: TButton;
    btschweine: TButton;
    btkeinenv: TButton;
    btheimlichen: TButton;
    btstrich: TButton;
    btkoenig: TButton;
    btsonssoli: TButton;
    trumpfanzahl: TLabel;
    procedure btausClick(Sender: TObject);
    procedure btgebeClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure gridspieler1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure gridspieler2DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure gridspieler3DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure gridspieler4DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure btchatClick(Sender: TObject);
    procedure btKommentarClick(Sender: TObject);
    procedure btregelnClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure btvorbehalteClick(Sender: TObject);
    procedure gridspieler1Click(Sender: TObject);
    procedure gridstichDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure btschweineClick(Sender: TObject);
    procedure btsiegClick(Sender: TObject);
    procedure btsauenClick(Sender: TObject);
    procedure btheimlichenClick(Sender: TObject);
    procedure btsonssoliClick(Sender: TObject);
    procedure btkoenigClick(Sender: TObject);
    procedure btkeinenvClick(Sender: TObject);
    procedure bthochzeitClick(Sender: TObject);
    procedure btarmutClick(Sender: TObject);
    procedure btstrichClick(Sender: TObject);
    procedure bt5neunClick(Sender: TObject);
    procedure btkeine9Click(Sender: TObject);
  private
  procedure geben;
  procedure wimageload;
  procedure sreihenfolge;
  function PosN(Substring, Mainstring: string; n: Integer): Integer;
  procedure cleangrd(grd:TStringgrid);
  procedure sortiere(w,s,h,e:integer);
  procedure textein(txt:string);
  procedure disabbl(i:integer);
  public
    { Public declarations }
  end;

var
  formdoppelkopf: Tformdoppelkopf;
  karten:array[0..48] of TBitmap;
  nummern:array[0..47]of Integer;
  spieler1:array[0..11] of Integer;
  spieler2:array[0..11] of Integer;
  spieler3:array[0..11] of Integer;
  spieler4:array[0..11] of Integer;
  arstich:array[0..3] of Integer;
  schweine1, supers1,hochzeit1,armut, neun, trumpfz,gekarten,ansa,
  other,poskr,zstd,wr1,wr2,wr3,wr4,dransein,trumpf,chr99: integer;
 
const LF = #43#10; // LF steht für LineFeed

implementation

{$R *.dfm}

///const Dateiname = 'C:\boot.ini'; // gibt's ab WinNT
{ Sounds: sndPlaySound(PChar('C:\Datei.wav'),SND_SYNC);
SND_SYNC = Während die Datei abgespielt wird, steht die Anwendung
SND_ASYNC = Die Datei wird unabhängig vom Programm abgespielt.
SND_LOOP = Immer wieder und immer wieder
sndPlaySound(nil,0);}

procedure TFormdoppelkopf.sortiere(w,s,h,e:integer);
var x:integer;
begin
  if label2.Caption='w1' then
  for x:=0 to 11 do begin
   if spieler1[x]= w then begin
      spieler1[x]:=spieler1[x+1];
      spieler1[x+1]:=w;
   end;
  end;
  {var w,kr1,pk1,pk2,hz1,hz2,ka1: integer;
begin
  for w:=0 to 8 do begin    // Kreuz-Bube nach rechts
    if spieler1[w]= 4 then begin
      kr1:=1;
      spieler1[w]:=spieler1[w+1];
      spieler1[w+1]:=4;
    end else kr1:=0;
  end;                                         //Ende
  if spieler1[9]=4 then pk1:=8 else pk1:=9;   // Pik-Bube nach rechts
  for w:=0 to pk1-1 do begin
    if spieler1[w]= 12 then begin
      pk2:=1;
      spieler1[w]:=spieler1[w+1];
      spieler1[w+1]:=12;
    end else pk2:=0;
  end;                            //Ende
  hz1:=9;                        // Herz-Bube nach rechts
  if kr1=1 then hz1:=hz1-1;
  if pk2=1 then hz1:=hz1-1;
  for w:=0 to hz1-1 do begin
    if spieler1[w]= 20 then begin
      hz2:=1;
      spieler1[w]:=spieler1[w+1];
      spieler1[w+1]:=20;
    end else hz2:=0;
  end;                         // Ende
 ka1:=9;                       //Karo-Bube nach rechts
 if kr1=1 then ka1:=ka1-1;
 if pk2=1 then ka1:=ka1-1;
 if hz2=1 then ka1:=ka1-1;
 for w:=0 to ka1-1 do begin
    if spieler1[w]= 28 then begin
      spieler1[w]:=spieler1[w+1];
      spieler1[w+1]:=28;
    end; // Ende
 end;
gridspieler1.Refresh;
end;}

end;

procedure TFormdoppelkopf.cleangrd(grd:TStringgrid);
var grdRec:TGridRect;
begin
with grdRec do begin
Top:=-1;
Left:=-1;
Right:=-1;
Bottom:=-1;
end;
grd.Selection:=grdRec;
end;

procedure TFormdoppelkopf.sreihenfolge;
begin
  if wr1=4 then wr1:=1 else wr1:=wr1+1;
  if wr2=4 then wr1:=1 else wr2:=wr2+1;
  if wr3=4 then wr1:=1 else wr3:=wr3+1;
  if wr4=4 then wr1:=1 else wr4:=wr4+1;
  if wr1=4 then
    dransein:=1
  else dransein:=wr1+1;
end;

procedure Tformdoppelkopf.wimageload;
var
  i: integer;
begin
  for i:=0 to 48 do
  begin
    karten[i]:=TBitmap.Create;
    karten[i].LoadFromFile(IntToStr(i)+'.bmp');
  end;
end;

procedure Tformdoppelkopf.geben;
var
 i,x,j:integer;
begin
{  for w:=0 to 11 do begin
    spieler1[w]:=48;
    spieler2[w]:=48;
    spieler3[w]:=48;
    spieler4[w]:=48;
  end;}
  chatfenster.Clear;
  chatfenster.Lines.Add('Chatfenster');
  chatfenster.Lines.Add('Spielbeginn: '+(timetostr(now)));
  Randomize;
  for i:= 0 to 47 do
  begin
   { j:=Random(47);
    X:=nummern[i] ;
    nummern[i]:= nummern[j];
    nummern[j]:=x;
  end; }
  spieler1[0]:=1;  // 22
  spieler1[1]:=2;   //23
  spieler1[2]:=3;      //28
  spieler1[3]:=4;       //29
  spieler1[4]:=5;      //40
  spieler1[5]:=6;     //41
  spieler1[6]:=7;        //42
  spieler1[7]:=8;       //43
  spieler1[8]:=9;       //44
  spieler1[9]:=10;        // 45
  spieler1[10]:=11;      //  46
  spieler1[11]:=12;       //47
{  for i:=0 to 11 do begin
    spieler1[i]:=nummern[i];
    spieler2[i]:=nummern[i+12];
    spieler3[i]:=nummern[i+24];
    spieler4[i]:=nummern[i+36]; }
  end;
 { for i:=0 to 10 do
  begin
    for j:=i+1 to 11 do
    begin
      if spieler1[j] < spieler1[i] then begin
        x:=spieler1[i];
        spieler1[i]:=spieler1[j];
        spieler1[j]:=x;
      end;
      if spieler2[j] < spieler2[i] then begin
        x:=spieler2[i];
        spieler2[i]:=spieler2[j];
        spieler2[j]:=x;
      end;
      if spieler3[j] < spieler3[i] then begin
        x:=spieler3[i];
        spieler3[i]:=spieler3[j];
        spieler3[j]:=x;
      end;
      if spieler4[j] < spieler4[i] then begin
        x:=spieler4[i];
        spieler4[i]:=spieler4[j];
        spieler4[j]:=x;
      end;
    end;
  end; }
other:=1;
gridspieler1.Refresh;
gridspieler2.Refresh;
gridspieler3.Refresh;
gridspieler4.Refresh;
end;


procedure Tformdoppelkopf.btausClick(Sender: TObject);
begin
  //MessageDlg('Copyright © 2006 by tankm26', mtCustom, [mbOK], 0);
  close;
end;

procedure Tformdoppelkopf.btgebeClick(Sender: TObject);
begin
  gekarten:=0;
  ansa:=0;
  geben;
  btvorbehalte.Enabled:=true;
  gridspieler1.Enabled:=true;
end;

procedure Tformdoppelkopf.btvorbehalteClick(Sender: TObject);
var w:integer;
begin
trumpf:=0; poskr:=0; neun:=0; hochzeit1:=0; schweine1:=0; supers1:=0; trumpfz:=0; armut:=0;
disabbl(0); //Vorbehalte unsichtbar machen
for w:=0 to 11 do begin
  if spieler1[w]>21 then trumpf:=trumpf+1;             //Trümpfe zählen
  if trumpfz<4 then armut:=1;                                   //Armut
  if spieler1[w]=0 then neun:=1; if spieler1[w]=1 then neun:=neun+1;       //herz 9
  if spieler1[w]=6 then neun:=neun+1; if spieler1[w]=7 then neun:=neun+1;  //pik 9
  if spieler1[w]=14 then neun:=neun+1; if spieler1[w]=15 then neun:=neun+1; //kreuz 9
  if spieler1[w]=22 then neun:=neun+1; if spieler1[w]=23 then neun:=neun+1; //karo 9
  if (spieler1[w]=44) and (spieler1[w+1]=45)then hochzeit1:=1;  //Hochzeit
  if ((spieler1[w]=44) or (spieler1[w+1]=45)) then poskr:=w;    //Kreuzdame
  if (spieler1[w]= 28)and(spieler1[w+1]= 29) then schweine1:=1;  //Schweine                                                     //Schweine
  if schweine1=1 then if ((spieler1[w]= 22)and(spieler1[w+1]= 23))then supers1:=1; //(Super-)sauen

  if gekarten =0 then begin
    if spieler1[11]<29 then btstrich.Enabled:=true;              // unterm Strich
    if (neun>4) then bt5neun.Enabled:=true;                   // Neunen
    if armut=1 then btarmut.Enabled:=true;                     //Armut
    if schweine1=1 then btschweine.Enabled:=true;              //Schweine
    if ((btschweine.Enabled=true) and (supers1=1)) then btsauen.Enabled:=true; //(Super-)sauen
    if hochzeit1=1 then begin bthochzeit.Enabled:=true; btheimlichen.Enabled:=true; //  Hochzeit
      end else begin
        bthochzeit.Enabled:=false;             //  Hz
        btheimlichen.Enabled:=false; end;      //  Hz
  end;

  if (gekarten=4) then begin
  if poskr>0 then btsieg.Caption:=('Re!') else
  btsieg.Caption:=('Kontra!');
  btsieg.Enabled:=true;
  btkeine9.Enabled:=true;
  end;
end;
end;

procedure Tformdoppelkopf.FormCreate(Sender: TObject);
var w:integer;
begin
  gekarten:=0;
  zstd:=0;
  other:=0;
  for w:=0 to 47 do
    nummern[w]:=w;
  wimageload;
  cleangrd(gridspieler1);
  cleangrd(gridspieler2);
  cleangrd(gridspieler3);
  cleangrd(gridspieler4);
  cleangrd(gridstich);
end;

procedure Tformdoppelkopf.gridspieler1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var w:integer;
begin
  for w:=0 to 47 do
   if other= 1 then begin
     if spieler1[Acol]=w then gridspieler1.Canvas.Draw(rect.left, rect.top, Karten[w]);
   end else  cleangrd(gridspieler1);
end;

procedure Tformdoppelkopf.gridspieler2DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if other= 1 then gridspieler2.Canvas.Draw(rect.left, rect.top, Karten[48]);
end;

procedure Tformdoppelkopf.gridspieler3DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if other= 1 then gridspieler3.Canvas.Draw(rect.left, rect.top, Karten[48]);
end;

procedure Tformdoppelkopf.gridspieler4DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if other= 1 then gridspieler4.Canvas.Draw(rect.left, rect.top, Karten[48]);
end;

procedure Tformdoppelkopf.btchatClick(Sender: TObject);
begin
  if not (edit1.Text=('')) then begin
    chatfenster.Lines.Add('C: ' + edit1.text);
    chatfenster.Perform(WM_VSCROLL, SB_BOTTOM, 0);
    edit1.Clear;
  end;
end;

procedure Tformdoppelkopf.btKommentarClick(Sender: TObject);
begin
  if not (edit1.Text=('')) then begin
    chatfenster.Lines.Add('K: ' + edit1.text);
     edit1.Clear;
  end;
end;

procedure Tformdoppelkopf.btregelnClick(Sender: TObject);
begin
  mregeln.Clear;
  if zstd=0 then begin
    mregeln.Visible:=true;
    btregeln.Caption:=('Genug!');
    if OpenDlg.Execute then begin
      mregeln.Lines.LoadFromFile(OpenDlg.FileName);
    end;
    zstd:=1;
  end else begin
    btregeln.Caption:=('Regeln!');
    mregeln.Visible:=false;
    zstd:=0;
end;
end;

procedure Tformdoppelkopf.FormCloseQuery(Sender: TObject;
 var CanClose: Boolean);
begin
 CanClose:= MessageDlg('Wirklich beenden?',
               mtConfirmation,
               [mbyes,mbno],
               0) = mrYes;

end;

procedure Tformdoppelkopf.Button1Click(Sender: TObject);
var
  MemoText : String;
  Text : String;
begin
  MemoText := chatfenster.Text;
  Text := 'Das ist ein Test';
  Insert(Text +Slinebreak, MemoText, +37);
  chatfenster.Text := MemoText;
end;

function Tformdoppelkopf.PosN(Substring, Mainstring: string; n: Integer): Integer;    // Funktion zum Suchen ob ein Zeichen im String enthalten ist
begin                                                                          // 
  if Pos(substring, mainstring) = 0 then begin                                 // 
    posn := 0;                                                                 // 
    Exit;                                                                      // 
  end else begin                                                               // 
    if n = 1 then posn := Pos(substring, mainstring)                          // 
    else begin                                                                 // 
      posn := Pos(substring, mainstring) + posn(substring, Copy(mainstring,    // 
         (Pos(substring, mainstring) + 1), Length(mainstring)), n - 1);        // 
    end;                                                                       // 
  end;                                                                         // 
end;

procedure Tformdoppelkopf.gridspieler1Click(Sender: TObject);
begin
gekarten:=gekarten+1;
chr99:=gridspieler1.Col;
gridstich.Refresh;
//gridspieler1.Enabled:=false;
end;

procedure Tformdoppelkopf.gridstichDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if other=1 then begin
  arstich[0]:=spieler1[chr99];
  arstich[1]:=0;
  arstich[2]:=0;
  arstich[3]:=0;
  gridstich.Canvas.Draw(rect.Left, rect.Top, karten[arstich[0]]);
end;
end;

procedure Tformdoppelkopf.btschweineClick(Sender: TObject);
var
  MemoText : String;
begin
  btschweine.Visible:=false;
  MemoText:=chatfenster.Text;
  Insert('A: Spieler 1 hat Schweine!' +Slinebreak, MemoText, +37);
  chatfenster.Text := MemoText;
end;

procedure Tformdoppelkopf.btsiegClick(Sender: TObject);
begin
  if btsieg.Caption=('Re!') then textein('A: Spieler 1 sagt Re!');
  if btsieg.Caption=('Kontra!') then textein('A: Spieler 1 sagt Kontra!');
  btsieg.Enabled:=false;
  bthochzeit.Enabled:=false;
  btheimlichen.Enabled:=false;
end;

procedure Tformdoppelkopf.textein(txt:string);
var
  MemoText : String;
begin
   MemoText:=chatfenster.Text;
   Insert(txt +Slinebreak, MemoText, +37);
   chatfenster.Text:=MemoText;
end;
procedure Tformdoppelkopf.btsauenClick(Sender: TObject);
begin
  btsauen.Enabled:=false;
  textein('A: Spieler 1 hat Superschweine!');
end;

procedure Tformdoppelkopf.btheimlichenClick(Sender: TObject);
begin
  textein('(A): Ich spiele einen Heimlichen');
  bthochzeit.Enabled:=false;
  btheimlichen.Enabled:=false;
  btsieg.Enabled:=false;
  laspieler2.Caption:=('Spieler 2 - Gegner');
  laspieler3.Caption:=('Spieler 3 - Gegner');
  laspieler4.Caption:=('Spieler 3 - Gegner');
end;

procedure Tformdoppelkopf.btsonssoliClick(Sender: TObject);
begin
 showmessage('Geben Sie dem Programmierer nur 3.000€ für XXL-Version des Programms - und dann gehts');
end;

procedure Tformdoppelkopf.btkoenigClick(Sender: TObject);
begin
showmessage('Das geht nich! Wir sind hier nich bei Maxens!');
end;

procedure Tformdoppelkopf.btkeinenvClick(Sender: TObject);
begin
  panel1.Visible:=false;
  disabbl(1);
end;

procedure Tformdoppelkopf.bthochzeitClick(Sender: TObject);
begin
  textein('A: ' + 'Spieler 1 hat ne Hochzeit!');
  bthochzeit.Enabled:=false;
  btheimlichen.Enabled:=false;
end;

procedure Tformdoppelkopf.disabbl;
begin
  if i=0 then begin
  btschweine.Enabled:=false;
  btsieg.Enabled:=false;
  btkeine9.Enabled:=false;
  btstrich.Enabled:=false;
  btheimlichen.Enabled:=false;
  bthochzeit.Enabled:=false;
  btarmut.Enabled:=false;
  bt5neun.Enabled:=false;

  btaus.Enabled:=false;
  btvorbehalte.Enabled:=false;
  btgebe.Enabled:=false;
  gridspieler1.Enabled:=false;
  gridspieler2.Enabled:=false;
  gridspieler3.Enabled:=false;
  gridspieler4.Enabled:=false;

  panel1.Visible:=true;
  end;
  if i=1 then begin
    btaus.Enabled:=true;
    btvorbehalte.Enabled:=true;
    btgebe.Enabled:=true;
    gridspieler1.Enabled:=true;
    gridspieler2.Enabled:=true;
    gridspieler3.Enabled:=true;
    gridspieler4.Enabled:=true;
   
    panel1.Visible:=false;
  end;
end;

procedure Tformdoppelkopf.btarmutClick(Sender: TObject);
begin
   if poskr>1 then textein('Spieler 1 ist arm - mit')
   else textein('Spieler 1 ist arm - ohne');
   btarmut.Enabled:=false;
end;

procedure Tformdoppelkopf.btstrichClick(Sender: TObject);
begin
 textein('Es wird neugegeben, da Spieler1 "unterm Strich ist".');
 btstrich.Enabled:=false;
end;

procedure Tformdoppelkopf.bt5neunClick(Sender: TObject);
begin
  textein('Es wird neugegeben, da Spieler1 mind. fünf Neunen hat.');
  bt5neun.Enabled:=false;
end;

procedure Tformdoppelkopf.btkeine9Click(Sender: TObject);
begin
  if ansa=0 then
  if btkeine9.Caption=('Keine 9!') then begin
  btkeine9.Caption:=('Keine 6!');
  textein('A: Spieler 1 erreicht mind. 151 Augen.');
  end;
  if ansa=1 then
  if btkeine9.Caption=('Keine 6!') then begin
  btkeine9.Caption:=('Keine 3!');
  textein('A: Spieler 1 erreicht mind. 181 Augen.');
  end;
  if ansa=2 then
  if btkeine9.Caption=('Keine 3!') then begin
  btkeine9.Caption:=('Schwarz!');
  textein('A: Spieler 1 erreicht mind. 201 Augen.');
  end;
  if ansa=3 then
  if btkeine9.Caption=('Schwarz!') then textein('A: Spieler 1 bekommt alle Augen.');
ansa:=ansa+1;
end;

end.
Bis bald, Wieland

Joe_the_Junkie 26. Mär 2006 11:52

Re: Doppelkopf-Projekt
 
Ich hab einfach mal ne ganz andere kurze Frage, jedenfalls passt es, weil es um Kartenspiele geht. Besteht eigentlich irgendwie die Möglichkeit (außer "Selber einscannen") Original Grafiken von Karten zu bekommen?

Ich meine, woher haben alle anderen Spiele, die original Karten her?

tankm26 26. Mär 2006 15:55

Re: Doppelkopf-Projekt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Spielkarten kann man sich aus der registry ziehen. Willst du auchnoch den Weg wissen?

tankm26 3. Apr 2006 17:50

Re: Doppelkopf-Projekt
 
Liste der Anhänge anzeigen (Anzahl: 2)
Mittlerweile hab' ich mich mal wieder rangemacht und Phase zwei abgeschlossen.

Für Verbesserungen bin ich jederzeit offen... :wink:


Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, Buttons, jpeg, ExtCtrls, ComCtrls, Spin,ShellApi,
  mmsystem ;

type
  Tformdoppelkopf = class(TForm)
    gridspieler1: TStringGrid;
    gridspieler2: TStringGrid;
    gridspieler3: TStringGrid;
    gridspieler4: TStringGrid;
    btaus: TBitBtn;
    btgebe: TBitBtn;
    logo_w: TImage;
    Chatfenster: TMemo;
    Edit1: TEdit;
    btKommentar: TButton;
    btchat: TButton;
    btregeln: TButton;
    OpenDlg: TOpenDialog;
    laspieler4: TLabel;
    laspieler3: TLabel;
    laspieler2: TLabel;
    Button1: TButton;
    Label1: TLabel;
    btvorbehalte: TButton;
    Label2: TLabel;
    gridstich: TStringGrid;
    lastich: TLabel;
    Panel1: TPanel;
    btsauen: TButton;
    bthochzeit: TButton;
    btsieg: TButton;
    btkeine9: TButton;
    bt5neun: TButton;
    btarmut: TButton;
    btschweine: TButton;
    btkeinenv: TButton;
    btheimlichen: TButton;
    btstrich: TButton;
    btkoenig: TButton;
    btsonssoli: TButton;
    trumpfanzahl: TLabel;
    rregeln: TRichEdit;
    Image1: TImage;
    BitBtn1: TBitBtn;
    laarmut: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    btgrid1enabled: TButton;
    Label5: TLabel;
    Kartenaufnahme: TButton;
    procedure btausClick(Sender: TObject);
    procedure btgebeClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure gridspieler1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure gridspieler2DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure gridspieler3DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure gridspieler4DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure btchatClick(Sender: TObject);
    procedure btKommentarClick(Sender: TObject);
    procedure btregelnClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure btvorbehalteClick(Sender: TObject);
    procedure gridspieler1Click(Sender: TObject);
    procedure btschweineClick(Sender: TObject);
    procedure btsiegClick(Sender: TObject);
    procedure btsauenClick(Sender: TObject);
    procedure btheimlichenClick(Sender: TObject);
    procedure btsonssoliClick(Sender: TObject);
    procedure btkoenigClick(Sender: TObject);
    procedure btkeinenvClick(Sender: TObject);
    procedure bthochzeitClick(Sender: TObject);
    procedure btarmutClick(Sender: TObject);
    procedure btstrichClick(Sender: TObject);
    procedure bt5neunClick(Sender: TObject);
    procedure btkeine9Click(Sender: TObject);
    procedure btgrid1enabledClick(Sender: TObject);
    procedure gridstichDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure KartenaufnahmeClick(Sender: TObject);
  private
  procedure geben;
  procedure wimageload;
  procedure sreihenfolge;
  function PosN(Substring, Mainstring: string; n: Integer): Integer;
  procedure cleangrd(grd:TStringgrid);
  procedure sortiere(w,s,h,e:integer);
  procedure textein(txt:string);
  procedure disabbl(i:integer);
  public
    { Public declarations }
  end;

var
  formdoppelkopf: Tformdoppelkopf;
  karten:array[0..48] of TBitmap;
  nummern:array[0..48]of Integer;
  spieler1:array[0..11] of Integer;
  spieler2:array[0..11] of Integer;
  spieler3:array[0..11] of Integer;
  spieler4:array[0..11] of Integer;
  arstich:array[0..3] of Integer;
  arar: array[0..2] of Integer;
  schweine1, supers1,hochzeit1,armut,neun,
  gekarten, //wieviele Karten gespielt wurden
  ansa, //für keine 9, Anzahl der angesagten "Limits"
  other,//ob Karten gegben worden sind
  poskr, //ob ne kreuzdame vorhanden ist, und wenn ja wo (w/w+1)
  zstd, // ob Regeln angezeigt werden oder nich
  dransein,wr1,wr2,wr3,wr4, //für die Reihenfolge der Spieler
  trumpf, //Anzahl der Trümpfe
  anzahl,
  vorbehaltclick,
  siegja:integer; //Anzahl der gespielten Karten
  timeto:string; // Spielbeginn
const LF = #43#10; // LF steht für LineFeed

implementation

{$R *.dfm}

{ Sounds: sndPlaySound(PChar('C:\Datei.wav'),SND_SYNC);
SND_SYNC = Während die Datei abgespielt wird, steht die Anwendung
SND_ASYNC = Die Datei wird unabhängig vom Programm abgespielt.
SND_LOOP = Immer wieder und immer wieder
sndPlaySound(nil,0);}

procedure Tformdoppelkopf.FormCreate(Sender: TObject);
var w:integer;
begin
timeto:=(timetostr(now));
textein('Spielbeginn: ' + timeto);
  for w:=0 to 48 do
    nummern[w]:=w;
  wimageload;
  cleangrd(gridspieler1);
  cleangrd(gridspieler2);
  cleangrd(gridspieler3);
  cleangrd(gridspieler4);
  cleangrd(gridstich);
end;

procedure Tformdoppelkopf.textein(txt:string);
var
  MemoText : String;
begin
   MemoText:=chatfenster.Text;
   Insert(Slinebreak +txt, MemoText, +38);
   chatfenster.Text:=MemoText;
end;

procedure TFormdoppelkopf.sortiere(w,s,h,e:integer);
var x,y,q:integer;
begin
 if h=1 then begin
  if s=1 then begin
    for x:=0 to 10 do
     if spieler1[x]=w then begin
       spieler1[x]:=spieler1[x+1];
       spieler1[x+1]:=w;
     end;
  end;
 end;
 if h=0 then begin
   for x:=0 to 10 do begin
   for q:=x+1 to 11 do begin
     if ((spieler1[q])<(spieler1[x])) then begin
       y:=spieler1[x];
       spieler1[x]:=spieler1[q];
       spieler1[q]:=y;
     end;
   end;
   end;
 end;
    gridspieler1.Refresh;
end;

procedure TFormdoppelkopf.cleangrd(grd:TStringgrid);
var grdRec:TGridRect;
begin
with grdRec do begin
Top:=-1;
Left:=-1;
Right:=-1;
Bottom:=-1;
end;
grd.Selection:=grdRec;
end;

procedure TFormdoppelkopf.sreihenfolge;
begin
  if wr1=4 then wr1:=1 else wr1:=wr1+1;
  if wr2=4 then wr1:=1 else wr2:=wr2+1;
  if wr3=4 then wr1:=1 else wr3:=wr3+1;
  if wr4=4 then wr1:=1 else wr4:=wr4+1;
  if wr1=4 then
    dransein:=1
  else dransein:=wr1+1;
end;

procedure Tformdoppelkopf.geben;
var
 w,i,x,j:integer;
begin
  for w:=0 to 11 do begin
    spieler1[w]:=48;
    spieler2[w]:=48;
    spieler3[w]:=48;
    spieler4[w]:=48;
  end;
  chatfenster.Clear;
  chatfenster.Lines.Add('Chatfenster');
  chatfenster.Lines.Add('Spielbeginn: '+(timeto));
  Randomize;
  for i:= 0 to 47 do
  begin
    j:=Random(47);
    X:=nummern[i] ;
    nummern[i]:= nummern[j];
    nummern[j]:=x;
  end;
{  spieler1[0]:=1;  // 22
  spieler1[1]:=2;   //23
  spieler1[2]:=3;      //28
  spieler1[3]:=4;       //29
  spieler1[4]:=5;      //40
  spieler1[5]:=6;     //41
  spieler1[6]:=7;        //42
  spieler1[7]:=12;       //43
  spieler1[8]:=13;       //44
  spieler1[9]:=45;        // 45
  spieler1[10]:=46;      //  46
  spieler1[11]:=47;       //47 }
  for i:=0 to 11 do begin
    spieler1[i]:=nummern[i];
    spieler2[i]:=nummern[i+12];
    spieler3[i]:=nummern[i+24];
    spieler4[i]:=nummern[i+36];
  end;
  for i:=0 to 10 do
  begin
    for j:=i+1 to 11 do
    begin
      if spieler1[j] < spieler1[i] then begin
        x:=spieler1[i];
        spieler1[i]:=spieler1[j];
        spieler1[j]:=x;
      end;
      if spieler2[j] < spieler2[i] then begin
        x:=spieler2[i];
        spieler2[i]:=spieler2[j];
        spieler2[j]:=x;
      end;
      if spieler3[j] < spieler3[i] then begin
        x:=spieler3[i];
        spieler3[i]:=spieler3[j];
        spieler3[j]:=x;
      end;
      if spieler4[j] < spieler4[i] then begin
        x:=spieler4[i];
        spieler4[i]:=spieler4[j];
        spieler4[j]:=x;
      end;
    end;
  end;
other:=1;
gridspieler1.Refresh;
gridspieler2.Refresh;
gridspieler3.Refresh;
gridspieler4.Refresh;
end;


procedure Tformdoppelkopf.btausClick(Sender: TObject);
begin
  //MessageDlg('Copyright © 2006 by tankm26', mtCustom, [mbOK], 0);
  close;
end;

procedure Tformdoppelkopf.btgebeClick(Sender: TObject);
begin
  arstich[0]:=nummern[48];
  arstich[1]:=nummern[48];
  arstich[2]:=nummern[48];
  arstich[3]:=nummern[48];
  btschweine.Visible:=true;
  siegja:=0;
  anzahl:=0;
  label5.Caption:=IntToStr(anzahl);
  gekarten:=0;
  zstd:=0;
  other:=0;
  ansa:=0;
  gekarten:=0;
  geben;
  vorbehaltclick:=0;
  btvorbehalte.Enabled:=true;
  gridspieler1.Enabled:=true;
  gridstich.Refresh;
end;

procedure Tformdoppelkopf.btvorbehalteClick(Sender: TObject);
var w:integer;
begin
trumpf:=0; neun:=0; hochzeit1:=0; schweine1:=0; supers1:=0;
disabbl(0);
if vorbehaltclick=0 then begin
for w:=0 to 11 do begin
  if spieler1[w]>21 then begin      //Trümpfe zählen
    trumpf:=trumpf+1;
    label2.Caption:=IntToStr(trumpf);
  end;
  //if trumpf=2 then arstich[2]:=11;
  if spieler1[w]=0 then neun:=1; if spieler1[w]=1 then neun:=neun+1;       //herz 9
  if spieler1[w]=6 then neun:=neun+1; if spieler1[w]=7 then neun:=neun+1;  //pik 9
  if spieler1[w]=14 then neun:=neun+1; if spieler1[w]=15 then neun:=neun+1; //kreuz 9
  if spieler1[w]=22 then neun:=neun+1; if spieler1[w]=23 then neun:=neun+1; //karo 9
  if (spieler1[w]=44) and (spieler1[w+1]=45)then hochzeit1:=1;  //Hochzeit
  if ((spieler1[w]=44) or (spieler1[w]=45)) then poskr:=w;    //Kreuzdame
  if (spieler1[w]= 28)and(spieler1[w+1]= 29) then schweine1:=1;  //Schweine
  if schweine1=1 then if ((spieler1[w]= 22)and(spieler1[w+1]= 23))then supers1:=1; //(Super-)sauen
  if gekarten=0 then begin
    if spieler1[11]<29 then btstrich.Enabled:=true;              // unterm Strich
    if (neun>4) then bt5neun.Enabled:=true;                   // Neunen
    if armut=1 then btarmut.Enabled:=true;                     //Armut
    if schweine1=1 then btschweine.Enabled:=true;              //Schweine
    if ((btschweine.Enabled=true) and (supers1=1)) then btsauen.Enabled:=true; //(Super-)sauen
    if hochzeit1=1 then begin bthochzeit.Enabled:=true; btheimlichen.Enabled:=true; //  Hochzeit
      end else begin
        bthochzeit.Enabled:=false;             //  Hz
        btheimlichen.Enabled:=false; end;      //  Hz
    if trumpf<4 then begin
      armut:=1;
      btarmut.Enabled:=true; end;
    if trumpf>3 then begin
      armut:=0;
      btarmut.Enabled:=false;
end;
label1.Caption:=IntToStr(armut);
vorbehaltclick:=1;
  end;
end; // for w:=0 to... - end
end; // vorbehaltclick - end

if (gekarten=4) then begin
  label1.Visible:=false;
  if poskr>0 then btsieg.Caption:=('Re!') else btsieg.Caption:=('Kontra!');
  if not (laspieler2.Caption=('Spieler 2 - Gegner')) then
  btsieg.Enabled:=true;
end;
end;

procedure Tformdoppelkopf.gridspieler1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var w:integer;
begin
  for w:=0 to 47 do
   if other= 1 then begin
     if spieler1[Acol]=w then gridspieler1.Canvas.Draw(rect.left, rect.top, Karten[w]);
   end else  cleangrd(gridspieler1);
end;

procedure Tformdoppelkopf.gridspieler2DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if other= 1 then gridspieler2.Canvas.Draw(rect.left, rect.top, Karten[48]);
end;

procedure Tformdoppelkopf.gridspieler3DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if other= 1 then gridspieler3.Canvas.Draw(rect.left, rect.top, Karten[48]);
end;

procedure Tformdoppelkopf.gridspieler4DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if other= 1 then gridspieler4.Canvas.Draw(rect.left, rect.top, Karten[48]);
end;

procedure Tformdoppelkopf.btchatClick(Sender: TObject);
begin
  if not (edit1.Text=('')) then begin
    chatfenster.Lines.Add('C: ' + edit1.text);
    chatfenster.Perform(WM_VSCROLL, SB_BOTTOM, 0);
    edit1.Clear;
  end;
end;

procedure Tformdoppelkopf.btKommentarClick(Sender: TObject);
begin
  if not (edit1.Text=('')) then begin
    chatfenster.Lines.Add('K: ' + edit1.text);
     edit1.Clear;
  end;
end;

procedure Tformdoppelkopf.btregelnClick(Sender: TObject);
begin
  rregeln.Clear;
  if zstd=0 then begin
    rregeln.Visible:=true;
    btregeln.Caption:=('Genug!');
    if OpenDlg.Execute then
   rregeln.Lines.LoadFromFile(OpenDlg.FileName);
    //rregeln.Lines.LoadFromFile(...\'01_dokoordnung');
    zstd:=1;
  end else begin
    btregeln.Caption:=('Regeln!');
    rregeln.Visible:=false;
    zstd:=0;
end;
end;

procedure Tformdoppelkopf.FormCloseQuery(Sender: TObject;
 var CanClose: Boolean);
begin
 CanClose:= MessageDlg('Wirklich beenden?',
               mtConfirmation,
               [mbyes,mbno],
               0) = mrYes;

end;

procedure Tformdoppelkopf.Button1Click(Sender: TObject);
var
  MemoText : String;
  Text : String;
begin
  MemoText := chatfenster.Text;
  Text := 'Das ist ein Test';
  Insert(Text +Slinebreak, MemoText, +37);
  chatfenster.Text := MemoText;
end;

function Tformdoppelkopf.PosN(Substring, Mainstring: string; n: Integer): Integer;    // Funktion zum Suchen ob ein Zeichen im String enthalten ist
begin                                                                          // 
  if Pos(substring, mainstring) = 0 then begin                                 // 
    posn := 0;                                                                 // 
    Exit;                                                                      // 
  end else begin                                                               // 
    if n = 1 then posn := Pos(substring, mainstring)                          // 
    else begin                                                                 // 
      posn := Pos(substring, mainstring) + posn(substring, Copy(mainstring,    // 
         (Pos(substring, mainstring) + 1), Length(mainstring)), n - 1);        // 
    end;                                                                       // 
  end;                                                                         // 
end;

procedure Tformdoppelkopf.gridspieler1Click(Sender: TObject);
begin
  gekarten:=gekarten+1;
  label3.CAption:=IntToStr (gekarten);
  if anzahl=0 then begin
    arstich[0]:=spieler1[gridspieler1.Col];
    spieler1[gridspieler1.Col]:=nummern[48];
    arstich[1]:=nummern[48];
    arstich[2]:=nummern[48];
    arstich[3]:=nummern[48];
  end;
  if anzahl=1 then begin
    arstich[1]:=spieler1[gridspieler1.Col];
    spieler1[gridspieler1.Col]:=nummern[48];
    arstich[2]:=nummern[48];
    arstich[3]:=nummern[48];
  end;
  if anzahl=2 then begin
    arstich[2]:=spieler1[gridspieler1.Col];
    spieler1[gridspieler1.Col]:=nummern[48];
    arstich[3]:=nummern[48];
  end;
  if anzahl=3 then begin
    arstich[3]:=spieler1[gridspieler1.Col];
    spieler1[gridspieler1.Col]:=nummern[48];
  end;
  anzahl:=anzahl+1;
  label5.Caption:=IntToStr(anzahl);
  sortiere(48,1,1,0);
  gridstich.Refresh;
  gridspieler1.Refresh;
end;

procedure Tformdoppelkopf.btschweineClick(Sender: TObject);
begin
  sortiere(28,1,1,0);
  sortiere(29,1,1,0);
  btschweine.Visible:=false;
  textein('A: Spieler 1 hat Schweine!');
  btsauen.Enabled:=true;
end;
           
procedure Tformdoppelkopf.btsiegClick(Sender: TObject);
begin
  siegja:=1;
  if btsieg.Caption=('Re!') then textein('A: Spieler 1 sagt Re!');
  if btsieg.Caption=('Kontra!') then textein('A: Spieler 1 sagt Kontra!');
  btsieg.Enabled:=false;
  btkeine9.Enabled:=true;
  bthochzeit.Enabled:=false;
  btheimlichen.Enabled:=false;
end;



procedure Tformdoppelkopf.btsauenClick(Sender: TObject);
begin
  sortiere(22,1,1,0);
  sortiere(23,1,1,0);
  btsauen.Enabled:=false;
  textein('A: Spieler 1 hat Superschweine!');
end;

procedure Tformdoppelkopf.btheimlichenClick(Sender: TObject);
begin
  textein('(A): Ich spiele einen Heimlichen');
  bthochzeit.Enabled:=false;
  btheimlichen.Enabled:=false;
  btsieg.Enabled:=false;
  laspieler2.Caption:=('Spieler 2 - Gegner');
  laspieler3.Caption:=('Spieler 3 - Gegner');
  laspieler4.Caption:=('Spieler 4 - Gegner');
end;

procedure Tformdoppelkopf.btsonssoliClick(Sender: TObject);
begin
 showmessage('Geben Sie dem Programmierer nur 3.000€ für XXL-Version des Programms - und dann gehts');
end;

procedure Tformdoppelkopf.btkoenigClick(Sender: TObject);
begin
showmessage('Das geht nich! Wir sind hier nich bei Maxens!');
end;

procedure Tformdoppelkopf.btkeinenvClick(Sender: TObject);
begin
  if not (btheimlichen.Enabled=true) then begin
    panel1.Visible:=false;
    disabbl(1);
  end else showmessage('Entscheiden Sie sich gefälligst zwischen einem "Heimlichen" und der "Hochzeit"');
end;

procedure Tformdoppelkopf.bthochzeitClick(Sender: TObject);
begin
  textein('A: ' + 'Spieler 1 hat ne Hochzeit!');
  bthochzeit.Enabled:=false;
  btheimlichen.Enabled:=false;
end;

procedure Tformdoppelkopf.disabbl;
begin
  if i=0 then begin
  btschweine.Enabled:=false;
  btsieg.Enabled:=false;
  btkeine9.Enabled:=false;
  btstrich.Enabled:=false;
  btheimlichen.Enabled:=false;
  bthochzeit.Enabled:=false;
  btarmut.Enabled:=false;
  bt5neun.Enabled:=false;

  btaus.Enabled:=false;
  btvorbehalte.Enabled:=false;
  btgebe.Enabled:=false;
  gridspieler1.Enabled:=false;
  gridspieler2.Enabled:=false;
  gridspieler3.Enabled:=false;
  gridspieler4.Enabled:=false;

  panel1.Visible:=true;
  end;
  if i=1 then begin
    btaus.Enabled:=true;
    btvorbehalte.Enabled:=true;
    btgebe.Enabled:=true;
    gridspieler1.Enabled:=true;
    gridspieler2.Enabled:=true;
    gridspieler3.Enabled:=true;
    gridspieler4.Enabled:=true;
   
    panel1.Visible:=false;
  end;
end;

procedure Tformdoppelkopf.btarmutClick(Sender: TObject);
begin
  if poskr>1 then textein('Spieler 1 ist arm - mit')
    else textein('Spieler 1 ist arm - ohne');
   btarmut.Enabled:=false;
end;

procedure Tformdoppelkopf.btstrichClick(Sender: TObject);
begin
 textein('Es wird neugegeben, da Spieler1 "unterm Strich ist".');
 btstrich.Enabled:=false;
end;

procedure Tformdoppelkopf.bt5neunClick(Sender: TObject);
begin
  textein('Es wird neugegeben, da Spieler1 mind. fünf Neunen hat.');
  bt5neun.Enabled:=false;
end;

procedure Tformdoppelkopf.btkeine9Click(Sender: TObject);
begin
  if ansa=0 then
  if btkeine9.Caption=('Keine 9!') then begin
  btkeine9.Caption:=('Keine 6!');
  textein('A: Spieler 1 erreicht mind. 151 Augen.');
  end;
  if ansa=1 then
  if btkeine9.Caption=('Keine 6!') then begin
  btkeine9.Caption:=('Keine 3!');
  textein('A: Spieler 1 erreicht mind. 181 Augen.');
  end;
  if ansa=2 then
  if btkeine9.Caption=('Keine 3!') then begin
  btkeine9.Caption:=('Schwarz!');
  textein('A: Spieler 1 erreicht mind. 201 Augen.');
  end;
  if ansa=3 then
  if btkeine9.Caption=('Schwarz!') then begin
    textein('A: Spieler 1 bekommt alle Augen.');
    btkeine9.Enabled:=false;
  end;
ansa:=ansa+1;
end;

procedure Tformdoppelkopf.wimageload;
var
  i: integer;
begin
  for i:=0 to 48 do
  begin
    karten[i]:=TBitmap.Create;
    karten[i].LoadFromFile(IntToStr(i)+'.bmp');
  end;
end;

procedure Tformdoppelkopf.btgrid1enabledClick(Sender: TObject);
begin
 if gridspieler1.Enabled=true then begin
   gridspieler1.Enabled:=false;
   btgrid1enabled.Caption:=('Enablen');
 end else begin
   gridspieler1.Enabled:=true;
     btgrid1enabled.Caption:=('Disablen');
 end;
end;

procedure Tformdoppelkopf.gridstichDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var w:integer;
begin
   if other= 1 then begin
  for w:=0 to 47 do
     if arstich[Acol]=w then gridstich.Canvas.Draw(rect.left, rect.top, Karten[w]);
       end else  cleangrd(gridspieler1);
end ;
procedure Tformdoppelkopf.KartenaufnahmeClick(Sender: TObject);
begin
  if anzahl=4 then begin
    spieler1[8]:=arstich[0];
    arstich[0]:=nummern[48];
    spieler1[9]:=arstich[1];
        arstich[1]:=nummern[48];
    spieler1[10]:=arstich[2];
        arstich[2]:=nummern[48];
    spieler1[11]:=arstich[3];
        arstich[3]:=nummern[48];
  end;
sortiere(0,1,0,0);
gridspieler1.Refresh;
gridstich.Refresh;
end;

end.
Nun sind dran:


· Bedienen
· Stich
· Punkte
· Sieger
. Spielanleitung


Bis denn,

Wieland

tankm26 5. Apr 2006 12:16

Re: Doppelkopf-Projekt
 
Liste der Anhänge anzeigen (Anzahl: 1)
so, ich hab nu einige Verbesserungen vorgenommen, so kann man nun Karten ausspielen (zwar nur eine Runde, aber das wird scho')

tankm26 7. Mai 2006 20:16

Re: Doppelkopf-Projekt
 
wie kann ich diese for-Schleife abbrechen? es soll überprüft werden, ob 'w' in spieler2 enthalten ist.

Delphi-Quellcode:
 for s:=0 to 10 do begin
   if not spieler2[s]=w then womputerzug(a) else begin
     if wr2=1 then begin
       wr3:=2;
       arstich[0]:=spieler2[s];
       arstich[1]:=nummern[48];
       arstich[2]:=nummern[48];
       arstich[3]:=nummern[48];
       hintgr(3);
     end;
   if wr2=2 then begin wr3:=3; arstich[1]:=spieler2[s]; hintgr(3); end;
   if wr2=3 then begin wr3:=4; arstich[2]:=spieler2[s]; hintgr(3); end;
   if wr2=4 then begin kartenaufnahme.Enabled:=true; arstich[3]:=spieler2[s]; end;
   spieler2[s]:=nummern[48];
   cleangrd(gridspieler2);
   sortiere(48,1,0,1);
   gridstich.Refresh;
   gekarten:=gekarten+1;
   label3.CAption:=IntToStr (gekarten);
   end;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz