Инструкция по выполнению программы — КиберПедия 

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Инструкция по выполнению программы

2019-12-18 110
Инструкция по выполнению программы 0.00 из 5.00 0 оценок
Заказать работу

При запуске программы отображается главная форма, на которой доступны семь кнопок: «НОВАЯ ИГРА», «ЗАГРУЗИТЬ», «СОХРАНИТЬ», «ОТМЕНИТЬ ХОД», «О ПРОГРАММЕ», «СПРАВКА» и «ВЫХОД» (рисунок 1).

 

 

Рисунок 1 – Главная форма.

 

 

При нажатии на кнопку «НОВАЯ ИГРА» программа автоматически случайным образом определяет, какой игрок будет ходить первым, и предлагает ему «бросить» кубики. При нажатии на кнопку «ЗАГРУЗИТЬ» программа считывает из папки saves корневого каталога программы все сохраненные игры и предоставляет список пользователю на новой форме (рисунок 2). После выбора нужной игры и нажатия на кнопку «ЗАГРУЗИТЬ» программы загружает сохраненные данные и предлагает продолжить игру.

 

 

Рисунок 2- Форма загрузки игры

Чтобы «бросить кубики» игроку необходимо навести указатель мыши на картинку в правом верхнем углу главной формы (рисунок 3) и нажать левую кнопку мыши. Произойдет случайная генерация двух чисел в диапозоне от одного до шести, которые являются предоставленными ходами. После генерации ходов производится проверка возможности их совершить, если из предоставленных ходов невозможно совершить ни один, происходит смена игрока. Доступные ходы отображены на главной форме (рисунок 3). В соответствии с правилами, игрок не имеет права завершить свой ход, пока существует возможность его продолжить. Игроки совершают ходы по очереди до завершения игры.

 

Рисунок 3 – Генерация ходов.

 

Если игра завершилась победой одного из игроков, то отображается соответствующее сообщение (рисунок 4).

 

 

Рисунок 4 – Сообщение о победе.

Во время игры существует возможность отменить свой ход до полного его завершения при помощи кнопки «ОТМЕНИТЬ ХОД». Нажатие этой кнопки ведет к восстановлению всех данных в их состояние на момент «броска» кубиков.

Также во время игры можно сохранить все данные нажатием на кнопу «СОХРАНИТЬ ИГРУ». При нажатии на эту кнопку активируется новая форма, предлагающая игроку ввести имя новой сохраняемой игры (рисунок 5). После ввода имени и нажатии на кнопку «СОХРАНИТЬ» программа сохраняет данные в папку saves в корневом каталоге программы.

 

 

Рисунок 5 – Форма сохранения игры.

 

       Выйти из программы можно в любое время нажатием на кнопку «ВЫХОД».

    При нажатии на кнопку «СПРАВКА» активируется форма с расположенным на ней вэб-браузером, в котором отображаются правила игры (рисунок 6).

 

 

Рисунок 6 – Форма «СПРАВКА».

    При нажатии на кнопку «О ПРОГРАММЕ» активируется форма, на которой отображается информация о разработчиках и о программе (рисунок 7).

 

 

Рисунок 7 – Форма «О ПРОГРОАММЕ»

           


Тестирование и отладка

Существует три основных типа ошибок, которые могут явиться причиной прекращения выполнения программы или неверного результата:

– синтаксические ошибки;

– ошибки выполнения;

– логические ошибки.

Синтаксические ошибки обнаруживаются при компиляции или запуске программы.

Большинство синтаксических ошибок легко обнаруживается и устраняется.

Ошибки выполнения являются наиболее распространенным типом ошибок. Однако данный тип ошибок достаточно легко обнаруживается и устраняется с помощью отладчика.

К логическим ошибкам можно отнести ситуации, в которых программа выполняется, но приводит к непредсказуемым или неправильным результатам. Причины, которые могут привести к логической ошибке, могут быть самыми разнообразными, например, неверный алгоритм построения программы, некорректное использование управляющих структур и т.д. Данный тип ошибок наиболее трудно обнаружить.

Таблица 2.2 – Ошибки при разработке программы.

Ошибка Тип ошибки

Метод устранения

Out of range логическая

Добавлены дополнительные условия, сокращен диапазон выполнения цикла.

Некорректоне определение присутствия игрока в «доме» Логическая

Добавлено новое условие

Ошибка

Тип ошибки

Метод устранения Cant find file

Выполнения

Прописан новый путь к файлам Access violation filed

Логическая

Добавлено новое исключение в алгоритм Возможность совершить бесконечное количество ходов

Логическая

Введена автоматическая смена игрока перед генерацией нового хода Невозможность победы

Логическая

Отключение процедуры проверки возможности хода при условии, что игрок «пришел в «дом» Некорректные результаты процедуры проверки возможных, ходов при первом ходе

Логическая

Добавлено дополнительное условие, изменен алгоритм проверки Неккоректные результаты процедуры отображения игрового процесса

Логическая

Добавлена конструкция begin…end; Совпадение имен массива и процедуры

Логическая

Исправлено имя процедуры Обнуление основных переменных при отмене хода сразу после загрузки ранее сохраненной игры

Логическая

Добавлено заполнение резервных переменных Некорректное действие при нажатии кнопки «НОВАЯ ИГРА»

Логическая

Добавлено занесение начальных данных в основные переменные        

2.5 Контрольный пример

 

В качестве контрольного примера рассмотрим игру между двумя игроками: «Игрок 1» и «Игрок 2».

При нажатии на кнопку «НАЧАТЬ ИГРУ» выводится сообщение «Начинающий игрок определен случайным образом, бросьте зары» (рисунок 8).

 

 

Рисунок 8 – Сообщение о начале игры.

 

Один из игроков нажимает на кубики, выводится сообщение: «Ходят белые». Превый игрок начинает свой ход. Доступные ходы – три и два. «Игрок 1» перемещает фишку на три, а затем на две клетки вперед (рисунок 9).

 

 

Рисунок 9 – Первый ход «Игрока 1».

 

«Игрок 2» нажимает на кубики, вывдится сообщение: «Ходят черные». «Игрок 2» совершает свой ход, «Игрок 1» нажимает на кубики. Спустя несколько ходов Игроку 1 доступно четыре хода по пять ячеек, он совершает три хода и нажимает на кубики. Программа выдает сообщение об ошибке: «Ход не завершен!» (Рисунок 10).

 

 

Рисунок 10 – Ход не завершен.

 

 Спустя еще несколько ходов «Игроку 2» «выпадает» на кубиках шесть и три, но ход «три» недоступен, «Игрок 2» совершает ход «шесть» и передает ход «Игроку 1». Игрок один нажимает на кубики, «выпадает» один и четыре, но ни один из этих ходов не доступен. Выводится сообщение: «Вы не можете походиться»    (рисунок 11). Ход переходит к «Игроку 2».

 

 

Рисунок 11 – Невозможность совершить ход.

 

Игроки совершили по 15 ходов, вид игрового поля перед сохранением изображен на рисунке 12.

 

Рисунок 12 – Игровой процесс перед сохранением.

 

Сохраняем игру под имеем «Игра1», выходим из игры. После этого загружаем «Игра1» и проверяем правильность загруженных данных. Вид игрового поля после загрузки изображен на рисунке 13. Все данные загружены верно, игроки продолжают партию.

 

Рисунок 13 – Игровой процесс после загрузки.

а1няем игру под имеем "гв, вид игрового поля изображен на рисункеимает на кубики. 2.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

«Игрок 2» побеждает в партии, выводится сообщение: «Игра окончена, победили черные» (Рисунок 14).

 

Рисунок 14 – Сообщение о победе.

 

 


Заключение

 

 

В ходе курсового проектирования была разработана игровая программа «Нарды».

Данная программа является аналогом популярной настольной игры, содержит подробную справку о правилах игры, а также автоматический механизм слежения за их соблюдением, поэтому даже неопытный пользователь может без проблем играть в нарды.

Решение задачи получено с помощью методов нелинейного программирования.

Программным решением была выбрана: среда программирования Borland Delphi 7. Используемые средства разработки позволили создать качественный программный продукт, который можно использовать в развлекательных и развивающих целях.

В процессе создания программы использовались приложения:

- Adobe Photoshop CS3;

- Microsoft FrontPage 2003;

- Microsoft Office Word 2003;

- Adobe Indesign CS3.

Возможна модернизация интерфейса программы в виде дополнительных цветовых схем, а также создание технологии клиент-сервер для игры в локальных сетях и искусственного интеллекта различных уровней сложности для возможности однопользовательской игры.

Разработанная программа обладает следующими свойствами:

- простота в использовании;

- имеет наглядный и понятный интерфейс;

- позволяет сохранять и загружать данные.

Так же в свою очередь программа обладает некоторым недостатком. Механизм проверки возможных ходов в исключительных ситауциях выдает неверные данные по невыясненным причинам.

 

 


Список литературы

 

1 http://www.fpclub.ru/games/nardy/nardylong.php

2 Боровский А Н Программирование в Delphi 2005

3 Банкел Джулиан М. Фундаментальные алгоритмы и структуры данных в Delphi

4 Дерахвелидзе П. Г., Марков Е. П. Программирование в Delphi 7

5 Кенту М. Delphi7 для профессионалов

6 Фленов М. Е. Библия Delphi

7 Культин Н. Б. Основы программирования в Delphi 8 для Microsoft.NET Framework


Приложение А

(обязательное)

Текст программы

 

Модуль MAIN содержит главную форму и вызов основных процедур программы

 

 

uses draw, game, save, load, exit, help, about;

 

{$R *.dfm}

 

procedure TForm1.FormCreate(Sender: TObject);

var i:integer;

begin

getdir(0,path);

status:=0;

for i:=1 to 4 do bones[i]:=0;

for i:=1 to 4 do bones2[i]:=0;

varbones(sender);

for i:=1 to 26 do mas[i,1]:=0;

for i:=1 to 26 do mas[i,2]:=0;

for i:=1 to 26 do mas2[i,1]:=0;

for i:=1 to 26 do mas2[i,2]:=0;

mas[1,1]:=1;

mas[1,2]:=15;

mas[13,1]:=2;

mas[13,2]:=15;

mas[25,1]:=1;

mas[26,1]:=2;

mas2[1,1]:=1;

mas2[1,2]:=15;

mas2[13,1]:=2;

mas2[13,2]:=15;

mas2[25,1]:=1;

mas2[26,1]:=2;

draw.visible(sender);

draw.redraw(sender);

end;

 

procedure TForm1.niClick(Sender: TObject); // i – от 1 до 24

begin

game.variants(sender,1);

end;

 

procedure TForm1.miClick(Sender: TObject); // i - от 1 до 24

begin

game.move(sender,1);

end;

 

procedure TForm1.bldomclickClick(Sender: TObject);

begin

game.movehouse(Sender,26,zar);

end;

 

procedure TForm1.bones_clickClick(Sender: TObject);

begin

game.bonesclick(sender);

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var z1,z2:integer;

begin

If messagedlg('Вы действительно хотите начать новую игру?',mtinformation,[mbOk,mbCancel],0)=1 then begin

formcreate(sender);

z1:=random(6)+1;

z2:=random(6)+1;

if z1=z2 then form1.Button1Click(sender)

else begin

if z1>z2 then player:=2;

if z2>z1 then player:=1;

if z1<>z2 then status:=2;

wf:=0;

blf:=0;

messagedlg('Начинающий игрок определен случайным образом, бросьте зары',mtinformation,[mbok],0);

bones_click.Enabled:=true;

end;

end;

end;

 

 

procedure TForm1.Button2Click(Sender: TObject);

var i,j:integer;

begin

for i:= 1 to 26 do

for j:= 1 to 2 do mas[i,j]:=mas2[i,j];

for i:=1 to 4 do bones[i]:=bones2[i];

golova:=0;

draw.visible(sender);

draw.redraw(sender);

varbones(sender);

end;

 

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

form2.ShowModal;

end;

 

procedure TForm1.SpeedButton2Click(Sender: TObject);

begin

form3.ShowModal;

end;

 

procedure TForm1.SpeedButton3Click(Sender: TObject);

begin

form4.ShowModal;

end;

 

procedure TForm1.SpeedButton4Click(Sender: TObject);

begin

form5.showmodal;

end;

 

procedure TForm1.SpeedButton5Click(Sender: TObject);

begin

form4.ShowModal;

end;

 

procedure TForm1.SpeedButton6Click(Sender: TObject);

begin

application.Minimize;

end;

 

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ReleaseCapture;

SendMessage(Form1.Handle, WM_SysCommand,$F012, 0);

end;

 

procedure TForm1.SpeedButton7Click(Sender: TObject);

begin

form6.showmodal;

end;

 

procedure TForm1.wdomclickClick(Sender: TObject);

begin

game.movehouse(Sender,25,zar);

end;

 

end.

 

Модуль GAME содержит процедуры реализации игрового процесса

 

uses main, draw;

 

procedure variants(Sender: TObject; num:integer);

var x,sum,i,j:integer;

begin

if status=2 then begin

messagedlg('Бросьте зары',mtinformation,[mbok],0);

exit;

end;

if (status=1) and (mas[num,1]=player) then begin

if player=1 then begin

sum:=0;

for i:=19 to 25 do

if mas[i,1]=1 then sum:=sum+mas[i,2];

if sum=15 then begin

   draw.visible(Sender);

   nomer:=num;

   for i:=1 to 4 do if bones[i]<>0 then begin

     x:=num+bones[i];

     sum:=0;

     for j:=18 to num-1 do if mas[j,1]=player then sum:=sum+mas[j,2];

     if (sum=0) and (x>25) then x:=25;

     if x=25 then zar:=i;

     if x<26 then if (mas[x,1]=player) or (mas[x,1]=0) then arrow(sender,x);

    end;

     exit;

   end;

end;

if player=2 then begin

sum:=0;

for i:=7 to 12 do

if mas[i,1]=2 then sum:=sum+mas[i,2];

sum:=sum+mas[26,2];

if sum=15 then begin

   visible(Sender);

  nomer:=num;

   for i:=1 to 4 do if bones[i]<>0 then begin

     x:=num+bones[i];

    sum:=0;

    for j:=6 to num-1 do if mas[j,1]=player then sum:=sum+mas[j,2];

    if (sum=0) and (x>13) then x:=13;

    if x=13 then x:=26;

    if x=26 then zar:=i;

    if x<27 then if (mas[x,1]=player) or (mas[x,1]=0) then if (x<13) or (x=26) then arrow(sender,x);

   end;

   exit;

end;

end;

end;

if (status=1) and (mas[num,1]=player) then

if ((mas[num,1]=1) and (num=1) and (golova=2)) or ((mas[num,1]=2) and (num=13) and (golova=2)) then else begin

visible(Sender);

nomer:=num;

if bones[1]<>0 then begin

x:=num+bones[1];

if (mas[num,1]=2) and (x>24) then x:=x-24;

if (x>24) or ((mas[num,1]=2) and (num<=12) and (x>12)) then else

if (mas[x,1]=player) or (mas[x,1]=0) then arrow(sender, x);

end;

if bones[2]<>0 then begin

x:=num+bones[2];

if (mas[num,1]=2) and (x>24) then x:=x-24;

if (x>24) or ((mas[num,1]=2) and (num<=12) and (x>12)) then else

if (mas[x,1]=player) or (mas[x,1]=0) then arrow(sender, x);

end;

if main.bones[3]<>0 then begin

x:=num+bones[3];

if (mas[num,1]=2) and (x>24) then x:=x-24;

if (x>24) or ((mas[num,1]=2) and (num<=12) and (x>12)) then else

if (mas[x,1]=player) or (mas[x,1]=0) then arrow(sender, x);

end;

if bones[4]<>0 then begin

x:=num+bones[4];

if (mas[num,1]=2) and (x>24) then x:=x-24;

if (x>24) or ((mas[num,1]=2) and (num<=12) and (x>12)) then else

if (mas[x,1]=player) or (mas[x,1]=0) then arrow(sender, x);

end;

end;

end;

 

function proverka(m:integer; zz:integer):integer;

var i,j,nn,x:integer;

begin

nn:=0;

case player of

1: begin

if mas[m,1]=player then for j:=1 to 4 do

  if m+zz*j<=24 then

   if (mas[m+zz*j,1]=player)or (mas[m+zz*j,1]=0) then begin nn:=nn+mas[m,2];

    end

     else begin

     result:=nn;

     exit;

     end;

 

 

end;

2: if (m>=13) and (m<=24) then

if mas[m,1]=player then for j:=1 to 4 do begin

  x:=m+zz*j;

  if x>24 then x:=x-24;

   if (mas[x,1]=player)or (mas[x,1]=0) then nn:=nn+mas[m,2]

     else begin

     result:=nn;

     exit;

     end; end else begin

if mas[m,1]=player then for j:=1 to 4 do

  if m+zz*j<=12 then

   if (mas[m+zz*j,1]=player)or (mas[m+zz*j,1]=0) then nn:=nn+1*mas[m,2]

     else

     begin

     result:=nn;

     exit;

     end;

    end;

end;

result:=nn;

end;

 

procedure doublebones(sender:tobject);

var i,j,n,z,x:integer;

begin

z:=bones[1];

n:=0;

case player of

1: begin

for i:=1 to 24-bones[1] do begin

x:=proverka(i,z);

n:=n+x;

 end;

if mas[1,2]>=1 then begin

if mas[1,2]=15 then n:=n-13 else n:=n+1-mas[1,2];

end;

end;

2: begin

for i:=13 to 24 do n:=n+proverka(i,z);

for i:=1 to 12-bones[1] do n:=n+proverka(i,z);

if mas[13,2]>=1 then begin

if mas[13,2]=15 then n:=n-13 else n:=n+1-mas[13,2];

end; //else

end;

end;

if n>=4 then exit else case n of

0: for i:=1 to 4 do bones[i]:=0;

1: for i:=4 downto 2 do bones[i]:=0;

2: for i:=4 downto 3 do bones[i]:=0;

3: bones[4]:=0;

end;

end;

 

procedure ablemove(sender:tobject);

var z:array[1..2] of boolean;

p:boolean;

i,j,x,z1,z2,s1,s2,sum:integer;

begin

if player=1 then begin

for i:=19 to 25 do

if mas[i,1]=1 then sum:=sum+mas[i,2];

if sum=15 then exit;

end;

if player=2 then begin

for i:=7 to 12 do

if mas[i,1]=2 then sum:=sum+mas[i,2];

sum:=sum+mas[26,2];

if sum=15 then exit;

end;

z1:=bones[1];

z2:=bones[2];

s1:=mas[24,2]+mas[23,2]+mas[22,2]+mas[21,2]+mas[20,2]+mas[19,2];

s2:=mas[7,2]+mas[8,2]+mas[9,2]+mas[10,2]+mas[11,2]+mas[12,2];

z[1]:=false;

z[2]:=false;

p:=false;

case player of

1: begin if bones[1]<>main.bones[2] then begin

for j:=1 to 2 do begin

for i:=1 to 24-bones[j] do

     if (mas[i,1]=player) and (p=false) then

       if (mas[i+bones[j],1]=player) or (mas[i+bones[j],1]=0) then begin

         p:=true;

         z[j]:=true;

         end;

p:=false;

end;

case z[1] of

true: begin

if z[1]=z[2] then exit else

   for i:= 1 to 24-bones[1]-bones[2] do

     if (mas[i,1]=player) and (z[2]=false) then

       if (mas[i+bones[1]+bones[2],1]=player) or (

         mas[i+bones[1]+bones[2],1]=0) then z[2]:=true;

   if z[2]=false then bones[2]:=0;

end;

false: begin

if z[1]=z[2] then begin

bones[1]:=0;

bones[2]:=0;

end else

   for i:= 1 to 24-bones[1]-bones[2] do

     if (mas[i,1]=player) and (z[1]=false) then

       if (mas[i+bones[1]+bones[2],1]=player) or (

         mas[i+bones[1]+bones[2],1]=0) then z[1]:=true;

   if z[1]=false then bones[1]:=0;

end;

 

end;

if s1=15 then begin

if mas[z1+18,2]>=1 then bones[1]:=z1;

if mas[z2+18,2]>=1 then bones[2]:=z2;

end; end else doublebones(sender);

end;

2: begin if bones[1]<>bones[2] then begin

for j:=1 to 2 do begin

for i:=13 to 24 do

     if (mas[i,1]=player) and (p=false) then begin

 

       x:=i+main.bones[j];

       if x>24 then x:=x-24;

       if (mas[x,1]=player) or (mas[x,1]=0) then begin

         p:=true;

         z[j]:=true;

         end;

       end;

for i:=1 to 12-bones[j] do

     if (mas[i,1]=player) and (p=false) then begin

       x:=i+main.bones[j];

       if (mas[x,1]=player) or (mas[x,1]=0) then begin

         p:=true;

         z[j]:=true;

         end;

         end;

p:=false;

end;

case z[1] of

true: begin

if z[1]=z[2] then exit else

   for i:= 13 to 24 do

     if (mas[i,1]=player) and (z[2]=false) then begin

       x:=i+bones[1]+bones[2];

       if x>24 then x:=x-24;

       if (mas[x,1]=player) or (mas[x,1]=0) then z[2]:=true;

       end;

   for i:=1 to 12-bones[1]-bones[2] do

     if (mas[i,1]=player) and (z[2]=false) then

       if (mas[i+bones[1]+bones[2],1]=player) or (

         mas[i+bones[1]+bones[2],1]=0) then z[2]:=true;

   if z[2]=false then bones[2]:=0;

end;

false: begin

if z[1]=z[2] then begin

bones[1]:=0;

bones[2]:=0;

end else

   for i:= 13 to 24 do

     if (mas[i,1]=player) and (z[1]=false) then begin

       x:=i+bones[1]+bones[2];

       if x>24 then x:=x-24;

       if (mas[x,1]=player) or (mas[x,1]=0) then z[1]:=true;

       end;

   for i:=1 to 12-bones[1]-bones[2] do

     if (mas[i,1]=player) and (z[1]=false) then

       if (mas[i+bones[1]+bones[2],1]=player) or (

         mas[i+bones[1]+bones[2],1]=0) then z[1]:=true;

   if z[1]=false then bones[1]:=0;

end;

end;

 

if s2=15 then begin

if mas[z1+6,2]>=1 then bones[1]:=z1;

if mas[z2+6,2]>=1 then bones[2]:=z2;

end; end else doublebones(sender);

end; end;

end;

 

procedure bonesclick(Sender: TObject);

var i,j:integer;

begin

if (player=1) and (mas[25,2]=15) then begin

messagedlg('Игра закончена! Белые победили!',mtinformation,[mbok],0);

exit;

end;

if (player=2) and (mas[26,2]=15) then begin

   messagedlg('Игра закончена! Черные победили!',mtinformation,[mbok],0);

   exit;

   end;

if (main.bones[1]=0) and (main.bones[2]=0) and (main.bones[3]=0) and

(main.bones[4]=0) then begin

status:=2;

if player=1 then begin

   player:=2;

   messagedlg('Ходят черные',mtinformation,[mbok],0);

   end else begin

     player:=1;

     messagedlg('Ходят белые',mtinformation,[mbok],0);

     end;

 

 

with form1 do begin

randomize;

z1:=random(6)+1;

case z1 of

1: leftbone.Picture:=b1.Picture;

6: leftbone.Picture:=b6.Picture;

end;

z2:=random(6)+1;

case z2 of

1: rightbone.Picture:=b1.Picture;

6: rightbone.Picture:=b6.Picture;

end;

 

golova:=0;

status:=1;

if z1<>z2 then begin

bones[1]:=z1;

bones[2]:=z2;

bones[3]:=0;

bones[4]:=0;

end else begin

bones[1]:=z1;

bones[2]:=z1;

bones[3]:=z2;

bones[4]:=z2;

end;

if (player=1) and (bones[3]<>0) and (mas[1,2]=15) then wf:=1;

if (player=2) and (bones[3]<>0) and (mas[13,2]=15) then blf:=1;

ablemove(sender);

varbones(sender);

if (bones[1]=0) and (main.bones[2]=0) and (bones[3]=0) and (bones[4]=0) then begin

messagedlg('Вы не можете походиться!',mtinformation,[mbok],0);

end;

 

end;

for i:=1 to 26 do

for j:=1 to 2 do mas2[i,j]:=mas[i,j];

for i:=1 to 4 do bones2[i]:=bones[i];

end else messagedlg('Ход не завершен!',mtinformation,[mbok],0)

 

end;

 

procedure move(Sender: TObject; number1:integer);

var i,k:integer;

begin

if (nomer=1) and (mas[nomer,1]=1) then golova:=2;

if (nomer=1) and (mas[nomer,1]=1) and (wf=1) then begin

golova:=1;

wf:=0;

end;

if (nomer=13) and (mas[nomer,1]=2) then golova:=2;

if (nomer=13) and (mas[nomer,1]=2) and (blf=1) then begin

golova:=1;

blf:=0;

end;

mas[nomer,2]:=mas[nomer,2]-1;

mas[number1,1]:=player;

mas[number1,2]:=mas[number1,2]+1;

if mas[nomer,2]=0 then mas[nomer,1]:=0;

draw.visible(sender);

  draw.redraw(sender);

k:=number1-nomer;

if k<1 then k:=k+24;

i:=0;

repeat

i:=i+1;

if main.bones[i]=k then begin

main.bones[i]:=0;

k:=0;

end;

until k=0;

varbones(sender);

end;

 

 

procedure movehouse(Sender: TObject; number2,zar:integer);

begin

main.bones[zar]:=0;

mas[number2,2]:=mas[number2,2]+1;

mas[nomer,2]:=mas[nomer,2]-1;

if mas[nomer,2]=0 then mas[nomer,1]:=0;

draw.visible(sender);

draw.redraw(sender);

varbones(sender);

if (player=1) and (mas[25,2]=15) then begin

messagedlg('Игра закончена! Белые победили!',mtinformation,[mbok],0);

exit;

end;

if (player=2) and (mas[26,2]=15) then begin

   messagedlg('Игра закончена! Черные победили!',mtinformation,[mbok],0);

   exit;

   end;

end;

 

end.

 

Модуль DRAW содержит процедуры отображения игрового процесса

 

uses main;

 

procedure visible(Sender: TObject);

begin

with form1 do begin

m1.Visible:=false;

m24.Visible:=false;

wdomclick.Visible:=false;

bldomclick.Visible:=false;

end;

end;

 

procedure arrow(Sender: TObject; number:integer);

begin

with form1 do

case number of

1: begin

   m1.Visible:=true;

   if mas[1,2]=0 then begin

       m1.Left:=n1.Left;

       m1.Top:=n1.Top;

       end else begin

       m1.Left:=n1.Left;

       m1.Top:=n1.Top-20;

       end;

   end;

26: begin

   bldomclick.Visible:=true;

   if mas[26,2]=0 then begin

       bldomclick.Left:=bldom.Left;

       bldomclick.Top:=bldom.Top;

       end else begin

       bldomclick.Left:=bldom.Left;

       bldomclick.Top:=bldom.Top-20;

       end;

   end;

end;

end;

 

procedure redraw(sender: TObject);

var i:integer;

pic:tpicture;

begin

with form1 do

for i:=1 to 26 do begin

if mas[i,1]=0 then

case i of

1: n1.Visible:=false; 

26: bldom.Visible:=false;

end else begin

case i of

1: n1.Visible:=true;

26: bldom.Visible:=true;

end;

if mas[i,1]=1 then

case mas[i,2] of

0: pic:=picpusto.Picture;

15: pic:=w15.Picture;

end;

if mas[i,1]=2 then

case mas[i,2] of

0: pic:=picpusto.Picture;

15: pic:=bl15.Picture;

end;

case i of

1: n1.Picture:=pic;

 …

26: bldom.Picture:=pic;

end;

end;

end;

end;

 

procedure varbones(sender: Tobject);

var pic:tpicture;

i:integer;

begin

with form1 do

for i:=1 to 4 do begin

case bones[i] of

0: pic:=picpusto.Picture;

6: pic:=image8.picture;

end;

case i of

1: v1.picture:=pic;

4: v4.picture:=pic;

end;

end;

end;

end.

 

 

Модуль LOAD содержит форму загрузки сохраненной игры

 

uses main, draw;

 

{$R *.dfm}

 

procedure TForm3.SpeedButton2Click(Sender: TObject);

begin

form3.Close;

end;

 

procedure TForm3.SpeedButton1Click(Sender: TObject);

var i,j:integer;

begin

if listbox1.Items.Count=0 then begin

form3.Close;

exit;

end;

form1.memo_save.Clear;

form1.memo_save.Lines.LoadFromFile(path+'\saves\'+listbox1.Items[listbox1.itemindex]+'.sav');

with form1 do begin

i:=0;

status:=strtoint(memo_save.Lines[i]);

i:=1;

player:=strtoint(memo_save.Lines[i]);

i:=2;

for j:=1 to 4 do begin

main.bones[j]:=strtoint(memo_save.Lines[i]);

i:=i+1;

end;

for j:=1 to 26 do begin

mas[j,1]:=strtoint(memo_save.Lines[i]);

i:=i+1;

end;

for j:=1 to 26 do begin

mas[j,2]:=strtoint(memo_save.Lines[i]);

i:=i+1;

  end;

golova:=strtoint(memo_save.Lines[i]);

i:=i+1;

z1:=strtoint(memo_save.Lines[i]);

i:=i+1;

z2:=strtoint(memo_save.Lines[i]);

case z1 of

1: leftbone.Picture:=b1.Picture;

6: leftbone.Picture:=b6.Picture;

end;

case z2 of

1: rightbone.Picture:=b1.Picture;

6: rightbone.Picture:=b6.Picture;

end;

draw.visible(sender);

draw.redraw(sender);

varbones(sender);

end;

form3.Close;

end;

 

procedure TForm3.FormActivate(Sender: TObject);

var

s:string;

SearchRec: TSearchRec;// структура SearchRec содержит информацию

                   // о файле, удовлетворяющем условию поиска

begin

ListBox1.Clear;

// сформировать список sav файлов

if FindFirst(Path+'\saves\' + '*.sav', faAnyFile, SearchRec) =0 then

begin

     // в каталоге есть файл с расширением sav

     // добавим имя этого файла в список

     s:=searchrec.Name;

     Delete(s, length(S)-3,4);

     ListBox1.Items.Add(s);

     // есть еще sav-файлы?

     while (FindNext(SearchRec) = 0) do begin

         s:=searchrec.Name;

     Delete(s, length(S)-3,4);

     ListBox1.Items.Add(s);

     end;

         end;

ListBox1.ItemIndex:= 0;

if listbox1.Items.Count=0 then begin

messagedlg('Нет сохраненной игры',mtinformation,[mbok],0);

form3.Close;

end;

form1.bones_click.Enabled:=true;

end;

 

end.

 

Модуль SAVE содержит форму сохранения игры

 

uses main;

 

{$R *.dfm}

 

procedure TForm2.SpeedButton1Click(Sender: TObject);

begin

form1.memo_save.Lines.SaveToFile(path+'\saves\'+saveedit.Text+'.sav');

form2.Close;

end;

 

procedure TForm2.SpeedButton2Click(Sender: TObject);

begin

form2.Close;

end;

 

procedure TForm2.FormShow(Sender: TObject);

var i:integer;

begin

with form1 do begin

memo_save.Clear;

memo_save.Lines.Add(inttostr(status));

memo_save.Lines.Add(inttostr(player));

for i:=1 to 4 do memo_save.Lines.Add(inttostr(bones[i]));

for i:=1 to 26 do memo_save.Lines.Add(inttostr(mas[i,1]));

for i:=1 to 26 do memo_save.Lines.Add(inttostr(mas[i,2]));

memo_save.Lines.Add(inttostr(golova));

memo_save.Lines.Add(inttostr(z1));

memo_save.Lines.Add(inttostr(z2));

end;

end;

 

end.

 

Модуль EXIT содежит форму подтверждения выхода из программы

 

uses main, start;

 

{$R *.dfm}

 

procedure TForm4.SpeedButton1Click(Sender: TObject);

begin

form7.Close;

end;

 

procedure TForm4.SpeedButton2Click(Sender: TObject);

begin

form4.Close;

end;

 

end.


Поделиться с друзьями:

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.496 с.