![]() |
![]() ![]() |
![]() |
WhiteFang |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Люди, помогите написать пожалуйста змейку, обычную змейку в графическом режиме; без всяких $, ассемблеров и неизвестных вещей начинающему программисту.
Вот начальный код (только это начало и в нём мнооооооооогое не осуществлено):
Ещё такая проблема: если повторяю через репит вывод newt, то границы поля не отображаются, и не выводится процедура snake. |
WhiteFang |
![]()
Сообщение
#2
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
uses crt, graph; Скажите, пожалуйсто, как сделать, чтобы змейка стирала за собой, а не оставляла след? Как сделать, чтобы при врезании в себя, вы проигрывали? Как сделать, чтобы квадритики для собирания появлялись по одному и при их сборе змейка удлинялась? И как сделать, чтобы массив до желтой лиии был? Вроде всё правильно, а всё равно не доходит. И кодом желательно =) Заранее скажу, чтобы вы меня не осуждали, я взял оформление у одного из пользователей форума. |
Бродяжник |
![]()
Сообщение
#3
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Начнем пинать с процедуры Grafika.
1. Почто каждый раз перевычислять getmaxy div N? Даже если цомпутер быстрый, заставлять его без конца делать одно и тоже нехорошо. Объявляем глобальную переменную типа CellSize: byte; (делать ее больше не имеет смысла), после установки графического режима один раз вычисляем CellSize := GetMaxY div N; и радостно пользуемся. 2. Почто каждый раз перерисовывать все поле? Перерисовывать в цикле имеет смысл всего несколько клеток: - ту клетку, куда переместилась голова змейки; - если змейка не растет, тогда нужно перерисовать и клетку, откуда "уполз" ее хвост. - если на этом такте появился бонус, то и его тоже надо нарисовать. 3. Поэтому надо следить, где находится змейка. Если бы змейка всегда росла и никогда не двигала свой хвост, было бы достаточно знать координаты ее головы. А так придется создать отдельный массив для хранения координат всех клеток, занятых змейкой. Нечто типа Type TSnakeCell = record При этом координаты "хвоста" находятся в элементе Snake[1], а "голова" по мере роста змейки движется в сторону увеличения индекса. Это значит, что нужна еще некая переменная Head: word; которая будет указывать на положение головы: Snake[Head]. Если змейка растет, то все просто: ... А если не растет, то тоже просто: ... |
WhiteFang |
![]()
Сообщение
#4
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Бродяжник, конечно спасибо тебе, но тут используется тип рекорд, который я нифига не знаю.
Мне понятней через матрицу было бы =). А насчёт графики надо будет исправить. Спасибо. |
Бродяжник |
![]()
Сообщение
#5
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну хорошо, делаем через матрицу.
Вместо Type TSnakeCell = record делаем Var Snake: Array[1..1000] of array[1..2] of byte; вместо Snake[Head].x := NewX; делаем Snake[Head][1] := NewX; Вот и матрица, хотя imho это менее удобочитаемо. А от хранения всего тела змейки в отдельном массиве все равно никуда не деться, если есть желание, чтобы она могла двигаться. А вообще надо просить дядю Lapp'а, чтобы он дописал свои лекции по змееводству. Сообщение отредактировано: Бродяжник - 22.12.2006 15:17 |
WhiteFang |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Цитата А от хранения всего тела змейки в отдельном массиве все равно никуда не деться, если есть желание, чтобы она могла двигаться. Так у мя змейка двигается, но за собой не стирает. |
Aerophobic |
![]()
Сообщение
#7
|
Гость ![]() |
uses Sunit,crt,graph; А теперь сам модуль Sunit unit sunit; как откомпилируешь, в папке с игрой должен быть пустой файл Hiscore.txt, модуль Sunit.tpu, модуль EGAVGA.BGI, иначе функция сохранения рекордов корректно работать не будет. Правда есть один баг, когда поворачиваешь, невозможно повернуть сразу же ещё раз, пока змейка не пройдет минимум 1 клетку. Да и размеры клеток фиксированы (10 пикселей) |
APAL |
![]()
Сообщение
#8
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
Мда... через 7 лет тема была реанимирована...
-------------------- |
Гость |
![]()
Сообщение
#9
|
Гость ![]() |
Скажите, пожалуйсто, как сделать, чтобы змейка стирала за собой, а не оставляла след? Как сделать, чтобы при врезании в себя, вы проигрывали? Как сделать, чтобы квадритики для собирания появлялись по одному и при их сборе змейка удлинялась? И как сделать, чтобы массив до желтой лиии был? Вроде всё правильно, а всё равно не доходит. И кодом желательно =) Заранее скажу, чтобы вы меня не осуждали, я взял оформление у одного из пользователей форума. [/quote] Я попробовал сделать для ячеек наличае занятости в проге с роботами думаю как идея поможет |
![]() ![]() |
![]() |
Текстовая версия | 10.09.2024 18:24 |