Лабораторная работа по Delphi

advertisement
РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В.
Лабораторная работа №8: Спички
1. Создание и сохранения проекта. Когда вы запустите Delphi, новый проект уже
будет создан, и его будет достаточно только сохранить на жестком диске. Для этого
выполните команду меню File-> Save Project As… После чего в появившемся
диалоговом окне выберете диск D: и папку вашей группы. Зайдя в нее создайте
папку Spichki, и сохраните в нее файлы вашего проекта, нажимая кнопочку
“Сохранить”. Если вдруг когда вы запустите Delphi новый проект не создаться
автоматически, то выполните команду меню File->New->Application, после чего
выполните сохранение следуя инструкции описанной выше.
2. Создание формы. Создайте форму такую как показано на рисунке 1. При этом
проследите, чтобы имена элементов на рисунке, соответствовали именам
элементов вашей формы.
Замените значения свойства Caption у всех представленных объектов, на
соответствующие надписи. У Edit1, Edit2, Label4, а также для объектов класса
CheckBox сотрите это значение. Для Button1 и объектов класса CheckBox
установите свойство Enabled равным False. Это нужно сделать для того, чтобы
пользователь не смог начать игру, до тех пор, пока не введет имена. (Смотри
нижеследующий рисунок)
РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В.
Немного теории
Свойство Caption (Надпись, подпись) существует практически у всех объектов видимых на
экране и несет в себе подпись для данного объекта. Например для кнопок это может быть
“Да”, “Нет”, “Отмена”
Свойство Enabled (возможность или право что-то сделать) служит для изменения состояния
объекта “активный” (=True(истина)) т.е с данным объектом можно работать, и “неактивный”
(=False(ложь)) т.е. с данным объектом работать нельзя, он игнорирует все ваши действия по
отношению к нему.
3. Написание рабочего модуля. Для переключений между
формой и модулем можно использовать пункт меню Window,
а также щелкая левой клавишей мыши то на одном, то на
другом окне.
Перейдите в окно модуля найдите в нем раздел Var, и
добавьте две переменные:
{Переменная в которой храниться номер текущего игрока}
CurrentPlayer: byte=1;
{Переменная в которой храниться колличество взятых им
спичек}
CurrentSpich: byte=0;
Затем поднимитесь выше к началу раздела Interface и перед
блоком Type добавьте одну константу:
const
{Максимальное колличество спичек которое можно взять за
один ход}
MaxSpich=3;
Теперь необходимо добавить функцию, которая будет
проверять правильность взятия спичек, а также следить за
тем, когда кончиться игра. Для этого ее сначала необходимо объявить в разделе
Type перед подразделом Private:
{Объявление новой процедуры}
function Proverka: boolean;
РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В.
Далее необходимо написать саму функцию. Делается это в разделе Implementation
после директивы компилятора {$R *.dfm}
function TForm1.Proverka: boolean;
var
{Переменная для хранения результата проверки}
res: boolean;
begin
res:=true;
{Если количество взятых спичек одним игроком больше максимального,
то результат = False(Ложь)}
if CurrentSpich>MaxSpich then
res:=false
else
{В противном случае, если все кнопочки выбраны (Свойство Checked показывает
выбрана ли кнопка =True(Истина) или же нет =False(Ложь)) то это означает
что игра закончена}if CheckBox1.Checked and CheckBox2.Checked and
CheckBox3.Checked and CheckBox4.Checked and
CheckBox5.Checked and CheckBox6.Checked and
CheckBox7.Checked and CheckBox8.Checked and
CheckBox9.Checked and CheckBox10.Checked then
begin
{Проверяем если текущий игрок 1 то значит он взял последнюю спичку
Следовательно победил игрок 2}
if CurrentPlayer=1 then
{Показываем соответствующее сообщение}
ShowMessage('Победил(а) '+Edit2.text)
{В противном случае побеил игрок 2}
РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В.
else
ShowMessage('Победил(а) '+Edit1.text);
{Перепишите эти строки просто, а в конце занятия объясните зачем
они нужны}
Button1.enabled:=false;
Edit1.Enabled:=True;
Edit2.Enabled:=True;
Button2.Enabled:=True;
Edit1.Text:='';
Edit2.Text:='';
CheckBox1.Checked:=False;
CheckBox2.Checked:=False;
CheckBox3.Checked:=False;
CheckBox4.Checked:=False;
CheckBox5.Checked:=False;
CheckBox6.Checked:=False;
CheckBox7.Checked:=False;
CheckBox8.Checked:=False;
CheckBox9.Checked:=False;
CheckBox10.Checked:=False;
Label4.Caption:='';
end;
{Возвращаем результат равный res}
proverka:=res;
end;
РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В.
Теперь необходимо создать обработчики для нажатия кнопочек. Для того чтобы
создать такой обработчик необходимо на кнопочке сделать двойной щелчок
мышью. Создадим обработчик для кнопки “Начать игру”(Button2)
procedure TForm1.Button2Click(Sender: TObject);
begin
{Если имена введены, то тогда разблокируем все
элеменнты нужные для игры, а ненужные блокируем}
if (Edit1.Text<>'') and (Edit2.Text<>'') then
begin
{Разблокировка 10 кнопочек эмулирующих спички}
CheckBox1.Enabled:=True;
CheckBox2.Enabled:=True;
CheckBox3.Enabled:=True;
CheckBox4.Enabled:=True;
CheckBox5.Enabled:=True;
CheckBox6.Enabled:=True;
CheckBox7.Enabled:=True;
CheckBox8.Enabled:=True;
CheckBox9.Enabled:=True;
CheckBox10.Enabled:=True;
{Разблокировка кнопочки передачи хода}
Button1.Enabled:=True;
{Выводим текст что ходит первый игрок}
label4.Caption:=edit1.Text;
{Блокируем поле ввода имен и кнопку начать игру}
Edit1.Enabled:=False;
Edit2.Enabled:=false;
РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В.
Button2.Enabled:=false;
end
{В противном случае если имена игроков не введены
выводим соответствующее сообщение}
else
Showmessage('Введите имена игроков');
end;
Теперь создадим обработчик для кнопки “Сделатьход”(Button1)
procedure TForm1.Button1Click(Sender: TObject);
begin
{Меняем текущего игрока. Если это первый меняем на второго
если второй, то на первого}
CurrentPlayer:=3-CurrentPlayer;
{Обнуляем количество взятых спичек, так как новый игрок еще
ничего не брал}
CurrentSpich:=0;
{Выводим сообщение о том, кто ходит}
if CurrentPlayer=1 then
Label4.Caption:=Edit1.Text
else
Label4.Caption:=Edit2.Text;
end;
И наконец создадим обработчики для кнопочек класса CheckBox точно таким же
способом как и создавали обработчики для обычных кнопок, т.е. двойным щелчком
мыши. Ниже приводится пример для первой кнопочки-выбора. Для остальных
создайте сами. В процедурах будет меняться только номер этих кнопочек
CheckBox1, CheckBox2…..CheckBox10.
procedure TForm1.CheckBox1Click(Sender: TObject);
РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В.
begin
{Увеличиваем количество взятых спичек у текущего
игрока}
inc(CurrentSpich);
{Если проверка прошла успешно, т.е. колличество
взятых спичек не больше максимально возможного, то }
if proverka then
{Блокируем данную кнопку чтобы ее нельзя было
выбрать второй раз}
checkbox1.Enabled:=false
else
{В противном случае не даем игроку выбрать эту кнопку постоянно снимая
флажок}
checkbox1.checked:=false;
end;
После того, как вы все сделаете программа должна работать. Теперь можно
поиграть со своим соседом.
Download