Муниципальное образовательное автономное учреждение
средняя общеобразовательная школа № 12 им.
П.Ф.Дерунова
Исследовательская работа
Создание игры на языке PASCAL
Выполнил: Ялычев Тимофей,
ученик 9 «В» класса
Научный руководитель: Говорова Е. А.
Учитель Информатики
г. Рыбинск
2019-2020 учебный год
Содержание
1.
Введение
- Почему я выбрал этот проект?
- Гипотеза
- Цель
- Задачи
2.
Теоретическая
часть.
3.
Практическая часть.
4. Заключение.
5. Информационные ресурсы.
6.
Приложения.
Введение
«Почему я выбрал именно эту тему?»
Я выбрал данную тему, потому что в будущем хочу стать
программистом и разрабатывать разные программы и игры. Я решил начать с
разработки простой игры, на знакомом всем школьникам языке PASCAL.
Цель: создать игру «Крестики-нолики» на языке
программирования Pascal.
Задачи:
-Изучить материалы о языке Pascal
-Изучить алфавит языка Pascal
-Изучить
особенности алгоритмического языка Pascal
Гипотеза:
Я предполагаю, что на языке программирования Pascal вполне возможно создать простейшую игру.
Что такое Pascal?
Язык был
создан Никлаусом Виртом (см.
приложение 1.1) в 1968—1969 годах после
его участия в работе комитета разработки стандарта языка Алгол-68. Язык назван
в честь французского математика, физика, литератора и философа Блеза Паскаля,
который создал одну из первых в мире механических машин, складывающую два
числа. Первая публикация Вирта о языка датирована 1970 годом;
представляя язык, автор в качестве цели его создания указывал построение
небольшого и эффективного языка, способствующего хорошему стилю
программирования, использующему структурное программирование и
структурированные данные.
Язык Pascal является традиционным алгоритмическим языком. Правильная
программа представляет собой формальную запись средствами языка некого
алгоритма. Любая программа состоит из двух основных частей: описание
последовательных действий и описание данных, которыми оперируют эти действия.
Кроме того программа снабжена заголовком, который задает имя программы и
завершается программа символом точки. Описание данных в программе предшествует
описанию действий и должно содержать упоминание о всех объектах используемых в
программе. Таким образом, общая структура программы выглядит следующим образом:
·заголовок программы;
·раздел описания
переменных;
·раздел действий;
·точка.
Особенности языка Pascal
Особенностями языка являются строгая типизация и
наличие средств структурного (процедурного) программирования. Паскаль был одним
из первых таких языков. По мнению Вирта, язык должен способствовать
дисциплинированному программированию, поэтому, наряду со строгой типизацией, в
Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам
синтаксис автор постарался сделать интуитивно понятным даже при первом
знакомстве с языком.
Тем не менее, первоначально язык имел ряд ограничений:
невозможность передачи функциям массивов переменной длины, отсутствие
нормальных средств работы с динамической памятью, ограниченная библиотека
ввода-вывода, отсутствие средств для подключения функций, написанных на других
языках, отсутствие средств раздельной компиляции и т. п. Подробный разбор
недостатков языка Паскаль того времени был выполнен Брайаном Керниганом в статье «Почему
Паскаль не является моим любимым языком программирования»(эта статья вышла в
начале 1980-х, когда уже существовал язык Модула-2, потомок Паскаля,
избавленный от большинства его пороков, а также более развитые диалекты
Паскаля). Некоторые недостатки Паскаля были исправлены в ISO-стандарте 1982
года, в частности, в языке появились открытые массивы, давшие возможность
использовать одни и те же процедуры для обработки одномерных массивов различных
размеров.
Pascal в наши дни
В данный момент, компьютер стал неотъемлемой частью жизни
каждого из нас, а так же необходимостью во многих видах профессий. Именно
поэтому изучение информатики приобретает такое большое значение. Сегодня в школах начинают
изучение программирования с Паскаля, языка программирования, позволяющего
писать самые простые программки, но которые идеально подходят для стартового
обучения. Выпускники школ должны обладать высоким уровнем использования
современных технологий для исполнения будущих начинаний. Язык Pascal относительно
прост в изучении, довольно ясен и логичен и, будучи первым изучаемым языком
программирования, приучает к хорошему стилю, воспитывает дисциплину
структурного программирования.
Алфавит
и словарь языка Паскаль
Язык – совокупность символов, соглашений и правил, используемых
для общения. При записи алгоритма решения задачи на языке программирования
необходимо четко знать правила написания и использования языковых единиц.
Основой любого языка является алфавит (набор знаков, состоящий из букв,
десятичных и шестнадцатеричных цифр, специальных символов).
Алфавит Паскаля составляют:
-
прописные и
строчные буквы латинского алфавита:
A, B, C…Y, Z, a, b, c…y, z;
-
десятичные цифры:
0, 1, 2…9;
-
специальные
символы:
+ - * / > < = ; # ‘ , . : {} [] ( ) ;
-
комбинации
специальных символов, которые нельзя разделять пробелами, если они используются
как знаки операций:
«:=», «..», «<>», «<=», «>=», «{}».
Неделимые последовательности знаков
алфавита образуют слова, отделенные друг от друга разделителями. Ими могут быть
пробел, комментарий или символ конца строки. Словарь Паскаля можно разделить на
три группы слов: зарезервированные слова, стандартные идентификаторы и
идентификаторы пользователя.
Зарезервированные слова (см. табл. 1.1) имеют фиксированное написание
и навсегда определенный смысл. Они не могут изменяться программистом, и их
нельзя использовать в качестве имен для обозначения величин.
Идентификатор – имя (identification – установление
соответствия объекта некоторому набору символов). Для обозначения определенных
разработчиками языка функций, констант и т.д. служат стандартные
идентификаторы, например, Sqr, Sqrt и т.д. В этом примере Sqr вызывает функцию,
которая возводит в квадрат данное число, а Sqrt – корень квадратный из
заданного числа. Пользователь может переопределить любой стандартный
идентификатор, но чаще всего это приводит к ошибкам, поэтому на практике их
используют без изменения. Идентификаторы пользователя – это те имена, которые
дает сам программист. При записи программ нужно соблюдать общие правила
написания идентификаторов:
Идентификатор начинается только с буквы
(исключение составляют специальные идентификаторы меток).
Идентификатор может состоять из букв, цифр и знака подчеркивания.
Максимальная длина – 127 символов.
При написании идентификаторов можно
использовать прописные и строчные буквы.
Между двумя идентификаторами должен стоять хотя бы один пробел.
Таблица 1.1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
До
тех пор, пока не выполнится
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Исследовательская часть
Изучив большое количество материала и прочитав много статей в
интернете, я приступил к написанию своей игры. Данное занятие заняло у меня
большое количество времени, из-за малой практики. Изначально в моей работе было
много ошибок и недочетов, но исправив их, я готов представить игру
«Крестики-нолики».
Правила игры в «Крестики-нолики»
Игроки по очереди ставят на свободные клетки поля 3х3 знаки
(один всегда крестики, другой всегда нолики). Первый, выстроивший в ряд 3 своих
фигуры по вертикали, горизонтали или диагонали, выигрывает. Первый ход делает
игрок, ставящий крестики.
Обычно по завершении партии выигравшая сторона зачёркивает чертой
свои три знака (нолика или крестика), составляющих сплошной ряд.
Описание алгоритма:
1.
Отрисовать
игровое поле.
2.
Позволить
сделать шаг игроку.
3.
Проверить
выиграл ли кто-то.
4.
Если да —
выиграл текущий игрок, иначе вернуться к шагу 1.
Управление:
Левая кнопка мыши — установить крестик / нолик.
Алгоритм:
uses GraphABC;
const
N = 2;
Z = '0';
K = 'X';
Size = 200;
Border = 1;
Sx = 1200;
Sy = 70;
var
Matrix: array [0..N, 0..N] of char;
Player1: boolean;
procedure Draw();
procedure DrawZ(i, j: integer);
begin
SetPenColor(clCyan);
SetPenWidth(4);
var size2 := Size div 2;
DrawCircle((i + 1) * Size - size2, (j + 1) * Size -
size2, Round(size2 * 0.7));
end;
procedure DrawK(i, j: integer);
procedure RLine(x, y, x1, y1: real):=Line(Round(x), Round(y), Round(x1), Round(y1));
begin
SetPenColor(clPink);
SetPenWidth(4);
var size2 := Size div 2 * 0.3;
var cx1 := i * Size + size2;
var cy1 := j * Size + size2;
var cx2 := (i + 1) * Size - size2;
var cy2 := (j + 1) * Size - size2;
RLine(cx1, cy1, cx2, cy2);
RLine(cx1, cy2, cx2, cy1);
end;
begin
ClearWindow(clBlack);
if Player1 then SetWindowCaption('Ходит первый игрок') else SetWindowCaption('Ходит второй игрок');
for var i := 0 to N do
for var j := 0 to N do
begin
SetPenColor(clLightBlue);
SetPenWidth(1);
DrawRectangle(i * Size + Border, j
* Size + Border, (i + 1) * Size - Border, (j + 1) * Size - Border);
if Matrix[i, j] = Z then
DrawZ(i, j)
else if Matrix[i, j] = K then
DrawK(i, j);
end;
Redraw();
end;
function Won(c: char): boolean;
var
count: byte;
begin
Result := false;
for var i := 0 to N do
begin
count := 0;
for var j := 0 to N do
if Matrix[i, j] = c then Inc(count);
if count = 3 then Result
:= true;
end;
if not Result then
begin
for var i := 0 to N do
begin
count := 0;
for var j := 0 to N do
if Matrix[j, i] = c then Inc(count);
if count = 3 then Result
:= true;
end;
if not Result then
begin
count := 0;
for var i := 0 to N do
if Matrix[i, i] = c then Inc(count);
if count = 3 then Result
:= true;
if not Result then
begin
count := 0;
for var i := 0 to N do
if Matrix[N - i, i] = c then Inc(count);
if count = 3 then Result
:= true;
end;
end;
end;
end;
function IsFull(): boolean;
begin
Result := true;
for var i := 0 to N do
for var j := 0 to N do
if (Matrix[i, j] <> Z) and (Matrix[i,
j] <> K) then
begin
Result := false;
break;
end;
end;
procedure MouseDown(x, y, mb: integer);
procedure ShowWinner(s: string; c: Color);
begin
SetWindowCaption('Результат игры');
Sleep(2000);
SetWindowSize(Sx, Sy);
CenterWindow();
ClearWindow(clBlack);
SetFontSize(16);
SetFontStyle(fsBold);
SetFontColor(c);
DrawTextCentered(0, 0, Sx, Sy, s);
Redraw();
Sleep(2000);
Halt();
end;
begin
var i := x div Size;
var j := y div Size;
if (Matrix[i, j] <> Z) and
(Matrix[i, j] <> K) then
begin
if Player1 then Matrix[i, j] := Z else Matrix[i,
j] := K;
Draw();
var winnerExists := Won(Z) or
Won(K);
if winnerExists then
if Player1 then ShowWinner('Игрок первый победил!', clLightBlue) else ShowWinner('Игрок второй победил!', clLightBlue);
if IsFull() and not winnerExists
then ShowWinner('Ничья!', clOrange);
Player1 := not Player1;
end;
end;
begin
var Size2 := Size * 3;
SetWindowIsFixedSize(true);
SetWindowSize(Size2, Size2);
CenterWindow();
LockDrawing();
Player1 := true;
Draw();
OnMouseDown := MouseDown;
end.
(фото получившейся игры см. в приложении 2.1)
Заключение
В конечном итоге у нас получилась популярная игра «Крестики-нолики».
Я выполнил свою цель и моя гипотеза подтвердилась: «На
алгоритмическом языке Pascal вполне возможно создать простейшую игру». За
время выполнения этого проекта я научился пользоваться программой PascalABC.NET, создавать разные алгоритме на языке Pascal
и получил огромный опыт, который
пригодится мне в моей будущей работе программиста.
Список источников
https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82,_%D0%9D%D0%B8%D0%BA%D0%BB%D0%B0%D1%83%D1%81#/media/%D0%A4%D0%B0%D0%B9%D0%BB:Niklaus_Wirth,_UrGU.jpg
https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82,_%D0%9D%D0%B8%D0%BA%D0%BB%D0%B0%D1%83%D1%81
https://progmatem.ru/pascal/vvedenie-v-pascal.html
https://nsportal.ru/shkola/informatika-i-ikt/library/2017/03/24/animatsiya-v-pascal-abc
https://ru.wikibooks.org/wiki/%D0%9A%D0%BD%D0%B8%D0%B3%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0/%D0%9A%D0%BD%D0%B8%D0%B3%D0%B0_%D0%B8%D0%B3%D1%80_%D0%BD%D0%B0_PascalABC.Net
https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B5%D1%81%D1%82%D0%B8%D0%BA%D0%B8-%D0%BD%D0%BE%D0%BB%D0%B8%D0%BA%D0%B8
Приложения

Приложение 2.1, фото игры

Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.