Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы информатики и программир...docx
Скачиваний:
25
Добавлен:
12.11.2019
Размер:
6.53 Mб
Скачать

Р ис. 8.1.8.2. Вид формы с компонентами панели Win32

Разместим компоненты: Timer1 (Interval=1000), OpenDialog1, ProgressBar1 (Min=0, Max=1, Step=1), TrackBar1 (Min=0, Max=10, Tick­Marks=tmBottomRight, Frequency=1), TabControl1 (TabOrder=3, TabPosit­ion =tpTop, имена страниц задайте в строках свойства Tabs), Panel1 (разме­щает­ся на компоненте TabControl1 со свойствами: Caption=”Стр. 1”, Alignment=taCenter), Panel2, Label1 (Просмотр дерева), Label2 (Выбор имени файла), Edit1, кнопки Button1 (...), Button2 (Standard), Button3 (Выход), TreeView1 (строки узлов дерева зададим редактором значения свойства Items). Составим соответствующие процедуры обработки событий.

procedure TForm3.TrackBar1Change(Sender:TObject); // измен. TrackBar1

begin ProgressBar1.Position:=TrackBar1.Position; end;

procedure TForm3.Timer1Timer(Sender: TObject); // таймер

begin Panel2.Caption:=TimeToStr(Time); { вывод текущего времени}end;

procedure TForm3.TabControl1Change(Sender:TObject);// изм. TabControl1

begin if TabControl1.TabIndex=0 then Panel1.Caption:='Стр.=1';

if TabControl1.TabIndex=1 then Panel1.Caption:='Стр.=2 ';

if TabControl1.TabIndex=2 then Panel1.Caption:='Стр.=3'; end;

procedure TForm3.Button1Click(Sender: TObject); // кнопка “...”

begin OpenDialog1.FileName:='*.*'; // вывод всех файлов

if OpenDialog1.Execute then Edit1.Text:=OpenDialog1.FileName {выбор}end;

procedure TForm3.Button2Click(Sender: TObject); // кнопка “Standard”

begin form2.show; end;

procedure TForm3.Button3Click(Sender: TObject); // кнопкаВыход

begin form1.Close; end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);

begin Application.Terminate; end; // корректное завершение работы

Присоединим новый модуль Unit3 к первому модулю командой File/ Use Unit. Теперь можно проверить работу программы на всех формах.

8.1.9. Игра “Поле чудес” (Delphi, C++ Builder)

В игре принимают участие три человека: двое игроков и ведущий (авторы программы: А. Влахнова и E. Петриченко).

Сначала игрок вращает барабан; после остановки барабана, если не вы­пал сектор Переход хода, в соот­ветству­ю­щее поле вводит букву и на­жи­мает кнопку Подтвердите (рис. 8.1.9.1). Если данной буквы в слове нет, ход передается другому игроку. Так продолжается до тех пор, пока один из игроков не решит назвать слово или пока не угадает его по буквам. При нажатии на кнопку Назвать слово появляется поле ввода слова. После ввода слова надо подтвердить ввод.

В начале игры ведущий загадывает слово (рис. 8.1.9.2), пред­ва­ри­тель­­но введя па­роль (текущую дату) (рис. 8.1.9.3).

Рис. 8.1.9.1. Вид формы игры “Поле чудес”

Рис. 8.1.9.2. Форма “Загадать слово” Рис. 8.1.9.3. Форма “Пароль”

На форме Поле Чудес (Form1) разместим следующие компоненты: Label1 (caption=’’, AutoSize=false, WordWrap=true); Label2 (cap­tion=’Буква’, visible=false); Label3 (caption=’ ’); Label4 (caption=’Игрок1, Ваш ход’; visible=false); Label5 (caption=’Игрок1, Ваш выигрыш - ’; visi­ble=fal­se); Label6 (caption=’Игрок2, Ваш выигрыш - ’; visible=false); кноп­ки: Button1 (caption=’Выход’), Button2 (caption=’Подтвер­ди­те’, visi­ble=false), Button3 (caption=’Загадать’), Button4 (caption= ’Назвать слово', visible=false), Button5 (caption=’Вращать барабан’, visible=false), Button6 (cap­tion=’Подтвердите’, visible=false); поле Edit1 для ввода буквы (max­len­gh=1; visible=false); поле Edit2 для ввода слова (visible=false); Image1 (ст­рел­ка); 10 компонентов StaticText (visible=false), в которых будут появ­лять­ся угаданные буквы; Chart1 (на закладке Series1: Rotation=0; на закладке Legend: TextStyle=Plain; LegendStyle=SeriesValues; остальные па­ра­метры настройте по своему усмотрению).

На форме Пароль (Form2) разместим следующие компоненты: Label1 (caption=’Введите пароль’), Edit1 (PasswordChar=’*’), Button1 (cap­tion=’Подтвердите’).

На форме Загадать слово (Form3) разместим компоненты: Memo1 (Lines=’’), Edit1 (caption=’’), Button1 (caption=’Сохранить’), Label1 (cap­tion=’Вопрос’), Label2 (caption=‘Слово*’), Label3 (caption=’* не более 10 букв’).

Тексты процедур программы для Delphi

Процедуры формы Form1 (модуль Unit1)

var Form1: TForm1; f,b,p,s,e: string; z,c,i,k,y,x,t,a,g,w,u: integer; //объявления

procedure TForm1.Button1Click(Sender: TObject); // кнопкаВыход

begin close; end;

procedure TForm1.Button3Click(Sender: TObject); // кнопкаЗагадать

begin Form2.Show; //показ формы для ввода пароля

Form1.Visible:=false; //скрытие формы Поле Чудес

Button3.Visible:=false; //скрытие кнопки “Загадать”

Button4.Visible:=true; //визуализация кнопки “Назвать слово

Button5.Visible:=true; // визуализация кнопки “Вращать барабан”

Button6.Visible:=true; // визуализация кнопки “Подтвердите”

Label2.Visible:=true; //становятся видимыми надписи

Label4.Visible:=true;

Label5.Visible:=true; Label5.Caption:=Label5.Caption+'0';

Label6.Visible:=true; Label6.Caption:=Label6.Caption+'0';

Edit1.Visible:=true; //визуализация поля для ввода буквы

Edit1.Enabled:=false; //и его блокировка

end;

procedure TForm1.Button4Click(Sender: TObject);//кнопкаНазвать словоbegin Edit2.Visible:=true; //делает видимым поле для ввода слова

Edit2.SetFocus; //и передает ему фокус

Button2.Visible:=true;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

Button5.Enabled:=false; //блокировка кнопки Вращать барабан

Randomize;z:=Random(100) ; //выбирается произвольное число из 100

i:=i+1; //в переменной считается количество поворотов

If i<z then

begin Series1.RotationAngle:=Series1.RotationAngle+5 ; //поворот диаграммы

t:=t+5;

end //запоминание угла поворота

else begin

case g of // переменная g показывает, кто сделал ход

1: begin // проверяет, какой сектор выпал и производит

case t of // соответствующие действия

316..359: begin Label4.Caption:='Игрок 2, Ваш ход' ;

Button5.Enabled:=true; Edit1.Enabled:=false; i:=-1; end;

// переменная i – это флаг, указывающий на то, что выпал

// сектор «Переход хода» и не надо суммировать очки

271..315: x:=x*2; 226..270: x:=x*4; 181..225: x:=x+500;

136..180: x:=x+750; 91..135: x:=x+100; 46..90: x:=x+250;

0..45: x:=x+1000;

end; if i<>-1 then

begin e:=inttostr(x); Label5.Caption:='Игрок1, Ваш выигрыш - '+e;

//перевод количества набранных очков в строку для вывода ее на форму

end;

end;

2: begin

case t of

316..359: begin Edit1.Enabled:=false;

Label4.Caption:='Игрок 1, Ваш ход'; Button5.Enabled:=true; i:=-1; end;

271..315: y:=y*2; 226..270: y:=y*4; 181..225: y:=y+500;

136..180: y:=y+750; 91..135: y:=y+100; 46..90: y:=y+250;

0..45: y:=y+1000;

end;

if i<>-1 then

begin e:=inttostr(y);Label6.Caption:='Игрок2, Ваш выигрыш - '+e; end;

end;

end; Timer1.Enabled:=false; // блокировка таймера

end;

Series1.Clear; // удаление диаграммы

With Series1 do

begin add(10,'100 очков',clWhite); // перерисовывает

add(10,'750 очков',clRed); // диаграмму, повернув ее на 5 град.

add(10,'1000 очков',clGreen); add(10,'250 очков',clYellow);

add(10,'*2',clBlue); add(10,'ПЕРЕХОД ХОДА',clSilver);

add(10,'500 очков',clFuchsia); add(10,'*4',clLime);

end;

end;

procedure TForm1.Edit1Change(Sender: TObject);

begin Button5.Enabled:=false; Button6.enabled:=true;

// блокировка кнопок "Вращать барабан" и “Подтвердите выбор”

end;

procedure TForm1.Button5Click(Sender:TObject);//кноп. “Вращать барабан

begin if Label4.Caption='Игрок 1, Ваш ход'

then g:=1 else g:=2; // запоминает, кто из игроков делает ход

Button4.Enabled:=true; Edit1.Enabled:=true;

Edit1.SetFocus; // устанавливает курсор в поле для ввода буквы

Timer1.Enabled:=true; // делает активным таймер

Edit1.Text:=''; // очищает поле ввода буквы

end;

procedure TForm1.Button2Click(Sender: TObject); //кнопка “Подтвердите”

begin Edit2.Visible:=false; // делает невидимым поле для ввода слова

Edit1.Enabled:=true; // разблокировка объектов

s:=Edit2.Text; // запоминается введенное слово

i:= AnsiCompareText(f,s); // сравнение загаданного и введенного слов

if i=0 then // действия при вводе игроком верного ответа

begin Label3.Caption:='ВЫ УГАДАЛИ !!!'; Edit1.enabled:=false;

Label4.Caption:=''; Button5.Enabled:=false; Button2.Enabled:=false;

end

else if a=0 then begin // a=0, если еще никто не пытался назвать слово

Button4.Enabled:=true;

if g=1 then //действия при вводе игроком1 неверного ответа

begin Label3.Caption:='Игрок 1, Вы ошиблись' ;

Label4.Caption:='Игрок 2, Вы должны назвать слово';

Edit2.Visible:=true;

Edit2.Text:=''; Button5.Enabled:=false;

Edit2.SetFocus; a:=a+1;

end

else if g=2 then

// действия при вводе игроком2 неверного ответа

begin Label3.Caption:='Игрок 2, Вы ошиблись' ;

Label4.Caption:='Игрок 1, Вы должны назвать слово';

Edit2.Visible:=true; Edit2.Text:=''; Button5.Enabled:=false;

Edit2.SetFocus; a:=a+1;

end;

end

else // если один из игроков ввел неверное слово, то выводится

// сообщение об ошибке и другому предлагается назвать слово

begin Label4.Visible:=false; Edit2.Enabled:=false;

Button5.Enabled:=false;

if Label4.Caption='Игрок 1, Вы должны назвать слово' then

Label3.Caption:='Игрок 1, Вы ошиблись, игра окончена'

else if Label4.Caption='Игрок 2, Вы должны назвать слово' then

Label3.Caption:='Игрок 2, Вы ошиблись, игра окончена' ;

end;

end;

procedure TForm1.Button6Click(Sender: TObject); //кнопка “Подтвердите”

begin f:=Form3.Edit1.Text; c:=Length(f); w:=0;

b:=Edit1.Text; // запоминается введенная буква

b:=AnsiLowerCase(b); // возвращается буква в нижнем регистре

for i:=1 to c do // в цикле введенная буква сравнивается с i-й буквой слова

begin p:=Copy(f,i,1); // возвращает i-ю букву загаданного слова

p:=AnsiLowerCase(p); // возвращается буква в нижнем регистре

if p=b then

begin u:=u+1; // в переменной считается количество угаданных букв

w:=w+1; // в переменной считается, сколько раз

// введенная буква встречается в слове

case i of // вывод угаданной буквы

1: Statictext1.Caption:=b; 2: Statictext2.Caption:=b;

3: Statictext3.Caption:=b; 4: Statictext4.Caption:=b;

5: Statictext5.Caption:=b; 6: Statictext6.Caption:=b;

7: Statictext7.Caption:=b; 8: Statictext8.Caption:=b;

9: Statictext9.Caption:=b; 10: Statictext10.Caption:=b;

end;

end

end;

Edit1.Enabled:=false; Button5.Enabled:=true;

If w<>0 then

begin if g=1 then // умножение набранных очков, если буква // в слове встречается более одного раза

begin x:=x*w; e:=inttostr(x) ;

Label5.caption:='Игрок1, Ваш выигрыш - '+e;

end

else if g=2 then

begin y:=y*w; e:=inttostr(y) ;

Label6.caption:='Игрок2, Ваш выигрыш - '+e ;

end

end // если буква названа неверно, то ход передается другому игроку

else if Label4.Caption='Игрок 1, Ваш ход'

then Label4.Caption:='Игрок 2, Ваш ход'

else Label4.Caption:='Игрок 1, Ваш ход';

if u=c then

begin Label3.Caption:='ВЫ УГАДАЛИ !!!' ; Label4.Visible:=false;

Button4.Enabled:=false; Button5.Enabled:=false;

end;

Button6.Enabled:=false;

// если количество угаданных букв совпадает с длиной слова, то

// выводится “ВЫ УГАДАЛИ !!!” и блокируются все объекты, кроме «Выход»

end;

procedure TForm1.Edit2Change(Sender: TObject);

begin Button4.Enabled:=false; // при вводе слова блокируются

Edit1.Enabled:=false; // кнопка «Назвать слово» и поле для ввода буквы

end;

procedure TForm1.FormCreate(Sender: TObject);

begin x:=0; y:=0; w:=0; a:=0;

With Series1 do

begin // прорисовка барабана

add(10,'100 очков',clWhite); add(10,'750 очков',clRed);

add(10,'1000 очков',clGreen); add(10,'250 очков',clYellow);

add(10,'*2',clBlue); add(10,'ПЕРЕХОД ХОДА',clSilver);

add(10,'500 очков',clFuchsia); add(10,'*4',clLime);

end;

end;

Процедуры формы Form2 (модуль Unit2)

var Form2: Tform2; s,t:string; f:integer;

procedure Tform2.Button1Click(Sender: TObject); //кнопка “Подтвердите”

begin s:=DateToStr(Date); // преобразование текущей даты в строку

t:=Edit1.Text; f:=AnsiCompareText(s,t); //сравнение даты с введенным паролем

If f=0 then // пароль введен верно и форма Загадать становится видимой

begin Form3.Show; Form2.Close;end

else //ошибка в пароле, вывод сообщения

begin Application.MessageBox('Введен неправильный пароль', 'Внимание', mb_Ok+mb_IconError);

Edit1.SetFocus;//передача фокуса полю для ввода пароля

end;

end;

Процедуры формы Form3 (модуль Unit3)

var Form3: Tform3; f:string; i,c:integer;

procedure Tform3.Button1Click(Sender: TObject); //кнопка “Сохранить”

begin

Form1.Label1.Caption:=Memo1.Text; //выводит на форму Поле Чудес вопрос

f:=Edit1.Text; c:=Length(f);

for i:=1 to c do begin

case i of //в зависимости от длины слова выводится нужное количество

1: Form1.Statictext1.Visible:=true; //компонентов StaticText

2: Form1.Statictext2.Visible:=true; 3: Form1.Statictext3.Visible:=true;

4: Form1.Statictext4.Visible:=true; 5: Form1.Statictext5.Visible:=true;

6: Form1.Statictext6.Visible:=true; 7: Form1.Statictext7.Visible:=true;

8: Form1.Statictext8.Visible:=true; 9: Form1.Statictext9.Visible:=true;

10: Form1.Statictext10.Visible:=true;

end;

end;

Form1.Show; Form3.Close;

end;

procedure Tform3.FormActivate(Sender: TObject);

begin Memo1.SetFocus; //передача фокуса полю Memo1

end;

Текст программы для C++ Builder

Процедуры формы Form1 (модуля Unit1)

int z,c,i,k,y,x,t,a,g,w,u,l,x1,y1; String f,p,b,s,e; // объявление переменных

void __fastcall TForm1::FormCreate(TObject *Sender) // создание формы

{Series1->Add(10,"ПЕРЕХОД ХОДА",clSilver); // прорисовка барабана

Series1->Add(10,"*2",clBlue); // (диаграммы)

Series1->Add(10,"*4",clLime); Series1->Add(10,"500 очков",clFuchsia);

Series1->Add(10,"750 очков",clRed); Series1->Add(10,"100 очков",clWhite);

Series1->Add(10,"250 очков",clYellow); Series1->Add(10,"1000 очков",clGreen);

}