Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

8.1.6. Игра «Морской бой» (Delphi)

В форме размещена таблица размером 77; ей соответствует массив MK(7,7), в котором случайным образом помечены элементы со значением 1. Эти элементы задают местоположение кораблей в таблице, которые иг­рок должен потопить, щелкая мышкой по соответствующим ячейкам. Иг­рок должен задать число всех кораблей перед началом игры в поле SpinEdit1 («Число кораблей»).

Разместим компоненты: StringGrid1(п. 2.3.2.4) (со свойствами: Enab­led=Fal­se,ColCount=7,RowCount=7, FixedRows=0, FixedCols=0), поляEdit1(число потопленных кораблей), Edit2(число выстрелов, Text=0,ReadOnly=True), счетчикSpinEdit1(п. 2.3.6.4) (число кораблей,MinValue=1,MaxValue=49) и две командные кнопки.

Рис. 8.1.6.1. Вид формы игры «Морской бой»

Приведем тексты процедур обработки событий.

Var // раздел переменных модуля Unit1

mk:Array[0..6,0..6]ofbyte; // массив с признаками расположения кораблей

procedure TForm1.Button1Click(Sender: TObject); // кнопка «Начало»

vari,j,k:integer; // обьявление переменных циклов

begin edit1.text:='0'; edit2.text:='0'; // обнуление значений полей edit1, edit2

k:=1;randomize; // включение счетчика случайных чисел

fori:=0to6do// очистка массива (цикл по строкам)

for j:=0 to 6 do // цикл по колонкам

begin mk[i,j]:=0;StringGrid1.cells[i,j]:=''; end; // очистка текущей ячейки

whilek<=SpinEdit1.Valuedo// цикл формирования положения кораблей

begini:=random(7);j:=random(7); // формирование координат корабля

ifmk[i,j]=0thenbeginmk[i,j]:=1;k:=k+1;end; // пометка ячейки с кораблем

end; // конец цикла

StringGrid1.enabled:=true; // разрешение на использование таблицы

end;

procedure TForm1.StringGrid1Click(Sender:TObject);// щелчок по таблице

begin edit2.text:=inttostr(strtoint(edit2.text)+1); // число выстрелов +1

if length(StringGrid1.cells[stringgrid1.Col,stringgrid1.row])=0 then

if mk[stringgrid1.col,stringgrid1.row]=1 then // попадание

begin StringGrid1.cells[stringgrid1.Col,stringgrid1.row]:='Потоплен';

edit1.text:=inttostr(strtoint(edit1.text)+1);// число потопленных кораблей+1

if SpinEdit1.Value=strtoint(edit1.text) then // все корабли потоплены

begin beep; Application.MessageBox('Победа!','Морской бой',MB_OK);

StringGrid1.enabled:=false; // блокировка таблицы

end;

end

else begin StringGrid1.cells[stringgrid1.col,stringgrid1.row]:='X';end;// промах

end;

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

beginClose;end; // завершение работы программы

8.1.7. Вывод диаграммы (Delphi)

Сформируем круговую диаграмму проданных товаров по типам в стоимостном выражении (рис. 8.1.7.1).

Рис. 8.1.7.1. Вид формы с диаграммой

Разместим пять полей (Edit1-Edit5) для ввода объема продаж товаров по груп­пам (не все поля можно заполнять и поля с ошибками игнорируют­ся), три кнопки и компонентChart1с указанием типа диаграммы и рядаSe­ries1(п. 2.3.7.7). Приведем тексты процедур.

Var // раздел переменных модуля Unit1

a,b,c,d,e:real;n:Integer; // переменные

procedure TForm1.Button1Click(Sender:TObject); // вывод диаграммы

begin With Series1 do // закрепление объекта Series по умолчанию

begin clear; // очистка поля диаграммы

val(Edit1.Text,a,n); // перевод значения текстового поляEdit1.Textв «A»

ifn=0thenadd(a, 'Продукты',clRed);// вывод сектора «A» красным цветом

val(Edit2.Text,b,n); if n=0 then add (b,'Одежда', clBlack); // вывод сектора B

val(Edit3.Text,c,n); if n=0 then add (c, 'Мебель', clGreen); // вывод сектора C

val(Edit4.Text,d,n); if n=0 then add (d, 'Техника',clYellow);// вывод сектора D

val(Edit5.Text,e,n); if n=0 then add (e, 'Прочие', clWhite); // вывод сектора E

end; end;

procedure TForm1.Button2Click(Sender: TObject); // кнопка «Очистить»

begin Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:='';

end;

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

begin Close; end;

Для формы в качестве обработчика события OnActivate укажем имя процедуры Button2Click ‑ обработки события OnClick кнопки Очистить.