Program Mih;
uses Graph,Crt;
var qq,Color,Gd,Gm: Integer;
begin
Gd := MCGA;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
While qq<55 DO
BEGIN
Color:=55;
qq:=qq+1;
mem[$A000:900+qq]:=Color;
END;
readln;
CloseGraph;
end.
Материал про графику на Pascal
Задали значит движ изображения зделать:confused:
Хоть на паскале нечё не зделаеш хочу блеснуть перед уч
Или названия опрат интр напишите напр заливка
области экрана или функ я в Helpe о них узнаю Pliz!!!!:D
______________________
Разум сила
Собственно чего хочешь то? Функции в справки расписанны. Модуль graph.
Движение делается двумя путями. Первый полная перерисовка.
Вторая частичная перерисовка.
Можно спрайтовый движек сделать. Набор изоброжений выводиться на экран. Тем самым создается анимация. Правда если делать на обычном Borland Pascal памяти на многое не хватит.
Можно и 3D замостить - правда тут сложно все ручками придеться делать, а вы у нас бело ручка?
Если будут идеи. То могу рассказать как сделать.
с паскалем знаком смутно
но все лог опер знаю
А 3D там лайнами(линиями) придёться делать или
Pascal там обычный спраитами как говориш не выдит
И ещё а как всмысле где описание есть там же обший Help мне придёться чтоли все функции паскаля просмотреть
Или там справочник есть где то?
А я как раз не белоручка с уд сделаю хоть 3D
Графу мы там где учусь непроходили лиш задания сказали на семестр поэтому пока я ноль по ней
А паскаль у нас вобще Turbo Pascal
А белоручка обижаеш еслиб англ знал игру бы с молотил что касаеться лиш логики я отлично:D
Частичная перерисовка работает быстрее чем полная. До определенного придела, потом лучше уже полную перерисовку делать. Частичная перерисовка позволяет сделать анимацию на стандартных функциях.
Входишь в хелп, там можно найти описание юнита "graph", со всеми функциями. Help давным давно уже существует в русском виде.
Спрайтами тоже можно рисовать. Знакомый рассказывал что мортолкомбот делал. И ничего все работало.
Другой знакомый делал змейку. Прикольно у него было выводил квадратики, с заданной текстурой. Змейка была в сеточку. А в качестве приманки зайчик.
Если будешь делать 3D, то стандартные функции позволят выводить только провлочный каркас. Хотя можно полигоном нарисовать и закрашенную часть.
А вот если самому написать все функции начиная от вывода линии и триугольника. То там можно уже большее сделать.
Разница между Turbo и Borland не велика. Мне просто последний больше нравиться. =)
Так, что главное это идея. А как реализовать придумую. Ты вообще что хочешь сделать?
но медленно, кораблик должен утонуть преже Потом всё повторяеться по циклу.
цикл прекратиться нажатием Enter
Конечно сложно но в иделе что хочу:cool:
Спасибо за помощь теперь всё получиться.
good
И ещё на последок прямое обрашение к видео памяти в Graph
врятли говориться?
А если нет то где можно посмотреть про это.
Скорость люблю.:o
mem[$A000:y*Width+x]:=Color
Символ $ - означает шестнадцатеричное число
mem доступ к памяти
mem[сегмен:смещение]
A000:0 адресс видео памяти, в графическом режиме.
B800:0 в текстовом
Предпочтителен режим MCGA - 320х200 на 256 цветов. Так, как в таком режиме один байт соответствует одному пикселю.
А дальше реализуешь свои алгоритмы вывода изоброжения.
Спасибо:rolleyes:
Попробовал пример про доступ в память но
Color не цвет меняет а дистанцию между рисованием вроде
Ставил 255 сплошная линия меньше штриховка
А цвет как назло не меняеться:o
Суть нарисовать просто линию
Менял Color но
меняя размер Color лиш определяш различную штриховку но цвет как то странно меняеться
Вчём ошибка
Причём если поставитьColor в 255 то никакой штриховки а линия жёлтая:eek:
Код:
так как если заменить здесь Detect на другой(тот) формат то закраска экрана произойдёт неполностью
а я не зебру рисую.
Код:
Program Mih;
uses Graph,Crt;
var qq,Color,Gd,Gm: Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
While qq<2255 DO
BEGIN
Color:=255;
qq:=qq+1;
mem[$A000:900+qq]:=Color;
END;
readln;
CloseGraph;
end.
uses Graph,Crt;
var qq,Color,Gd,Gm: Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
While qq<2255 DO
BEGIN
Color:=255;
qq:=qq+1;
mem[$A000:900+qq]:=Color;
END;
readln;
CloseGraph;
end.
[color=red]Для оформления кода используй специальные теги. Модератор.[/color]
Доступ к видео памяти используется, совместно с установкой видео режима, через биос.
К примеру
Код:
{Инициализация видео режима}
asm
mov ax,13h
int 10h
end;
{Вывод графики}
{Возврат к стандартному тестовому режиму}
asm
mov ax,03h
int 10h
end;
asm
mov ax,13h
int 10h
end;
{Вывод графики}
{Возврат к стандартному тестовому режиму}
asm
mov ax,03h
int 10h
end;
а дальше уже писать в видеопамять
Но совместном его использованием с другими языками не пробовал (оптимезацией не увлекался).:o
Пожалуста напишите полный код рисования таким методом линии.
Очень прошу если не сложно.:(
в хелпе турбо паскаля все написано
Там чёнибудь надо сообщять паскалю мол Щяс будет использоваться Assembler там какие нибудь деретивы или он в него встроен.
И как обычные операторы Pascal вот это можно использовать что вы мне посоветовали немного выше
Или что там надо зделать чтоб в Pascal замостить это:confused:
Непробовал неразу если задаю тупые вопросы извините
работает не разу не совмещял
А потом то что хочу потребует скорости и моих мозгов.:D
кстати вы не особо ускорите программу злоупотребляя такими вставками ))
рисовать графики в видео режиме можно и одними средствами паскаля - будет проще и не хуже (ну это правда какая перед вами задача стоит)
у меня нет под рукой паскаля но я точно помню что нужные процедуры для элементарных действий ( как там перейти в видео режим нарисовать точку прямую) есть в индегрированом хелпе турбо паскаля )))
почитайте там
Но совместо, использовать с вот таким вот кодом установки видео режима не удастся. Ровна как и обращение к видео памяти установив режим из паскаля.
Ассемблер в паскале использовать просто, деректива asm
Код:
begin
{код на паскале паска}
asm
{код на ассемблере}
end;
{код на паскале паска}
end
{код на паскале паска}
asm
{код на ассемблере}
end;
{код на паскале паска}
end
Graph работает быстро. Хотя у меня код работает раза в 4-5 быстрее.
Асм у меня использовался только для двух функции, которые приведены выше. Остальное все на паскале.
Теперь оталось дело за малым создать:D
ПОКА:cool:
_________________
Разум сила
Код:
uses crt;
var n:word;
begin;
asm
mov ah,00
mov al,13h
int 10h
end;
for n:=1 to 100 do
begin;
Mem[$A000:n]:=02;
Mem[$A000:n+320]:=03;
Mem[$A000:n+640]:=04;
Mem[$A000:n+960]:=05;
end;
readkey;
asm
mov ah,00
mov al,02
int 10h
end;
readkey;
end.
var n:word;
begin;
asm
mov ah,00
mov al,13h
int 10h
end;
for n:=1 to 100 do
begin;
Mem[$A000:n]:=02;
Mem[$A000:n+320]:=03;
Mem[$A000:n+640]:=04;
Mem[$A000:n+960]:=05;
end;
readkey;
asm
mov ah,00
mov al,02
int 10h
end;
readkey;
end.
Процедуру рисования линий лучше сделать использовав алгоритм Брозенхама.
[color=red]Для оформления кода используй теги. Модератор. [/color]