2017-01-02 11 views
0

, поэтому я нашел исходный код блэкджека на этом 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'

enter image description here

ли я ошибусь? Я только начинаю изучать дельфи, поэтому, надеюсь, вы, ребята, поймете, что я делаю что-то «глупое».

+1

Обработчик событий «DoIt» запрашивает тег кнопок. При разработке формы вы присвоили номер этим тегам? Если нет, то тег равен 0, и ничего не произойдет в «DoIt», потому что он ожидает, что тег будет равен 1, 2 и т. Д. –

+1

Проводили ли вы какую-либо отладку? Если вы не знаете, как отлаживать, вы задаете неправильный вопрос. Бессмысленно приступать к вашим усилиям, если вы не прилагаете напряженных усилий для изучения навыков отладки. –

+0

Интересно, как '{$ mode objfpc}' скомпилирован в Delphi. Поэтому я предполагаю, что это было в Лазаре, а не в Дельфах? –

ответ

1

Возможно, вы не заполнили свойства тегов кнопок в форме. Посмотрите в списке свойств каждой кнопки для свойства Tag. HitBtn должен иметь метку 1. Существует, по меньшей мере, одна другая кнопка, которая должна иметь Tag из 2.

+0

Да, ты совершенно прав. После того, как я установил тег для новой кнопки на 3, нажмите кнопку «1» и кнопку «Стоп» на 2, программа отлично работает. Я понятия не имел об этом «теге», так как я все еще изучаю простую и основную вещь. Ну, я узнаю новую вещь. Спасибо. – Johnny212