Создание игровой программы "Морской бой"
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?ческим. Логическое выражение принимает одно из двух возможных значений True (истина) или False (ложь). Часто в роли логического выражения выступает какое-то условие, которое может выполнять либо нет. В первом случае его значение истина,а во втором ложь. Если логическое выражение expression1 принимает значение истина, то выполняется оператор statement1. В противном случае выполняется будет оператор, следующий за данным логическим оператором.
Оператор if…then…else…
Этот оператор является полной версией условного оператора и имеет вид:
If expression then statement1 else statement2;
Выполняется данный оператор следующим образом: если выражение expression принимает значение истина, то управление передается на оператор statement1, если же нет, то на оператор statement2.
Оператор case…of…end
Для ситуации, где имеется несколько (три или более) альтернатив, больше подходит оператор case. Этот оператор называется оператором выбора и имеет следующий вид:
case expression of
values_1: statement_1;
values_2: statement_2;
…
values_n: statement_n;
else statement;
end;
Рассмотрим элементы этой конструкции. Во-первых, это три зарезервированных слова: case, of и end. Между case и of находится выражение expression, принимающее значение, которое, возможно, имеется в одном из списков значений, находящихся слева от двоеточий. Данное выражение называется селектором оператора case. Каждый оператор, идущий за двоеточием, отделяется от следующего списка значений точкой запятой. Ветвь else, отвечающая всем не перечисленным значениям выражения expression, необязательна. При выполнении данного оператора вначале вычисляется значение селектора. Затем выбирается тот список значений, которому принадлежит полученное значение, и выполняется соответствующий оператор.
Оператор цикла while…do…
Оператор цикла является важнейшим оператором и имеется в большинстве современных языков программирования. Цикл позволяет много кратно выполнить некоторое множество действий, задаваемых операторами, составляющими его тело. В Паскале имеется несколько разновидностей оператора цикла. Начнем с оператора цикла с предусловием. Данный оператор имеет вид:
While expression do statement ;
При выполнении этого оператора вначале вычисляется значение логического выражения expression. Если это значение истинно, выполняется оператор statement, затем значение выражения проверяется вновь и т. д., до тех пор, пока выражение не примет значений ложь. Если выражение принимает значение ложь при первой же проверке, то оператор statement не выполняется вообще.
Операторы цикла repeat…until…
Оператор цикла с постусловием имеет вид:
Repeat statement until expression:
Здесь вначале выполняется оператор statement, а затем вычисляется значение логического выражения expression принимает значение ложь. Как только это значение станет истинным, выполнение цикла прекращается.
Операторы цикла for…to…do… и for…downto…do…
Третий вариант оператора цикла цикл со счетчиком. Можно считать, что есть две очень похожих друг на друга разновидности цикла со счетчиком. Первый из этих операторов имеет вид:
For j := expression1 to expression2 do statement;
Здесь переменная j, называемая управляющей переменной цикла for, является произвольным идентификатором, который объявляется как переменная любого скалярного типа (к скалярным относится целый, символьный, булев и перечислимые типы).
При выполнении оператора for сначала вычисляется значение выражения expression1, затем вычисляется значение выражения expression2, далее управляющая переменная цикла последовательно пробегает все значения от expression1 до expression2. В том случае, когда значение expression1 оказывается больше значения expression2, тело цикла не будет выполнятся вовсе.
2. РАЗРАБОТКА ПРОГРАММЫ
2.1 Постановка задачи
Составить программу для игры в Морской бой игрока с компьютером. Программа должна позволять расставлять корабли на поле 10 х 10, контролировать правильность их расстановки, давать противникам возможность поочередно делать ходы и выдавать соответствующие информационные сообщения. Когда в качестве игрока выступает компьютер, программа должна анализировать предыдущие ходы и следующий ход делать на основе проведенного анализа.
2.2 Алгоритм реализации работы
Алгоритм размещения кораблей на игровом поле
Игровое поле нужно как-то хранить в памяти компьютера. Наиболее простая реализация - в виде матрицы 10x10 клеток (ячеек). Определим соответствующий тип и переменные, которые нам понадобятся:
type TPole = array[1..10,1..10] of Integer;
var Pole: TPole;
Обусловимся, что пустая ячейка будет иметь значение -1, а ячейка, в которой находится корабль: 0. Перед началом процесса размещения кораблей необходимо очистить поле. Помимо этого надо еще и обновить счетчик случайных чисел, что бы добиться реальной случайности позиций флота компьютера. Все эти действия лучше оформить в виде отдельной процедуры:
procedure Init (var Pole: TPole); var X, Y: Integer; begin Randomize; for X := 1 to 10 do for Y := 1 to 10 do Pole[X,Y] := -1; end; {proc Init}
По правилам игры два корабля не могут соприкасаться друг с другом, т.е. между ними должно быть пустое пространство минимум в одну клетку. Нам понадобится вспомогательная функция, которая позволит определить, можно ли поставить однопалубный корабль в указанную ячейку или нет. Для этого необходимо провери?/p>