, поэтому я нашел исходный код блэкджека на этом forum, но у меня есть проблема, чтобы заставить его работать. Я сам создал форму для кода, и я думаю, что это проблема. Игра должна начинаться, когда я нажимаю «новую кнопку», но ничего не происходит, когда я нажимаю на нее. Вот исходный код:Почему мой обработчик событий нажатия кнопки не выполняет то, что я ожидаю?
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, Buttons;
type
{ TForm1 }
TForm1 = class(TForm)
BetCount: TLabel; //not used
MoneyEdit: TEdit; //not used
BetEdit: TEdit; //not used
HitBtn: TButton;
MoneyCountLbl: TLabel; //not used
NewBtn: TButton;
StandBtn: TButton;
PlayerEdit: TEdit;
DealerEdit: TEdit;
MemoDealer: TMemo;
MemoPlayer: TMemo;
procedure PickASuit;
procedure PickACard;
procedure CardName;
procedure LookAtHands;
procedure newDeal;
procedure DoIt(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
var
suitNum, cardNum, current, total1, total2 : Integer;
suitStr, cardStr : String[8];
procedure TForm1.PickASuit;
begin
suitNum := random(4)+1;
Case suitNum of
1 : suitStr := 'Spades';
2 : suitStr := 'Clubs';
3 : suitStr := 'Diamonds';
4 : suitStr := 'Hearts';
end;
end;
procedure TForm1.CardName;
begin
Case cardNum of
1 : cardStr := 'Ace';
2 : cardStr := 'Two';
3 : cardStr := 'Three';
4 : cardStr := 'Four';
5 : cardStr := 'Five';
6 : cardStr := 'Six';
7 : cardStr := 'Seven';
8 : cardStr := 'Eight';
9 : cardStr := 'Nine';
10 : cardStr := 'Ten';
11 : cardStr := 'Jack';
12 : cardStr := 'Queen';
13 : cardStr := 'King';
end;
Case cardNum of
1 : cardNum := 11;
10..13 : cardNum := 10;
end;
end;
procedure TForm1.PickACard;
begin
cardNum := random(13)+1;
PickASuit; {runs pickasuit procedure}
CardName; {runs cardnume procedure}
Case current of {tells the program what its doing}
1 : begin
MemoPlayer.Lines.Add(cardStr + ' of ' + suitStr);
total1 := total1 + cardNum;
PlayerEdit.Text := IntToStr(total1);
end;
2 : begin
MemoDealer.Lines.Add(cardStr + ' of ' + suitStr);
total2 := total2 + cardNum;
DealerEdit.Text := IntToStr(total2);
end;
end;
end;
procedure TForm1.LookAtHands;
Begin
If total2 > 21 then ShowMessage('House Busted')
Else if total1 > total2 then ShowMessage('You win')
Else if total1 = total2 then ShowMessage('Draw')
Else ShowMessage('You lose');
newDeal;
End;
procedure TForm1.newDeal;
Begin
MemoDealer.Clear;
MemoPlayer.Clear;
total1 := 0;
total2 := 0;
current := 1;
PickACard;
current := 2;
PickACard;
end;
procedure TForm1.DoIt(Sender: TObject);
begin
current := (Sender as TButton).Tag;
Case current of
1 : Begin
PickACard;
If total1 > 21 then
begin ShowMessage('Busted');
newDeal;
end;
end;
2 : begin While total2 < 17 do PickACard;
LookAtHands;
end;
3 : newDeal;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
end;
end.
Я поставил хит, новый, и стоят кнопки для выполнения процедуры 'DoIt'
ли я ошибусь? Я только начинаю изучать дельфи, поэтому, надеюсь, вы, ребята, поймете, что я делаю что-то «глупое».
Обработчик событий «DoIt» запрашивает тег кнопок. При разработке формы вы присвоили номер этим тегам? Если нет, то тег равен 0, и ничего не произойдет в «DoIt», потому что он ожидает, что тег будет равен 1, 2 и т. Д. –
Проводили ли вы какую-либо отладку? Если вы не знаете, как отлаживать, вы задаете неправильный вопрос. Бессмысленно приступать к вашим усилиям, если вы не прилагаете напряженных усилий для изучения навыков отладки. –
Интересно, как '{$ mode objfpc}' скомпилирован в Delphi. Поэтому я предполагаю, что это было в Лазаре, а не в Дельфах? –