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

8.1.6. Игра “Морской бой” (Delphi)

В форме размещена таблица размером 7 7; ей соответствует массив 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] of byte; // массив с признаками расположения кораблей

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

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

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

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

for i:=0 to 6 do // очистка массива (цикл по строкам)

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

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

while k<=SpinEdit1.Value do // цикл формирования положения кораблей

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

if mk[i,j]=0 then begin mk[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); // кнопкаВыход

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

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

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

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

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