Отправляет email-рассылки с помощью сервиса Sendsay

Уроки по Delphi

  Все выпуски  

Уроки по Delphi


Информационный Канал Subscribe.Ru


Исходники лежат тут: Delphi::WAP::Moto E-365

*Номер 7* (2004-04-19)

Урок 8.

Задание: Сегодня создаем систему подсчета очков. На поражение цели дается 3 попытки.
При поражении с первого раза начисляется 100 очков, со второго - 50, с третьего - 10.
Очки суммируются. При окончании игры очки заносятся в таблицу "Лучшая Десятка". Разбираемся
с сортировкой. Создаем переменную типа "запись"(record). Добавляем в проект вторую форму.
Обмениваемся данными между формами.



Итак, приступим. Добавляем на форму компоненты: Button2, Button3, Label7. Задаем параметры:

Button2: Left = 592; Top = 296; Caption = 'Старт'
Button3: Left = 592; Top = 336; Caption = 'Сохранить'
Label7: Left = 592; Top = 16; Caption = 'Очки: 0'

У уже существующего Label6 изменяем: Left = 5; Caption = 'Попытка №'

Теперь создадим "Тип" (запись) для хранения в нем имени игроков и набранных очков.
Записи определяются между определением библиотек и "Типом формы":

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, Comctrls, Stdctrls, Extctrls, Math;

type
TLs = record // TLs - название записи
Name: string; // Имя игрока
score: Integer; // Набраные очки
end;

type
TForm1 = class(TForm)
Button1: TButton;
TrackBar1: TTrackBar;


В разделе public определяем переменную на основе созданной записи:

public
{ Public declarations }
// Объявление массива, состоящего из записей
Lst: array[0..10] of TLs;
end;

Объявляем глобальные переменные:

Fire, Score: Integer;

В функцию "Button1Click", сразу после "begin" добавляем:

// При каждом нажатии на кнопку, увеличиваем номер выстрела на 1
Fire := Fire + 1;
// Ограничиваем количество выстрелов - всего три
if Fire = 3 then
begin
Button1.Enabled := False;
Button2.Enabled := True;
end;
// Информируем игрока о номере выстрела
Label6.Caption := 'Попытка №' + IntToStr(Fire + 1);
// После 3-го выстрела, очищаем Лейбл6
if fire=4 then Label6.Caption := 'Попытка №';

В этой же функции, после строчки "Label6.Caption := 'Попал!';" добавляем:

// Если попали с первой попытки, добавляем 100 очков
if Fire = 1 then
score := score + 100;
// Если попали со второй попытки, добавляем 50 очков
if Fire = 2 then
score := score + 50;
// Если попали с третьей попытки, добавляем 10 очков
if Fire = 3 then
score := score + 10;
// Выключим кнопку "Огонь", включаем "Старт"
Button1.Enabled := False;
Button2.Enabled := True;
goto endd;
end;

И после "endd:", перед самым последним "end'ом" этой функции добавляем:

Label7.Caption := 'Очки: ' + IntToStr(score);

Переходим к функции FormCreate, теперь она выглядит так:

procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Название формы
Form1.Caption := 'Гаубица';
// Заноси начальные значения имен и количества очков
for i := 1 to 10 do
begin
Lst[i].Name := 'Yura';
Lst[i].score := i * 100;
end;
// Запускаем генератор случайных чисел
randomize;
// Числа х и у задают центр мишени
// Заносим в х случайное число, лежащее в пределах от 200 до 480
x := random(280) + 200;
// Заносим в у случайное число, лежащее в пределах от 0 до 250
y := random(250);
MCol := ClBlack;
// Очищаем Image1. Эту функцию напишем чуть ниже
ImCl;
score := 0;
end;

Кликаем на кнопку "Старт", и пишем там:

procedure TForm1.Button2Click(Sender: TObject);
begin
// Включаем кнопку "Огонь"
Button1.Enabled := True;
// Обнуляем счетчик количества выстрелов
Fire := 0;
Label6.Caption := 'Попытка №1';
// Заносим в х случайное число, лежащее в пределах от 0 до 280
x := random(280) + 200;
// Заносим в у случайное число, лежащее в пределах от 0 до 250
y := random(250);
// Очищаем Image1.
ImCl;
ImPik;
// Выключаем кнопку "Старт"
Button2.Enabled := False;
end;

Давайте создадим еще одну форму. В меню выбираем "Файл-> Создать-> Форма".
Сохраним ее как "u62.pas". Далее напишем обработчик "TForm2.FormActivate",
который будет выводить на форму список очков. Выбираем Форму2, в "Инспекторе
Объектов" идем на закладку "События". Кликаем напротив надписи "onActivate",
появится заготовка, и там пишем обработчик:

procedure TForm2.FormActivate(Sender: TObject);
var i:integer;
begin
for i:=1 to 10 do
begin
Form2.Canvas.TextOut(20,i*15,Form1.Lst[i].Name+'-'+inttostr(Form1.Lst[i].score));
end;
end;

Теперь возвращаемся на Форму1. И пишем новую функцию сортировки, как это сделать,
смотри предыдущий урок - создание "ImPik", в функции пишем:

procedure TForm1.Sorting;
var
i, n, j, m, m1: Integer;
m2: string;
begin
n := 10;
for i := n downto 2 do
begin
m := 1;
for j := 2 to i do
begin
if Lst[j].score <= Lst[m].score then
m := j;
end;
m1 := Lst[m].score;
m2 := Lst[m].Name;
Lst[m].score := Lst[i].score;
Lst[m].Name := Lst[i].Name;
Lst[i].score := m1;
Lst[i].Name := m2;
end;
end;

Вот и все. Единственный недостаток сегодняшней работы, это отсутствие возможности сохранения.
Работу с файлами начнем на следующем уроке. Тексты всех предыдущих уроков и самих исходников
можно скачать с http://mywap-f1.h12.ru
Если у Вас возникли вопросы, идеи, предложения или какие-либо мысли, пишите, не стесняйтесь!

© Юрий М. Крылов, 2004.®(6)

Рассылка comp.soft.prog.delphibegin (c)2003-2004 Крылов Ю.М.
Выпуск 7 от 2004-04-19
Подписчиков - 5
Рассылки Subscribe.Ru
Новости сайта My.WAP.F1

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное