13 фев 2019 (OFF) Kaspersky (S) :

Викторина

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, Math, iniFiles;

type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
procedure NewVopros;
procedure Podskazka(p: integer);
procedure Proverka;
end;

var
Form1: TForm1;
List: TStringList;
vopros, otvet, o: string;
p1, p2: boolean;
t, ball: integer;
ini: TIniFile;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if (Edit1.Text = '') or (vopros = '') or (otvet = '') then
Exit;
o := Edit1.Text;
Memo1.Lines.Add('Игрок: ' + Edit1.Text);
Edit1.Text := '';
Proverka;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if otvet = '' then
Exit;
Memo1.Lines.Add('Знайка: ' + otvet);
Memo1.Lines.Add('Знайка: Следующий вопрос через несколько секунд');
Memo1.Lines.Add('');
t := 190;
Label1.Caption := 'Время: 3:00';
vopros := '';
otvet := '';
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN) and (Edit1.Text <> '') then
Button1.OnClick(Sender);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
List.Free;
ini.WriteInteger('Баллы', 'Рекорд', ball);
ini.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
if not FileExists(ExtractFilePath(Application.ExeName) + 'Вопросы.txt') then
begin
ShowMessage('Отсутствует база вопросов!');
Halt;
end;
ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Vik.ini');
ball := ini.ReadInteger('Баллы', 'Рекорд', 0);
Label2.Caption := 'Баллы: ' + IntToStr(ball);
t := 180;
List := TStringList.Create;
List.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Вопросы.txt');
NewVopros;
end;

procedure TForm1.NewVopros;
var
n, i, m: integer;
s: string;
begin
n := RandomRange(0, List.Count - 1);
vopros := Copy(List.Strings[n], 1, Pos('|', List.Strings[n]) - 1);
otvet := Copy(List.Strings[n], Pos('|', List.Strings[n]) + 1,
Length(List.Strings[n]));
m := 1;
for i := 1 to Length(otvet) do
if otvet[i] = ' ' then
inc(m);
s := 'слов';
case m of
1:
s := ' слово';
2 .. 4:
s := ' слова';
end;
Memo1.Lines.Add('Знайка: ' + vopros + ' (' + IntToStr(m)
+ s + ' из ' + IntToStr(Length(otvet)) + ' букв)');
p1 := False;
p2 := False;
end;

procedure TForm1.Podskazka(p: integer);
var
z: string;
i: integer;
begin
z := otvet;
for i := 1 to Length(otvet) do
z[i] := '*';
case p of
1:
begin
Memo1.Lines.Add('Знайка: Первая подсказка: ' + Copy(otvet, 1,
1) + Copy(z, 2, Length(z)));
p1 := True;
end;
2:
begin
Memo1.Lines.Add('Знайка: Вторая подсказка: ' + Copy(otvet, 1,
2) + Copy(z, 3, Length(z)));
p2 := True;
end;
end;
end;

procedure TForm1.Proverka;
var
b: integer;
s: string;
begin
s := '';
if AnsiLowerCase(o) = AnsiLowerCase(otvet) then
begin
b := 3;
if p1 = True then
b := 2;
if p2 = True then
b := 1;
ball := ball + b;
Label2.Caption := 'Баллы: ' + IntToStr(ball);
if b > 1 then
s := 'а';
Memo1.Lines.Add('Знайка: Верно! Игрок зарабатывает ' + IntToStr(b)
+ ' балл' + s + '. Следующий вопрос через несколько секунд.');
Memo1.Lines.Add('');
vopros := '';
otvet := '';
t := 190;
Label1.Caption := 'Время: 3:00';
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
m, s: integer;
ss: string;
begin
dec(t);
case t of
0:
begin
Memo1.Lines.Add('Знайка: Время вышло, правильный ответ: ' + otvet);
Memo1.Lines.Add('');
NewVopros;
t := 180;
end;
60:
Podskazka(2);
120:
Podskazka(1);
180:
NewVopros;
end;
if t < 180 then
begin
m := trunc(t / 60);
s := t - m * 60;
if s < 10 then
ss := ':0'
else
ss := ':';
Label1.Caption := 'Время: ' + IntToStr(m) + ss + IntToStr(s);
end;
end;

end.
Исходник:
< Пред.След. >

Комментарии (1)

Отличный пример, спасибо
Показать комментарий
Скрыть комментарий
Для добавления комментариев необходимо авторизоваться
Врата Драконов
Пройди сквозь Врата Драконов и окунись в мир магии...
Тема: Светлая | Тёмная
Версия: Mobile | Lite | Touch | Доступно в Google Play