Создание модели игры «Шашки» в среде программирования Delphi

Автор работы: Пользователь скрыл имя, 21 Января 2014 в 16:18, дипломная работа

Краткое описание

Цель дипломной работы: моделирование аналогов популярной игры шашки.
Одним из разделов компьютерного моделирования, являются компьютерные игры, зависящие от случайности и стратегических правил игры.
Актуальность темы на сегодняшний день: тема как никогда актуальна, за счет достаточно высокой конкуренции на рынке подобных приложений и программ. Многие подобные разработки, нацелены на игру «компьютер – человек», и искусственный интеллект в редких случаях, обыгрывает даже чемпионов.

Содержание

Введение…………………………………………………………………………..2Терминология…………………………………………………………………….4
Аналитический обзор
I. Шашки.
История шашечной игры……………………………………………………..8
Классификация……………………………………………………………....10
Варианты шашек……………………………………………………...…......10
Шашки как вид спорта....................................................................................15
II. Среда программирования Delphi.
2.1 Краткое определение Delphi…………………………………………...……16
2.2 Целевая платформа…………………………………………………………..16
2.3 История языка………………………………………………………………..16
2.4 Синтаксис языка……………………………………………………………..20
2.5 Объектно-ориентированные особенности языка…………………………..21
2.6 Примеры……………………………………………………………………..21
2.7 Расширения файлов………………………………………………………….23
Глава III Практическая часть.
Работа в среде Delphi, написание программы «Шашки»
3.1 Проект, его местоположение………………………………………………..24
3.2 Запуск программы с компакт диска………..……………………………….25
3.3 Исходный код программы…………………………………………………..27

Заключение…………………………………………………………………..….45
Список литературы………………………………………………………….…46

Вложенные файлы: 1 файл

Дипломная работа (общий файл) Станислав Левин.docx

— 1.14 Мб (Скачать файл)

          Cells[y, x].CellType:=ctWhite;

      Cells[y, x].Draught:=nil;

    End;

  End;

End;

 

Destructor TChessBoard.Destroy;

Begin

  Clear;

  Inherited Destroy;

End;

 

Function TChessBoard.AddDraught(x, y:Integer; Side:Integer; Kind:Integer=kdSimple):TDraught;

Begin

  Result:=nil;

 

  If ((Cells[y, x].CellType=ctNone) Or (Cells[y, x].Draught<>nil)) Then Exit;

 

  Result:=TDraught.Create(Side);

  Result.Kind:=Kind;

  Cells[y, x].Draught:=Result;

End;

 

Procedure TChessBoard.DeleteDraught(x, y:Integer);

Begin

  If Cells[y, x].Draught<>nil Then Cells[y, x].Draught.Free;

  Cells[y, x].Draught:=nil;

End;

 

Function TChessBoard.GetDraught(x, y:Integer):TDraught;

Begin

  Result:=Cells[y, x].Draught;

End;

 

Function TChessBoard.SetDraught(x, y:Integer; Const Draught:TDraught):Boolean;

Begin

  Result:=True;

  Cells[y, x].Draught:=Draught;

  If Draught=nil Then Exit;

  If (((Draught.Side=sdWhite) And (y=8)) Or ((Draught.Side=sdBlack) And (y=1))) Then

    Draught.Kind:=kdKing;

End;

 

Procedure TChessBoard.Clear;

Var

  x, y:Integer;

Begin

  For y:=0 To 9 Do

    For x:=0 To 9 Do

      DeleteDraught(x, y);

End;

 

Procedure TChessBoard.Respawn;

Var

  x:Integer;

Begin

  Clear;

//Белые

  For x:=1 To 8 Do

  Begin

    If Odd(x) Then

      AddDraught(x, 2, sdWhite)

    Else Begin

      AddDraught(x, 1, sdWhite);

      AddDraught(x, 3, sdWhite);

    End

  End;

//Черные

  For x:=1 To 8 Do

  Begin

    If Not(Odd(x)) Then

      AddDraught(x, 7, sdBlack)

    Else Begin

      AddDraught(x, 8, sdBlack);

      AddDraught(x, 6, sdBlack);

    End

  End;

End;

 

Function TChessBoard.MoveDraught(FromX, FromY, ToX, ToY:Integer):Boolean;

Begin

  Result:=False;

  If ((Cells[FromY, FromX].CellType=ctNone) Or (Cells[ToY, ToX].CellType=ctNone)) Then Exit;

  If ((GetDraught(FromX, FromY)=nil) Or (GetDraught(ToX, ToY)<>nil)) Then Exit;

 

  SetDraught(ToX, ToY, GetDraught(FromX, FromY));

  SetDraught(FromX, FromY, nil);

  Result:=True;

End;

 

Procedure TChessBoard.FindMoves(x, y:Integer; Var Moves, Strikes, Strickens:TList);

Var

  i:Integer;

  dX, dY, dL:Integer;

  P:PCellPosition;

  MoveOver:Boolean;

Begin

  Moves:=nil;

  Strikes:=nil;

  Strickens:=nil;

  If Cells[y, x].Draught=nil Then Exit;

 

  Moves:=TList.Create;

  Strikes:=TList.Create;

  Strickens:=TList.Create;

 

  For i:=1 To 4 Do

  Begin

    MoveOver:=False;

    dX:=DraughtMoves[i].dX;

    dY:=DraughtMoves[i].dY;

    dL:=0;

 

    Repeat

      Inc(dL);

      If Cells[y+dY*dL, x+dX*dL].CellType<>ctNone Then  //Можно ли вставать на эту клетку

      Begin

        If Cells[y+dY*dL, x+dX*dL].Draught=nil Then  //Если клетка пустая, то запишем ход...

        Begin

         //...запишем ход в том случае, если шашка может ходить в  эту сторону

          If (i In Cells[y, x].Draught.PossibleMoves) Then

          Begin

            New(P);

            P^.X:=x+dX*dL; P^.Y:=y+dY*dL;

            Moves.Add(P);

            If Cells[y, x].Draught.Kind=kdSimple Then MoveOver:=True;  //Если это простая шашка, то закончим ход

          End

          Else  //Шашка не может ходить в этом направлении - закончим ход

            MoveOver:=True;

        End

        Else Begin  //Если в клетке стоит шашка, то проверим ее

          If Cells[y+dY*dL, x+dX*dL].Draught.Side<>Cells[y, x].Draught.Side Then

          Begin   //Если это чужая шашка, то проверим на сруб

            Inc(dL);  //Перешагнем через шашку

            If ((Cells[y+dY*dL, x+dX*dL].CellType<>ctNone) And (Cells[y+dY*dL, x+dX*dL].Draught=nil)) Then  //Можно ли вставать на эту клетку

            Begin //Рубка удалась

             //Запомним срубленную шашку

              New(P);

              P^.X:=x+dX*(dL-1); P^.Y:=y+dY*(dL-1);

              Strickens.Add(P);

             //Запишем рубку

              New(P);

              P^.X:=x+dX*dL; P^.Y:=y+dY*dL;

              Strikes.Add(P);

            End;

          End;

          MoveOver:=True;

        End;

      End

      Else  //Достигнут бордюр - завершим ход

        MoveOver:=True;

    Until MoveOver;

  End;

End;

 

Function TChessBoard.FindStrikingDraughts(Side:Integer):TList;

Var

  x, y:Integer;

  Moves, Strikes, Strickens:TList;

  CP:PCellPosition;

Begin

  Result:=TList.Create;

 

  For y:=1 To 8 Do

    For x:=1 To 8 Do

      If GetDraught(x, y)<>nil Then

        If GetDraught(x, y).Side=Side Then

        Begin

          FindMoves(x, y, Moves, Strikes, Strickens);

          If Strikes.Count>0 Then

          Begin

            New(CP);

            CP^.X:=x; CP^.Y:=y;

            Result.Add(CP);

          End;

          ClearMoves(Moves);

          ClearMoves(Strikes);

          ClearMoves(Strickens);

        End;

End;

 

Function TChessBoard.CountDraughts(Side:Integer):Integer;

Var

  x, y:Integer;

Begin

  Result:=0;

  For y:=1 To 8 Do

    For x:=1 To 8 Do

      If GetDraught(x, y)<>nil Then

        If GetDraught(x, y).Side=Side Then Inc(Result);

End;

 

Function TChessBoard.AbleToMove(Side:Integer):Boolean;

Var

  x, y:Integer;

  Moves, Strikes, Strickens:TList;

Begin

  Result:=False;

  For y:=1 To 8 Do

    For x:=1 To 8 Do

      If GetDraught(x, y)<>nil Then

        If GetDraught(x, y).Side=Side Then

        Begin

          FindMoves(x, y, Moves, Strikes, Strickens);

          If ((Moves.Count>0) Or (Strikes.Count>0)) Then Result:=True;

          ClearMoves(Moves);

          ClearMoves(Strikes);

          ClearMoves(Strickens);

          If Result Then Exit;

        End;

End;

 

end.

 

 

 

 

 

 

 

 

Заключение

Задача дипломного проекта: «Создание модели игры «Шашки» в среде программирования Delphi.

Цель дипломного проекта: программирование в среде Delphi методами ООП. Что позволило структурировать программу и облегчило ее написание. Использованы все три свойства ООП - инкапсуляция, наследование, полиморфизм. Высокая структурированность программы сделала ее достаточно прозрачной для внесения изменений и дополнений, в нее легко добавить еще несколько процедур для улучшения.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

  1. Автор: Рубанцев ВалерийИздательство: Я + R Год: 2011 Язык: Русский Страниц: 418
  2. Автор: Андрей Шкрыль Издательство: БХВ-Петербург Год: 2006Язык: Русский Страниц: 480
  3. Автор: Сергей БобровскийИздательство: ПитерГод: 2006Язык: Русский Страниц: 288
  4. Третье издание Автор: Михаил Фленов Издательство: БХВ-Петербург Год: 2011 Язык: Русский Страниц: 686
  5. Автор: А. Б. Григорьев Издательство: БХВ-Петербург   Год: 2008 Язык: Русский Страниц: 576
  6. Автор: Михаил Голованов, Евгений Веселов   Издательство: БХВ-Петербург Год: 2004 Язык: Русский Страниц: 320
  7. Автор: Константин Грибачев Издательство: Питер Год: 2004 Язык: Русский Страниц: 352
  8.   Автор: Евгений Марков, Петр Дарахвелидзе Издательство: БХВ-Петербург Год: 2005  Язык: Русский Страниц: 1136 
  9. Автор: Иван Хладни Оригинальное название: Inside Delphi 2006Издательство: Вильямс Год: 2006 Язык: Русский Страниц: 768
  10. Автор: А. Я. Архангельский Издательство: Бином-Пресс Год: 2007 Язык: Русский Страниц: 1248
  11. Автор: А. Я. Архангельский Издательство: Бином-ПрессГод: 2007 Язык: РусскийСтраниц: 1248
  12. Автор: А. Чиртик, В. Борисок, Ю. Корвель Издательство: ПитерГод: 2007Язык: РусскийСтраниц: 400
  13. Сайт: wikipedia.org

 


Информация о работе Создание модели игры «Шашки» в среде программирования Delphi