Как сделать змейку в паскале
Мастер-класс: "Создание мини-игр на языке С++". Архив содержит презентацию и исходный код игры "Змейка" на языке С++.
// библиотека, нужна для использования функции Sleep()
// библиотека, нужна для использования функций kbhit() и getch()
// шаблон для цвета
int snake_size, change_x, change_y, coordinates_x [ 1000 ] , coordinates_y [ 1000 ] , food_x = - 1 , food_y = - 1 ;
snake_size - размер змейки
change_x, change_y - в какую сторону движется змейка
coordinates_x[1000], coordinates_y[1000] - массивы, хранящие координаты частей тела змейки
char symbol, a [ 1000 ][ 1000 ] ;
symbol - хранит в себе ASCII код нажатой клавиши
a[1000][1000] - наша таблица, в которой происходит вся игра
const int N = 13 , M = 17 , INTERVAL = 200 ;
N - размер таблицы, а именно высота
M - ширина таблицы
INTERVAL - интервал в миллисекундах, через каждый этот промежуток времени змейка будет передвигаться
\u00a0\u00a0\u00a0i, j, k: Integer;
\u00a0\u00a0\u00a0a, b: Array [1..5] of Array [1..5] of Integer;
BEGIN
\u00a0\u00a0\u00a0For i := 1 to 5 do\u00a0
\u00a0\u00a0\u00a0For j := 1 to 5 do Read(a[i][j]);
\u00a0\u00a0\u00a0k\u00a0:= 1;
\u00a0\u00a0\u00a0For i := 1 to 5 do
\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0If (Odd(i)) then
\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0For j := 5 downto 1 do begin
\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0b[i][j] := a[((k-1) div 5)+1][((k-1) mod 5)+1]; Inc(k); End
\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Else\u00a0
\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0For j := 1 to 5 do begin
\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0b[i][j] := a[((k-1) div 5)+1][((k-1) mod 5)+1]; Inc(k); End; \u00a0
\u00a0\u00a0\u00a0For i := 1 to 5 do begin
\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0For j := 1 to 5 do Write(b[i][j]:2, ' ');
\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Writeln; End;
END. ">]" data-testid="answer_box_list">
VAR
i, j, k: Integer;
a, b: Array [1..5] of Array [1..5] of Integer;
BEGIN
For i := 1 to 5 do
For j := 1 to 5 do Read(a[i][j]);
k := 1;
For i := 1 to 5 do
If (Odd(i)) then
For j := 5 downto 1 do begin
b[i][j] := a[((k-1) div 5)+1][((k-1) mod 5)+1]; Inc(k); End
Else
For j := 1 to 5 do begin
b[i][j] := a[((k-1) div 5)+1][((k-1) mod 5)+1]; Inc(k); End;
For i := 1 to 5 do begin
For j := 1 to 5 do Write(b[i][j]:2, ' ');
Writeln; End;
END.
Новые вопросы в Информатика
1. Написать программу, которая вычисляет S:S=75*78*81*. *93*962. Написать программу, Вычисляющуюзначение функции y=3cos*x+8x" с шагом 0,2 наинтервале … от 0 до 3.сделайте пж срочно .
1. Что такое алгоритм? 2. Какую команду нужно выполнить, чтобы открыть новое окно в программе? 3. Для чего нужен язык программирования Python? 4. Како … во назначение функции print?
Cрочно!Яна нашла в любимом блоге красивую блузку и решила попытаться сшить такую же самостоятельно. Для этого ей понадобилось разрезать ткань шириной … в a см и длиной в b см на четыре прямоугольника.Она отметила точку на расстоянии x см вправо и y см вверх от левого нижнего угла и разрезала ткань через отмеченную точку параллельно сторонам.Даны числа a, b, x, y. Выведи площадь каждого из получившихся отрезов в столбик (в произвольном порядке).Ввод Вывод10 3920 913 217 49Примечание: в таком примере у Яны получились прямоугольники с размерами 3х13, 7х13, 7х3 и 7х7.
Тело змейки будет состоять из каких-либо символов, перемещаемых вслед за ведущим символом – головой змеи.
Таким образом, алгоритм движения змейки будет заключаться в следующем:
1. Вычислить новые координаты головы змеи (на нашем рисунке – это нулевой элемент) по следующему правилу:
2. Переместить первое звено на место предыдущего нулевого звена, второе звено – на место предыдущего первого и т.д.
Отлавливать нажатие клавиш управления курсором мы будем при помощи процедуры
ReadKey из модуля Crt .
Координаты X и Y будем хранить в двух различных массивах. Длина змейки будет
определяться количеством элементов в этих массивах.
TSnakeCoords= Array [0..SNAKE_LEN] Of Byte;
X, Y : TSnakeCoords; c : Char;
NewX, NewY : Integer;
For i:=0 To SNAKE_LEN Do
Программирование на языке Pascal
For i:=0 To SNAKE_LEN Do
For i:=SNAKE_LEN DownTo 1 Do
Программирование на языке Pascal
Модуль 5. Строки и многомерные массивы
Представление строк в Pascal
Мы уже сталкивались с типом данных, способным хранить один символ. Это тип данных Char . Но в прикладных задачах часто приходится иметь дело не с одним символом, а с целыми словами и предложениями (вспомним хотя бы текстовый редактор). Можно,
конечно, работать со строками, объявив массив символов, например, так:
StringType= Array [1..StringLen] Of Char;
Но такой подход зачастую неудобен, поскольку требует непосредственного написания всех процедур манипулирования со строками (копирование строчек, поиск подстроки, извлечение подстроки и т.д.). Поэтому был введен специальный тип данных для работы со строками: String . По сути дела, строковый тип данных – это тот же массив символов, однако для него предусмотрены специальные процедуры и функции, облегчающие разработку программ.
Максимальная длина строки для типа данных String ограничена 255-ю символами. Это ограничение было снято в реализации языка Object Pascal, используемой в среде Delphi. Все символы строки нумеруются от 1 до длины строки. В нулевом символе хранится символ, с кодом, равным длине строки. Так, например, если строка содержит 32 символа, то нулевой символ будет пробелом (' '), так как его код равен 32.
В остальном, использование переменных строкового типа ничем не отличается от
использования тех переменных, которые мы использовали ранее. Приведем пример:
WriteLn('Введите ваше имя'); ReadLn(UserName);
WriteLn('Рады приветствовать, ', UserName);
Операции над строками
Действительно, если у нас есть две строки
S1:='Маша'; S2:=' ела кашу.';
Сравнение строк происходит следующим образом: если одна из сравниваемых строк имеет большую длину, то она считается больше той, что меньше по длине. Если длины строк одинаковы, то происходит посимвольное сравнение – знак неравенства будет
Программирование на языке Pascal
совпадать со знаком неравенства несовпадающих символов. При этом символ в нижнем регистре считается больше соответствующего символа в верхнем регистре (например, ' m ' > ' M '). Общее же правило при сравнении символов такое: среди двух сравниваемых символов тот из них считается больше, чей код является больше. Приведем примеры сравнения строк
' Turbo Pascal ' > ' Pascal '
Для того, чтобы узнать длину строки, хранящейся в переменной строкового типа, можно использовать два подхода:
1. Вычислить код символа, находящегося на нулевой позиции, например
WriteLn('Вы ввели строку, длиной ', L);
В этом примере мы использовали функцию Ord для получения кода нулевого символа строки S[0] .
2. Использовать функцию Length .
WriteLn('Вы ввели строку, длиной ', L);
Попробуем применить полученные знания для подсчета количества гласных и согласных символов в строке, состоящей из букв английского алфавита.
Для этой цели нам потребуется в введенной строке проверить каждый символ на принадлежность множеству гласных или согласных символов. Символы строки будем перебирать в цикле при помощи параметра, изменяющегося от 1 до длины строки. Поскольку при проверке строк регистр символов важен, то, чтобы нам отдельно не проверять на равенство верхнему и нижнему регистру символов, приведем проверяемые символы к верхнему регистру при помощи функции UpCase (она не работает для
1. Постановка задачи
3. Теоретический материал
4. Структурное описание разработки
5. Функциональное описание
7. Список используемой литературы
1. Постановка задачи
Игровое поле, координаты еды и частей змейки, длина змейки, рисование змейки и еды, выход за пределы поля.
3. Теоретический материал
Данная контрольная работа была выполнена в текстовом режиме TurboPascal.
При работе в текстовом режиме экран монитора разбивается на строки, строки — на позиции, в каждую из которых можно поместить один символ. Положение символа на экране задается двумя координатами — вертикальной X и горизонтальной Y. X — это номер позиции в строке, а Y — номер строки. Модуль CRT содержит описания констант, процедур и функций, обеспечивающих управление текстовым режимом работы монитора.
ClrScr Очищает экран или окно и помещает курсор в верхний левый угол.
Delay ( D : Word ) Приостанавливает работу программы на указанное число D миллисекунд. Практически время задержки зависит от тактовой частоты процессора.
GotoXY ( X , Y : Byte ) Перемещает курсор в позицию X строки Y экрана.
TextBackGround ( Color : Byte ) Устанавливает цвет фона.
TextColor ( Color : Byte ) Устанавливает цвет символов.
В программе используются несколько процедур для реализации поставленной задачи.
4. Структурное описание разработки
При запуске программы выполняются следующие действия:
-открывается контекстное меню со справкой об управлении передвижением тела змейки
-предлагается перейти к игре
-далее появляется появляется зеленое поле, с произвольными координатами прорисовывается еда и отображается змейка по начальным параметрам, которая начинает двигаться вправо.
Управление осуществляется клавишами:
Координаты каждой части змейки хранятся в матрице, при нажатии определенной клавиши они меняются и змейка движется.
При совпадении координат еды и начала змейки (поедание еды змейкой) координаты еды произвольно меняются, длина змейки увеличивается на один сегмент.
5. Функциональное описание
В данной программе используются:
Тип данных созданный пользователем:
snakebody: array [1..maxwidth] ofspoint;
Процедуры и функции:
functionchecknext (x:integer; y:integer):boolean;
В ходе проделанной работы был изучен текстовый режим языка программирования TurboPascal, рассмотрены и применены процедуры и функции.
Список используемой литературы
2. Павловская Т.А. Паскаль. Программирование на языке высокого уровня — издательство Питер 2008.
Описание презентации по отдельным слайдам:
Управление змейкой кнопками
Координаты для еды
Столкновение змейки с хвостом и стенками
Вывод С помощью встроенных функций и знаний составления алгоритмических конструкций на языке программирования Pascal можно решать не только задачи, но и реализовывать игры различной сложности.
Спасибо за внимание!
Инклюзия в современном обществе и ее роль в социализации
идёт регистрация Трансляция сегодня!
Номер материала: ДБ-657724
Не нашли то что искали?
Вам будут интересны эти курсы:
Оставьте свой комментарий
✅ На балансе занятий — 1
Ответственность за разрешение любых спорных моментов, касающихся самих материалов и их содержания, берут на себя пользователи, разместившие материал на сайте. Однако администрация сайта готова оказать всяческую поддержку в решении любых вопросов, связанных с работой и содержанием сайта. Если Вы заметили, что на данном сайте незаконно используются материалы, сообщите об этом администрации сайта через форму обратной связи.
Все материалы, размещенные на сайте, созданы авторами сайта либо размещены пользователями сайта и представлены на сайте исключительно для ознакомления. Авторские права на материалы принадлежат их законным авторам. Частичное или полное копирование материалов сайта без письменного разрешения администрации сайта запрещено! Мнение администрации может не совпадать с точкой зрения авторов.
Своя змейка, или пишем первый проект. Часть 0
Предисловие
Глава 1. Итак, с чего начнем?
Глава 2. Первые шаги
Подготовим поле нашей игры, начиная с точки входа в нашу программу. Задаем переменные X и Y, размер и буфер окна консоли, и скроем отображение курсора.
Это интересно!
Оператор => называется лямбда-оператор, он используется в качестве определения анонимных лямбда выражений, и в качестве тела, состоящего из одного выражения, синтаксический сахар, заменяющий оператор return. Приведенный выше метод переопределения оператора (про его назначение чуть ниже) можно переписать так:
Создадим класс стен, границы игрового поля. Напишем 2 метода на создание вертикальных и горизонтальных линий, и в конструкторе вызываем отрисовку всех 4х сторон заданным символом. Список всех точек в стенке нам пригодится позже.
Как вы могли заметить для инициализации типа данных Point используется форма Point p = (x, y, ch); как и у встроенных типов, это становится возможным при переопределении оператора implicit, в котором описывается как задаются переменные.
Вернемся к классу Game и объявим поле walls, а в методе Main инициализируем ее.
Все! Можно скомпилировать код и посмотреть, что наше поле построилось, и самая легкая часть позади.
Глава 3. А что сегодня на завтрак?
Добавим генерацию еды на нашем поле, для этого создадим класс FoodFactory, который и будет заниматься созданием еды внутри границ.
Добавляем инициализацию фабрики и создадим еду на поле
Глава 4. Время главного героя
Перейдем к созданию самой змеи, и для начала определим перечисление направления движения змейки.
Теперь можем создать класс змейки, где опишем как она будет ползать, поворачивать. Определим список точек змеи, наше перечисление, шаг на сколько будет перемещаться за ход, и ссылки на хвостовую и головную точки, и конструктор, в котором рисуем змею в заданных координатах и заданной длинны при старте игры.
Осталось вывести ее на экран.
Готово! теперь у нас есть все что нужно, поле огороженное стенами, рандомно появляющаяся еда, и змейка. Пришла пора заставить все это взаимодействовать друг с другом.
Глава 5. Л-логика
Заставим нашу змейку двигаться, напишем бесконечный цикл для считывания клавиш нажатых на клавиатуре, и передаем клавишу в метод поворота змеи
Теперь, перед тем как написать метод движения змейки, надо реализовать взаимодействие головы с едой, стенками и хвостом змеи. Для этого надо написать метод, позволяющий сравнивать две точки на совпадение координат. Переопределим оператор равенства и не равенства, их обязательно нужно переопределять в паре.
Теперь можно написать метод, который будет проверять совпадает ли интересующая нас точка с какой нибудь из массива стен.
И похожий метод проверяющий не совпадает ли точка с хвостом.
И методом проверки съела ли еду наша змейка, и сразу делаем ее длиннее.
теперь можно написать метод движения, со всеми нужными проверками.
Вот и все! Наша змейка в консоли закончена и можно поиграть.
Заключение
Мы посмотрели как можно реализовать первую простенькую игру с небольшим использованием ООП, научились перегружать операторы, посмотрели на кортежи и лямбда оператор, надеюсь это было полезно!
Это была пилотная статья, и если вам понравилось, я напишу про реализацию змейки на Unity.
Всем удачи!
Как сделать игру змейка в паскале
По скольку сам уже долго изучаю pascal и владею достаточными знаниями, хочу поделиться ими с вами. И так, начнем. Не знаю, много ли 118 строк кода для первого урока, но писать нам их придется. Не волнуйтесь, каждые 5-10 строчек я объяснять не буду, объясню лишь самое главное.
type
TDirection = (None, Left, Right, Up, Down);
var x,t,y,i,z,xr,yr,prin1,prin2,prin3,prin4,prin5,k,s4et,prin6: integer;
Direction :TDirection;
xs,ys,bufx,bufy:array[1..200]of integer;
procedure Circl;
begin
SetBrushColor(clBlack);
circle(x,y,r);
end;
procedure rshar ;
begin
xr:=Random(WindowWidth) ;
yr:=Random( WindowHeight);
end;
procedure rshar2;
begin
SetBrushColor(clYellow);
circle(xr,yr,r);
end;
procedure pause;
begin
for i:=1 to 1 do
begin
Circl;
rshar2;
ClearWindow;
rshar2 ;
prin1:=(xr-x+r)*(xr-x+r)+(yr-y)*(yr-y) ;
prin2:=(xr-x-r)*(xr-x-r)+(yr-y)*(yr-y) ;
prin3:=(xr-x)*(xr-x)+(yr-y+r)*(yr-y+r) ;
prin4:=(xr-x)*(xr-x)+(yr-y-r)*(yr-y-r) ;
prin5:=R*R;
if (prin1) =WindowWidth then x:=0 end;
Down: begin y:=y+d; if y>=WindowHeight then y:=0 end;
end;
xs[1]:=x;
ys[1]:=y;
for k:=1 to s4et do
begin
bufx[k]:=xs[k];
bufy[k]:=ys[k];
end;
for k:=1 to s4et do
begin
xs[k+1]:=bufx[k];
ys[k+1]:=bufy[k] ;
end;
for k:=2 to s4et do
shar3;
Circl;
end;
end;
begin
rshar;
s4et:=2;
x:=WindowWidth div 2;
y:=WindowHeight div 2;
OnKeyDown:=XP;
CreateTimer(150,pause);
Это уже полностью конец кода. Здесь мы указали все самое основное: движение, поедание, повороты. На этом, я наверно, закончу наш с вами урок. Хотя и уроком это трудновато назвать. Просто много букаф (точнее кода, причем легкого), где мало точных пояснений. А вообще, лучше, поройтесь в коде сами. Я объяснил вам все самое необходимое. Поэкспериментируйте с цветами, переменными и клавишами. (Лично я так освоил pascal). Всем до свидания и до следующих уроков!
Я снова с вами:з
Возвращение легенды. (нет)
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 10.04.2011 |
Размер файла | 286,3 K |
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
1. Постановка задачи
3. Теоретический материал
4. Структурное описание разработки
5. Функциональное описание
7. Список используемой литературы
Игровое поле, координаты еды и частей змейки, длина змейки, рисование змейки и еды, выход за пределы поля.
3. Теоретический материал
Данная контрольная работа была выполнена в текстовом режиме Turbo Pascal.
ClrScr Очищает экран или окно и помещает курсор в верхний левый угол.
Delay(D: Word) Приостанавливает работу программы на указанное число D миллисекунд. Практически время задержки зависит от тактовой частоты процессора.
GotoXY(X, Y: Byte) Перемещает курсор в позицию X строки Y экрана.
В программе используются несколько процедур для реализации поставленной задачи.
4. Структурное описание разработки
При запуске программы выполняются следующие действия:
-открывается контекстное меню со справкой об управлении передвижением тела змейки
-предлагается перейти к игре
-далее появляется появляется зеленое поле, с произвольными координатами прорисовывается еда и отображается змейка по начальным параметрам, которая начинает двигаться вправо.
Управление осуществляется клавишами:
Координаты каждой части змейки хранятся в матрице, при нажатии определенной клавиши они меняются и змейка движется.
При совпадении координат еды и начала змейки (поедание еды змейкой) координаты еды произвольно меняются, длина змейки увеличивается на один сегмент.
5. Функциональное описание
В данной программе используются:
Тип данных созданный пользователем:
snakebody: array [1..maxwidth] of spoint;
Процедуры и функции:
В ходе проделанной работы был изучен текстовый режим языка программирования Turbo Pascal, рассмотрены и применены процедуры и функции.
Читайте также: