Подписаться на RSS рассылку
Главная » Учебник по Delphi для начинающих » Урок 8 - Игра "Угадайка"

Урок 8 - Игра "Угадайка"

Автор: Борисов Сергей

В данном уроке будем писать игру "Угадайка". Это очень распространенное задание для начинающих. Немного разъясню, правила. Компьютер загадывает число случайным образом от 0 до 100. Пользователь вводит число, пытаясь его угадать. Программа соответственно отвечает больше число, которое загадано, или меньше. Например если компьютер загадал число 45, а пользователь ввел число 50, то программа должна ответить: "Меньше".

Итак. Приступим. Создайте новый проект. Выложите, для начала, на форму компоненты: TButton, TEdit. В TEdit пользователь будет вводить своё число, а ввод будет подтверждать нажатием на кнопку.

Дальше необходимо реализовать загадывание числа. Объявим переменную x типа Byte в глобальном блоке Var (в ней будет храниться загаданное число):

var x: Byte;

У новичков может возникнуть вопрос: куда же это писать? Где этот блок Var? Если вы создали пустое приложение, то в коде программы встречается только одно слово Var. Вот туда и добвить. Будет выглядеть это так:

var
  Form1: TForm1;
  x: Byte;

Хорошим тоном прогарммирования считается написание комментариев к коду, называемых ремарками. В маленьких программках, подобных этой, это не так принципиально, но в больших проектах без них просто не обойтись. Ремарки пишутся просто - текст самого комментария заключается между фигурными скобками. Можно и подругому - двойным символом дроби ("//"). Но в отличии от предыдущего случая кремаркой будет только одна строка. Также можно и так: "(*" - для открытия ремарки, "*)" - для закрытия ремарки. Такой тип ремарок используется в особом случае. Он "перекрывает" все виды ремарок. Т.е. если написанна ремарка фигурными скобками, а перед ней и после нее необходимо все закоментировать то уже помещается это в такой тип ремарок. Если же пользоваться фигурными скобками то самая верхняя ремарка дойдет до закрытия следующей ремарки. Ну тут просто нужно попробовать и разобраться. Знания эти не лишние - пригодятся. Давайте добавим ремарку:

var
  Form1: TForm1;
  x: Byte;        // загаданное число

Переменную то объявили теперь нужно в неё поместить значение. Делать это будем все по созданию формы. Кликаем по форме два раза и пишем:

procedure TForm1.FormCreate(Sender: TObject);
begin
  {Инициализация генератора случайных чисел}
  Randomize;
  x := Random(101); // присваиваем случайное число
end;

Итак, число загадали. Обратите внимание, что написано не 100 а 101. При таком значении максимальным случайным числом может быть 100, а минимальным - 0. Теперь нужно его сравнивать с введенными пользователем числами. Как я уже говорил подтверждение ввода будет осуществляться нажатием на кнопку. Там же и будет происходить сравнение. Но нужно будет выводить ответ программы (больше или меньше). Для этого выложим на форму TLabel. Кликнем по кнопке два раза, тем самым создадим процедуру которая будет выполняться по клику на кнопке. Отредактируйте так:

procedure TForm1.Button1Click(Sender: TObject);
var Ent: byte;
begin
  Ent := StrToInt(Edit1.Text);
  if Ent > x then Label1.Caption := 'Меньше';
  if Ent < x then Label1.Caption := 'Больше';
  if Ent = x then ShowMessage('Вы угадали !');
end;

Я ввел переменную Ent и в нее присваивал введенное число. Потом его сравнивал и выводил результат сравнения.

Впринципе играть уже можно, но не интересно! Нужно сделать колличество попыток. Добавим также глобальную переменную k типа Byte. Но немного по особому:

k: byte = 10;

Такая запись означает что в переменной автоматически будет храниться число 10. Его уже не нужно будет присваивать. Добавим на форму еще один TLabel. Теперь немного изменим код происходящий по нажатию на кнопку. Снова щелкнем по кнопке два раза и увидем знакомый код. Конечно же можно его найти вручную. Отредактируем так:

procedure TForm1.Button1Click(Sender: TObject);
var Ent: byte;
begin
  Ent := StrToInt(Edit1.Text);
  if Ent > x then Label1.Caption := 'Меньше';
  if Ent < x then Label1.Caption := 'Больше';
  if Ent = x then ShowMessage('Вы угадали !');
  Dec(k);
  Label2.Caption := IntToStr(k);
  if k = 0 then ShowMessage('Вы проиграли !');
end;

Dec(k) - уменьшить значение находящееся в переменной k на 1. Inc - увеличить на 1. Можно написать тоже самое но по другому: k:=k-1; Например если нужно уменьшить переменную k на 3 то пишем: Dec(k, 3). Точно также и с Inc. Ну а в Label2 выводится колличество оставшихся попыток.

Ну вот вобщем-то и все, осталось только навести порядок и сделать аккуратный интерфейс программы. Чтобы пользователю было удобно. Как раз сейчас и будем это делать.

Свойство Text у Edit1 измените на пустую строку, т. е. вообще сотрите все что там написано.

Текст на кнопке обязательно нужно переименовать на что-нибудь понятное. Например, на "OK".

Свойство Caption у Label1 поменяйте на "Загадано число от 0 до 100". А у Label2 поменяйте на "10".

Измените свойство Caption у формы (строка заголовка у окна). Установите нужные размеры формы, чтобы небыло так, что на форме 5 компонентов, расположенных в углу, а остальное пространство формы пустое. Установите свойство Position у формы в poScreenCenter, чтобы при запуске программы она появилась в центре экрана. Также нужно сделать так, чтобы размеры формы нельзя было изменять пользователю. Свойство BorderStyle можно установить например в bsToolWindow.

Если у вас установлена операционная система Windows XP и выше, то вы, наверное, заметили, что компоненты немного другого стиля. Исправить это можно добавив модуль XPMan в раздел Uses.

Также можно украсить программу написав название программы и поместив его в верхнюю часть формы. Размер шрифта у Label2 можно сделать покрупнее. Вобщем тут уже дело вашей фантазии. Программу можно еще немного развить сделав красивые окна сообщающие о выигрыше или проигрыше. Сделать начало новой игры.


Скачать исходник [14.9 Кб]

Урок 9 - Изучаем компонент TMediaPlayer

Просмотров: 17911

Обсудить на форуме

Copyright © 2008-2016 Программирование на Delphi для начинающих и не только

Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам

Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации

Хостинг от uCoz

Автор проекта: Борисов Сергей

e-mail: save-x@yandex.ru

Связь с администрацией сайта