Автор работы: Пользователь скрыл имя, 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
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):
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[
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.
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(
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:
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 методами ООП. Что позволило структурировать программу и облегчило ее написание. Использованы все три свойства ООП - инкапсуляция, наследование, полиморфизм. Высокая структурированность программы сделала ее достаточно прозрачной для внесения изменений и дополнений, в нее легко добавить еще несколько процедур для улучшения.
Данный дипломный проект выполнен в соответствии с техническим заданием. Следует отметить, что игра в шашки легко поддается алгоритмизации в силу достаточно простых правил.
Список литературы
Информация о работе Создание модели игры «Шашки» в среде программирования Delphi