49036 (Создание игровой программы "Морской бой"), страница 3
Описание файла
Документ из архива "Создание игровой программы "Морской бой"", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "49036"
Текст 3 страницы из документа "49036"
Обстрел
На этом шаге задача заключается в определении направления пойманного корабля. Для этого надо обстрелять четыре ячейки (если они свободны), которые могут служить продолжением. В случае, когда все четыре клетки обстреляны, а попадания не произошло (однопалубный корабль), надо перейти к первому состоянию. Если в какой-то момент удалось подбить еще одну палубу противника, то можно переходит к расстрелу данного корабля, т.к. его направление стало известно. Аналогично первому состоянию, если у игрока остались корабли не более двух палуб, то этим попаданием корабль уничтожен полностью и надо вернуться к прострелу. Посмотрим, как все это выглядит:
function State2 (var x, y: Integer): Boolean; var Old: ShortInt; tmp: Integer; k: Integer; begin Old := Play[Px,Py]; Play[Px,Py] := -1; repeat if not Freedom (Px + Pkx, Py + Pky, Play) and not Freedom (Px - Pkx, Py - Pky, Play) then begin tmp := Pkx; Pkx := Pky; Pky := tmp; end; {if} if Random (2) = 0 then begin x := Px + Pkx; y := Py + Pky; end else begin x := Px - Pkx; y := Py - Pky; end; {if} until Freedom (x, y, Play); Result := Killed (x, y); if Result then begin Len := 2; State := 1; if MaxShip > 2 then State := 3 else Dec (Kor[Len]); end else begin k := 4; if not Freedom (Px + 1, Py, Play) then Dec (k); if not Freedom (Px - 1, Py, Play) then Dec (k); if not Freedom (Px, Py + 1, Play) then Dec (k); if not Freedom (Px, Py - 1, Play) then Dec (k); if k < 2 then State := 1; end; {if} Play[Px,Py] := Old; end; {func State2} |
Расстрел
На предыдущем шаге удалось установить в каком направлении размещен пойманный корабль. Теперь задача заключается в его полном уничтожении. Для этого надо стрелять справа или слева (сверху или снизу) подбитых палуб, пока не добьем его целиком, после чего вернемся в состояние прострела. При этом следует учитывать максимально возможный корабль и стараться попасть по четвертой палубе, когда четырех палубный корабль уничтожен, нет никакого смысла. Все достаточно просто:
function State3 (var x, y: Integer): Boolean; var Old: ShortInt; i: Integer; B: Boolean; begin for i := 1 to 2 do begin x := Px; y := Py; while Play[x,y] = 1 do begin Inc (x, Pkx); Inc (y, Pky); end; {while} Old := Play[x-Pkx,y-Pky]; Play[x-Pkx,y-Pky] := -1; B := Freedom (x, y, Play); Play[x-Pkx,y-Pky] := Old; if B then Break; Pkx := -Pkx; Pky := -Pky; end; {for} if B then begin Result := Killed (x, y); if Result then begin Inc (Len); if Len = MaxShip then begin Dec (Kor[Len]); State := 1; end; {if} end; end else begin Dec (Kor[Len]); State := 1; Result := State1 (x, y); end; {if} end; {func State3} |
Осталось собрать все это в одной процедуре, которая будет контролировать результат выстрела и обеспечивать повторный ход при попадании:
procedure Comput; var x, y: Integer; Kill: Boolean; begin repeat case State of 1: Kill := State1 (x, y); 2: Kill := State2 (x, y); 3: Kill := State3 (x, y); end; {case} if Kill then Play[x,y] := 1 else Play[x,y] := -2; until not Kill or GameOver; end; {proc Comput} |
Можно заметить, что функция Killed вызывается ровно один раз при каждом ходе компьютера. От сюда следует, что компьютер не подглядывает расположение кораблей игрока, т.к. другой возможности узнать о состоянии какой-либо ячейки поля юзера у него нет. В этом можно убедиться на практике, собрав все эти части кода вместе и сделав консольное приложение, в котором функция Killed спрашивала бы у игрока, попал компьютер или промазал. Все это легко с минимальными изменениями реализовать на Turbo Pascal 7.0
3. БЛОК - СХЕМА
ЗАКЛЮЧЕНИЕ
В результате выполнения данной курсовой работы был получен игровой программный продукт, названный «Морской бой». Было проведено исследование компонентов программной среды Turbo Pascal 7.0, которые использовались при создании игры.
В результате исследования были выявлены следующие недостатки полученного программного продукта:
-
Низкий исскуственный интеллект, т.е. ход компьютера осуществляется случайным образом, что делает маловероятным победу компьютера;
-
При полном потоплении корабля это никак не отражается;
-
Невозможность возврата на несколько ходов назад;
-
Работоспособность приложения только в среде Windows;
Однако, помимо недостатков, есть и достоинства у этого программного продукта:
-
Автоматическая расстановка кораблей ;
-
Программный продукт малотребователен к системным ресурсам компьютера. Минимальная конфигурация: процессор – не ниже Pentium, оперативная память – не ниже 16 Mb, операционная система – Windows 95 / 98/ Me / NT / 2000 / XP.
В результате учета всех сделанных выше замечаний возможно улучшение созданного программного продукта, на которое потребуется минимум изменений исходного кода программы.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
-
Немнюгин С. Turbo Pascal / Учебный курс.– СПб: Питер, 2001.
-
Сухарев М. Turbo Pascal 7.0. Теория и практика программирования.- СПб.: Наука и техника. 2004.
-
Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие – М.: Издательство ООО ОМД «Групп», 2002.
-
Федоренко Ю. Алгоритмы и программы на Turbo Pascal / Учебный курс.– СПб: Питер, 2001.