/>/>/>/>/>/>/>/>/>Введение
Delphi – это среда разработкипрограмм, ориентированных на работу в Windows. В основе идеологии Delphi лежат методологияобъектно-ориентированного программирования и технология визуальногопроектирования.
Программа,создаваемая в среде Delphi в процессе проектирования приложения, основана на модульномпринципе. Головная программа состоит из объявления списка используемых модулейи нескольких операторов, создающих объекты для необходимых форм и запускающихприложение на выполнение.
Все объектыкомпонентов размещаются в объектах – формах. Для каждой формы, проектируемой вприложении, Delphi автоматически создает отдельный модуль, в который пользовательможет ввести собственный код, создавая обработчики различных событий. Именно вмодулях и осуществляется программирование задачи.
/>/>/>/>/>1. Разработкаэскизного и технического проектов программы
/>/>/>/>
1.1 Задание
Тема:Разработка приложения для Windows, моделирующего игру «Нечетный» и «Четный».
Условиезадачи:
Два игрока, «Нечетный»и «Четный», по очереди ставят единицы и нули в незанятые позиции поля N x N. Каждый из игроков можетставить 1 или 0 в произвольную свободную позицию, тем самым, занимая ее.
Играпродолжается до заполнения всех позиций. После этого суммируются числа вдолькаждой строки и каждого столбца и главных диагоналей.
Число ODD нечетных суммсравнивается с числом четных сумм EVEN.
Если ODD>Even, то выигрывает Нечетный, если EVEN>ODD выигрывает Четный. Если ODD=EVEN, результат считаетсяничейным.
/>1.2 Назначениеи область применения
Данный проект является игрой, и он применяется вразвлекательных целях. Область применения досуг пользователя. Данная программаработает под управлением Windows 9x, Windows XP.
/>1.3 Технические характеристики
Раздел «Технические характеристики» содержитследующие подразделы:
1. Постановка задачи.
2. Описание алгоритма.
3. Организация входных ивыходных данных.
4. Выбор состава техническихи программных средств.
Для решенияпоставленной задачи необходимо использовать структуру данных типа массив, таккак по условии говорится о поле NxN. Для визуализации решения задачи использованасреда программирования Delphi 6. Использованы конструкции структурного программирования, как If Then, For To. Программа управляетсячерез меню MainMenu.
1. Готовитсяполе NxN (6x6);
2. Еслипозиция не занята, 1- игрок ставит 0 или 1
3. Еслипозиция не занята, 2- игрок ставит 0 или 1
4. Проверяетсяне все позиции заняты, если «да» пункт 2, «нет» – пункт 3
5. Суммируютсячисла 1- игрока (Nechet) и 2 (Chet) – игрока по отдельности по строкам, по столбцам и главныхдиагоналей.
6. Еслисумма Nechet>Chet, выигрывает 1-игрок
7. Еслисумма Nechet
8. Еслисумма Nechet=Chet, нечья
9. Конец игры
Вмоей разработке алгоритм решения задачи упрощен тем, что вместе с игральнымполем ведется параллельно еще одно поле, где отмечаются позиции 1 игрока (Nechet) и 2 игрока (Chet) для суммирования потомчисла соответствующих позициях 1 – поля. Игроки ставят свои числа с помощьюдатчика случайных чисел. Ниже в блок схеме показано алгоритм формирования поля1и вспомогательного поля2. После чего суммируются числа как сума строк столбцови диагоналей как обычной квадратной матрицы, с учетом символьных отметокпозиции игроков. Позиция игрока 1 отмечена символом «*», а позиция игрока 2 – «@».
Входныеданные 0 или 1 вырабатываются с помощью функции случайных чисел random(); 1- игрок ставит числонажатием мышкой в выбранную позицию, второй игрок(компьютер) ставит числавыбирая свободную позицию тоже с помощью случайных чисел. В качестве поляиспользуется компонент TstringGrid.
Выходныеданные: сумма чисел игроков и сообщение о выигравшем игроке отображаются в полеTEdit.
Эта программаразработана в Delphi 6, поскольку данная среда разработки предоставляет всенеобходимые инструменты для решения поставленной задачи. Delphi 6, как и всякаясовременная среда разработки приложений, основана на объектно-ориентированномпрограммировании (ООП). Эта технология программирования является той основой,которая и позволяет реализовать все функциональные возможности Delphi 6. При созданииприложений на основе готовых компонентов с использованием свойств, методов изаранее определенных обработчиков событий можно обходиться программным кодомнебольшого объема. Для разработчика это означает, что при разработкепользовательского интерфейса своих приложений он может получить значительнуюэкономию времени.
Длянормальной работы данного приложения требуется наличие следующего аппаратного ипрограммного обеспечения:
Минимальныесистемные требования:
Процессор – Pentium 400 MHz.
Оперативнаяпамять – 512 Mb.
Жесткий диск– 10 Gb.
Операционнаясистема – Windows XP Professional
Программноеобеспечение – Borland Database Engine.
/>/>/>/>/>2. Разработка рабочего проекта
2.1 Разработкапрограммы
Программа, моделирующая игру«Нечет» и «Чет» разработана на языке Object Pascal в визуальной среде Delphi 6. Проект содержит одноокно-Form1.
/>
Компонент 1 Form1
Свойства:
Caption=’Игра Чет Нечет’
Menu=MainMenu1
Color=clGradientActiveCaption
Событие=MainMenu1
End
Компонент 2-MainMenu1.
Свойства:
objectMainMenu1: TMainMenu
Left= 14
Top= 184
objectN1: TMenuItem
Caption= ‘Игра’
objectN2: TMenuItem
Caption= ‘Новая игра’
OnClick= N2Click
end
objectN3: TMenuItem
Caption= ‘Выход’
OnClick= N3Click
end
end
objectN4: TMenuItem
Caption= ‘Настройка’
objectN6: TMenuItem
Caption= ‘Второйигрок’
objectN7: TMenuItem
Caption= ‘Компьютер’
end
end
end
objectN5: TMenuItem
Caption= ‘Справка’
objectN8: TMenuItem
Caption= ‘Правилаигры’
OnClick= N8Click
end
objectN9: TMenuItem
Caption= 'опрограмме '
OnClick= N9Click
end
end
end
Компонент3 –TstringGrid.
Свойства:
objectStringGrid2: TStringGrid
Left= 86
Top =48
Width= 249
Height= 153
ColCount= 6
DefaultColWidth= 40
FixedCols= 0
RowCount= 6
FixedRows= 0
TabOrder= 3
Visible= False
end
Компонент 4 – TEdit
Свойства;
objectEdit1: TEdit
Left= 0
Top= 208
Width= 377
Height= 28
Font.Charset = DEFAULT_CHARSET
Font.Color = clOlive
Font.Height = -16
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont= False
TabOrder= 2
end
Компонент5-Tbutton.
Свойства:
objectButton1: TButton
Left= 88
Top =233
Width= 250
Height= 33
Caption= Показать
Font.Charset = DEFAULT_CHARSET
Font.Color = clNavy
Font.Height = -16
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont= False
TabOrder= 1
OnClick= Button1Click
End
2.2 Написание программы
Программанаписана в среде программирования Delphi6. Основной компонент – игральное поле StringGrid1. В моем проекте прграммы1- игрок – пользователь, 2- игрок – компьютер. Для компьютера в данном проекте непредусмотрена выигрышная стратегия. Компьютер ставит числа в случайно выбраннуюсвободную позицию с помощью функции случайных чисел.
Выигрышнуюстратегию можно построить предусматривая вариант максимального количестваставки числа 1. Для этого функцию случайных чисел для компьютера напишем как random(1)+1;
2.3 Спецификация программы
Загрузочныйфайл программы – Project1.exe.
Табл.1. Спецификация программыНаименование Обозначения Примечание
Project1.dpr Файл проекта Связывает все файлы, из которых состоит приложение Project1.cfg Файл конфигурации Project1.dof Файл параметров проекта Содержит текущие установки проекта: настройки компилятора и компоновщика, имена служебных каталогов, условные директивы Project1.dfm Файл формы №1 Содержит список свойств всех компонентов, включенных в форму №1 Unit1.pas Файл программного модуля для формы №1 Определят функциональность формы №1 Unit1.dcu Объектный файл для Unit1.pas Откомпилированная версия Unit1.pas
2.4 Текст программы
//Программа
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics,
Controls,Forms, Dialogs, Grids, StdCtrls, Menus;
type
TForm1= class(TForm)
StringGrid1:TStringGrid;
Button1:TButton;
MainMenu1:TMainMenu;
N1:TMenuItem;
N2:TMenuItem;
N3:TMenuItem;
N4:TMenuItem;
N6:TMenuItem;
N7:TMenuItem;
N5:TMenuItem;
N8:TMenuItem;
N9:TMenuItem;
Edit1:TEdit;
StringGrid2:TStringGrid;
procedureStringGrid1MouseDown (Sender: TObject; Button: TMouseButton;
Shift:TShiftState; X, Y: Integer);
procedureN2Click (Sender: TObject);
procedureN3Click (Sender: TObject);
procedureN8Click (Sender: TObject);
procedureN9Click (Sender: TObject);
procedureButton1Click (Sender: TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var{Глобальные переменные}
Form1:TForm1;
q1,w1, q2, w2:array [0..6] of integer;
i,j, chet, nechet:integer;
implementation
{$R *.dfm}
//главная процедура, где вставляеются единицы и нули в позиции игроков
procedureTForm1. StringGrid1MouseDown (Sender: TObject;
Button:TMouseButton; Shift: TShiftState; X, Y: Integer);
label1,2;
varnk, z1, z2, a, b, k, l:integer;
begin
//StringGrid1 Поле игроков размещена
// StringGrid2 используется дляфиксирования позиции игроков
randomize; {генератор случайныхчисел}
nk:=stringgrid1. RowCount; {фиксируется количествострок (столбцов тоже).}
k:=stringgrid1. DefaultColWidth; {фиксируется ширинастолбцов таблицы}
l:=stringgrid1. DefaultRowHeight; {фиксируется высотастрок}
stringgrid1. Font. Color:=clblue;
z1:=trunc (x/k); z2:=trunc (y/l); {фикситруютсякоординаты указателя мышки}
// Еслипозиция занята, то переход к на новый ход
if(stringgrid1. Cells [z1, z2]='1') or
(stringgrid1.Cells [z1, z2]='0') then goto 1
// иначе с помощьюфункций случайных чисел ставится 0 или 1
elsebegin stringgrid2. Cells [z1, z2]:='*';
stringgrid1.Cells [z1, z2]:=inttostr (random(2));
end;
//моделирование хода компьютера
//компьютер позицию занимает случайными числами в интервале от 0 до nk
// nk-количество строк
2: a:=random(nk);
b:=random(nk);
// Еслипозиция свободна ставит 0 или 1
//Иначе переход на другую позицию
if (stringgrid1. Cells [a, b]'1')and
(stringgrid1.Cells [a, b]'0') then begin
stringgrid2.Cells [a, b]:='@';
stringgrid1.Cells [a, b]:=inttostr (random(2)) end
else goto 2;
1: end;
//процедура Новая игра
// Очищаютсявсе позиции поля
procedureTForm1.N2Click (Sender: TObject);
begin
fori:=0 to stringgrid1. RowCount-1 do
forj:=0 to stringgrid1. RowCount-1 do
begin
stringgrid1.Cells [i, j]:='';
end;
edit1.text:='';{Результат обнуляется}
end;
// Процедура завершения,отвечает на кнопку из меню
procedureTForm1.N3Click (Sender: TObject);
begin
showmessage('Досвидания');
form1.Close;
end;
//Процедура выводит сообщение о правиле игры
procedureTForm1.N8Click (Sender: TObject);
begin
showmessage ('Два игрока, «нечетный» и«Четный», по очереди ставят'+#13+
' единицы инули в незанятые позиции поля N x N'+#13+
'Каждый изигроков может ставить 1 или 0в произольную'+#13+
' свободнуюпозицию, тем самым занимаяее.'+#13+
' Играпродолжается до заполнения всех позиций.'+#13+
'После этогосуммируются числа вдоль каждой строки'+#13+
' и каждогостолбца и главных диагоналей. '+
#13+'Число ODD нечетных суммсравнивается с числом четных сумм EVEN.'+#13+
'Если ODD>Even, то выигрывает, если EVEN>ODD выигрывает четный.'+#13+
'Если ODD=EVEN, результата считается ничейным');
end;
// Процедуравыводит сообщение о программе
procedureTForm1.N9Click (Sender: TObject);
begin
showmessage ('Программуразработал студент группы \УЗИН-709–01 КРУ г. Астана'+
#13+'ЗахарченкоЕгор'+
#13+'Программанаписана для игры пользователя с компьютером'+
#13+'размерностьполя – 6х6.'+#13+
'Выигрышнуюстратегию для компьютера можно '+#13+
'построить спомощью датчика случайных чисел random(1)+1'+#13+
'тем самымвставляя в позицию только единицы'+#13+
'илиприсваивая к позиции компьютера только единицы'+#13+
'Но в даннойпрограмме пользователь и компьютер играет'+
#13+' наравных правилах');
end;
// StringGrid2 используется дляфиксирования позиции игроков
procedureTForm1. Button1Click (Sender: TObject);
label1;
begin
nechet:=0;
chet:=0;
fori:=0 to 5 do
forj:=0 to 5 do
if(stringgrid2. Cells [i, j]'*') and (stringgrid2. Cells [i, j]'@')then
begin showmessage ('Не все позиции заняты, '+#13+
'продолжайтезаполнять поля'); goto 1;
end;
// Вэтом цикле определяются позиции игроков
// соответственныечисла по строкам и по столбцам суммируются
fori:=0 to 5 do
forj:=0 to 5 do
ifstringGrid1. Cells [i, j]='1' then begin
ifstringgrid2. Cells [i, j]='*' then nechet:=nechet+1
elsechet:=chet+1 end;
forj:=0 to 5 do
fori:=0 to 5 do
ifstringGrid1. Cells [i, j]='1' then begin
ifstringgrid2. Cells [i, j]='*' then nechet:=nechet+1
else chet:=chet+1 end;
//Числа суммируются по главным диагоналям
forj:=0 to 5 do
ifstringgrid1. Cells [j, j]='1' then begin
ifstringgrid2. Cells [j, j]='*' then nechet:=nechet+1
elsechet:=chet+1 end;
forj:=0 to 5 do
ifstringgrid1. Cells [j, j]='1' then begin
ifstringgrid2. Cells [j, j]='*' then nechet:=nechet+1
else chet:=chet+1 end;
//Определяется победитель
ifchet=nechet Then Edit1. Text:='Ничья, число'+inttostr(chet)
elsebegin
ifnechet>chet then edit1.text:='Выиграл Нечет(пользователь), число'+inttostr(nechet)
else
edit1.text:='ВыигралЧет(компьютер), число '+inttostr(chet);
end;
1: end;
end.
2.5 Описание программы
Требуетсякомпьютер, который поддерживает операционную систему Windows9x. Техническиехарактеристики такого компьютера должны составлять: Pentium 100 и выше; объемоперативной памяти не менее 16 Мб; жесткий диск не менее 500 МБ. Дополнительныеустройства для программы не требуются.
Программауправляется через главное меню. Через меню можно начать новую игру, закрыть игру, прочитатьсправки о программе, о разработчике. Числа игрока ставятся в позиции,соответственно указателю мышки. Компьютер выбирает из свободных позиции своюпозицию и ставит число 0 или 1. Результат игры показывается при нажатии накнопку «Показать». Если заполнены не все позиции, выдается соответствующеесообщение. Если заполнены все позиции, определяется выигравший и его число.
Программа загружаетсянажатием на загрузочный файл Project1.exe.
Входныеданные: 0 или 1 в поле StringGrid1.
Выходныеданные: сумма чисел игроков и сообщение о выигравшем игроке отображаются в полеTEdit.
/>
Рис. 1. Тестирование -1
/>
Рис. 1. Тестирование -2
/>
Рис. 1. Тестирование -3
/>
Рис. 1. Тестирование -4
/>
Рис. 1. Тестирование -5
/>
Рис. 1. Тестирование -6
/>
Рис. 1. Тестирование -7
В таблице (таб.2.) представлены результаты тестирования:
Таблица 1. РезультатытестированияВыиграл Число Нечет 24 Чет 24 Чет 26 Нечет 30 Нечет 28 Нечет 26 Ничья 24
2.5 Внедрение
Данноеприложение разработанное в Delphi, способно работать на персональных компьютерах сминимальными требованиями:
Процессор – Pentium 400 MHz.,
Оперативнаяпамять – 512 Mb,
Жесткий диск– 10 Gb,
Операционнаясистема – Windows XP Professional
Программноеобеспечение – Borland Database Engine.
Запуститьприложение можно также как и любое другое с дискеты или с другого носителя.
Дляуправления программой используются кнопки меню. Выход из программыосуществляется по команде Файл-> Выход в главном меню или щелчку левой кнопкоймыши по крестику в правом верхнем углу экрана.
Сообщенияоператору рисунки 8–10:
Сообщениекогда не заполнены все клетки поля Рисунок 8.
/>
Рис. 8.Сообщение игроку
Сообщениеоб условий игры открывается по команде Справка->Правила игры-Рисунок 9.
/>
Рис. 9.Условие игры
Сообщениео разработчике открывается по команде Справка->о программе – Рисунок 10.
/>
Рис. 10.Сообщение о разработчике
/>/>/>/>/>/>Список использованных источников
1. Культин Н. Программированиена Object Pascal. Киев, 2005.
2. Чиртик, А.А. Delphi.Трюки и эффекты [Текст] / А.А. Чиртик, В.В. Борисок, Ю.И. Корвель. – СПб.:Питер, 2007.
3. Delphi: быстрый старт. – СПб.:БХВ – Петербург, 2002. – 288 с.: ил.
4. Turbo Pascal / С.А. Немнюгин. – СПб: Издательство «Питер»,2000. – 496 с.: ил.
5. Власов А.Я. Справочник по программированию на ObjectPascal. Киев, 2001 г.
6. Александровский А.Д. Delphi 5.0. Разработка корпоративныхприложений. – М.: ДМК, 2004. – 512 с.: ил. (Серия «Для программистов»).
7. Бобровский С. DEIPhI 7: Учебный курс СПб: Издательство «Питер»,2005.
8. Власов А.Я. Справочник по программированию на ObjectPascal. Киев, 2003 г.
9. Изучаем Delphi. – СПб.: Питер, 2000. – 352 с.: ил.