Четверг, 09.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Графика(помогите девушке закончить задачу)
MademyazelДата: Среда, 20.05.2009, 05:27 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 3
Репутация: 0
Замечания: 0%
Статус: Offline
В общем задача такая: в центре экрана сидит жучок. Он может двигаться вперед, назад и поворачивать на определенный угол(хотя бы 90 и 45). при движении прорисовывается пройденный им путь.
Вот что я сделала:создала спрайт, который находится(пока что) в точке(0,0).
НО я не использовала стандартный модуль Graph(уж слишком он тормозит), использовала режим 320Х200 точек, 256 цветов,т.к. стандартные драйвера не поддерживают выбранный режим,установила его напрямую через VideoBIOS.
И теперь загвоздка в том,что не подключены графические драйверы, и я не могу пользоваться стандартными процедурами рисования точки,линии, окружности и.т.д. Как прорисовывать путь за моим спрайтом?И как заставить его двигаться(есть одна идея:создать процедуры движ., но каким образом представления не имею)?
Если есть другой путь решения этой задачи(без использования спрайта) - напишите.
Могу поместить то, что сделала. Если нужно.
P.s. Я очень долго мучаюсь с этой задачей.А времени осталось до понедельника!надеюсь кто-нибудь мне поможет, т.к. вы - моя последняя надежда. cry


Сообщение отредактировал Mademyazel - Среда, 20.05.2009, 05:32
 
SeqularДата: Четверг, 21.05.2009, 20:19 | Сообщение # 2
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Mademyazel, Если работать напрямую с видеобуфером, то должна быть возможность рисования точки произвольного цвета. А затем см. алгоритмы Брезенхама и т.д...
Ну а если без спрайтов, то собственно LineTo используйте, только придумать нужно как рисовать модель жука. И вообще, что из себя представляет жук? Могу предложить способ, конечно не очень хороший, но как вариант:
1) Напишите процедуру рисования жука в точке x,y. (ну типа пара окружностей и лапки).
2) Путь придется запоминать в динамические переменные (^record x, y: integer).
3) Используете 2 страницы, на фоновой - считываете все точки из дин. памяти и по ним рисуете линию, затем вызываете процедуру рисования жука в текущем месте.
4) Делаете активной эту страницу.
5) При перемещения жука в какую-либо точку - создаете новую переменную, записываете координаты, фоновую страницу очищаете, перерисовываете заново. Делаете ее активной.. И т.д.


Поддерживаю также проект сообщество молодых сисадминов
 
CKPOMH9IrAДата: Воскресенье, 24.05.2009, 22:23 | Сообщение # 3
Новичок
Группа: Пользователи
Сообщений: 2
Репутация: 0
Замечания: 0%
Статус: Offline
ОооОО)) ярослава))) а ты мне можешь помочь с описание переменных в тетрисе?) м?
 
MademyazelДата: Понедельник, 25.05.2009, 06:43 | Сообщение # 4
Новичок
Группа: Пользователи
Сообщений: 3
Репутация: 0
Замечания: 0%
Статус: Offline
Жук - программно выводимое изображение, которое может иметь сложную форму и передвигаться поверх фона, не затирая его, т.е. спрайт. Sequral, вы оказались правы!!!! Я создала массив для экрана и просто передаю данные о цвете в определенную точку экрана! А линию можно создать циклом. Теперь осталось решить проблему с движением спрайта...
 
SeqularДата: Понедельник, 25.05.2009, 08:51 | Сообщение # 5
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Mademyazel, Может поделитесь кодом? Думаю, не только мне интересно посмотреть )

Поддерживаю также проект сообщество молодых сисадминов
 
MademyazelДата: Вторник, 26.05.2009, 03:58 | Сообщение # 6
Новичок
Группа: Пользователи
Сообщений: 3
Репутация: 0
Замечания: 0%
Статус: Offline
Seqular, конечно. Только буду выводить частями, а то там многовато...))))
Вот первая часть:

program Spraitik;
Uses Dos,Crt,bmpread{модуль для чтения из BMP-файла,там всего две процедуры.напишу позже},
pal{модуль для работы с 256-цветной палитрой тоже попозже напишу)))};
Const Xr = 20; Yr = 20;{размера спрайта в точках}
ProzrachColor = $FF;{прозрачный цвет(белый), чтобы не полностью выводить картинку}
Type
MasSpriteRazmer = array[0..Yr-1,0..Xr-1] of byte;
{массив равный по размеру спарайтовому}
SpriteType = record
x,y :word;{текущие координаты спрайта}
dx,dy :integer;{приращение координат}
Kartinka :^MasSpriteRazmer;{массив, куда будет записываться изображение}
ZadniiFonSpr:^MasSpriteRazmer;{массив для сохранения фона под спрайтом}
end;
EkranType = array[0..199,0..319] of byte ;{двумерный массив для экрана, как я уже писала я не использую модуль Graph}
Var
Sprite: SpriteType; {спрайт}
r : registers; {dдля вызова прерывания BIOS}
Ekran : ^EkranType; {экран}
p :array[0..767]of byte;{этот массив для работы с палитрой}

{********************ПРОЦЕДУРЫ*****************************}
Procedure SaveFonSprite;{Сохраняет фон под спрайтом в массиве}
var i,j:word;
begin
for j := 0 to Yr-1 do
for i := 0 to Xr-1 do
with Sprite do
ZadniiFonSpr^[j,i] := Ekran^[j+y,i+x];
end;

Procedure VosstFon; {восстанавливает фон под спрайтом}
var i,j:word;
begin
for j := 0 to Yr-1 do
for i := 0 to Xr-1 do
with Sprite do
Ekran^[j+y,i+x] := ZadniiFonSpr^[j,i];
end;
Procedure SozdatFon; {создает основной фон на экране}
var i,j:word;
begin
for j := 0 to 199 do
for i := 0 to 319 do
Ekran^[j,i] := lo(2);
end;
Procedure PutPixel(x,y:word; c:byte); {рисует точку на экране: c -цвет точки, х,у - координаты}
begin
mem[SegA000:x+y*320]:=c;{mem - массив для прямого доступа к видеопамяти}
end;
Кстати, точку(как я уже писала) можно выводить и через массив, который я создала для экрана:
Ekran^[x,y]:=lo(15){x,y - координаты точки, 15 - цвет}
Это только начало остальное чуть-чуть позже smile

Сообщение отредактировал Mademyazel - Вторник, 26.05.2009, 04:04
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;