Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачи на графику
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Dezman
Ни на одном форуме мне никто не смог помочь. Надеюсь, что здесь я все таки найду помощь smile.gif

1. Написать программу, которая выводит на экран меню, в котором в зависимости от выбора пользователя появляется круг, квадрат или треугольник.

2. Напишите программу, которая в зависимости от кода нажатой клавиши (используйте клавиши перемещения курсора) управляет движением фигуры человечка (вверх, вниз, влево, вправо). Образ человечка занесите в память.

Заранее спасибо! smile.gif
Ozzя
Цитата
которая выводит на экран меню
меню во фрейме

Добавлено через 2 мин.
Цитата
которая в зависимости от кода нажатой клавиши (используйте клавиши перемещения курсора) управляет движением фигуры человечка (вверх, вниз, влево, вправо

Помогите советом
Dezman
2Ozzя
В Паскале у меня есть один большой пробел это графика. Поэтому из всего там написаного я ничего не понял. Как это прикрутить к моим програмам? smile.gif
Ozzя
2.
вводный проект

Добавлено через 2 мин.
В 1-м готовый модуль. Пишешь uses fmenu; и используешь проц-ру simplemenu
Dezman
А вторую часть первой проги куда прикрутить? sad.gif
Dezman
Вторая задача у меня не работает sad.gif Может кто-нить скинуть код проги без лишних процедур, операций, функций?
Dezman
Неужели никто не знает? sad.gif Мне это на зачет надо, плиз помогите.
Я саму прогу написал, но как сохранить в память человечка не знаю!
Dezman
sad.gif Мдя
Ozzя
Цитата(Dezman @ 9.12.2007 0:23) *

как сохранить в память человечка не знаю!

getimage
Dezman
Я сделал вторую программу, но столкнулся с проблемой. У меня на экране два человечка: один висит в левом верхнем углу, другим я управляю с помощью клавиш. Как убрать первого?


program z1;
uses graph,crt;
var xold,yold,dx,dy,drivervar,modevar,i,size,x,y,xmax,ymax:integer;
p1,p2:pointer;
c:char;
begin
drivervar:=detect;
detectgraph(drivervar,modevar);
initgraph(drivervar,modevar, ' ');
size:=imagesize(0,0,20,100);
setlinestyle(0,0,3);
pieslice(10,10,0,360,10);
fillellipse(10,40,10,20);
line(8,50,0,100);
line(12,60,20,100);
getmem(p1,size);
getimage(0,0,20,100,p1^);
dx:=1; dy:=1;
x:=100;y:=100;
xmax:=getmaxx;ymax:=getmaxy;
repeat;
putimage(x,y,p1^,1);
xold:=x;yold:=y;
c:=readkey;
if c=#0 then c:=readkey;
case c of
#72:if y>1 then y:=y-dy;
#75:if x>2 then x:=x-dx;
#80:if y<ymax-100 then y:=y+dy;
#77:if x<xmax-20 then x:=x+dx;
end;
putimage(xold,yold,p1^,1);
until c=#27;
freemem(p1,size);
closegraph;
end.


Ozzя
После GetImage сделай ClearViewPort.
volvo
getimage(0,0,20,100,p1^); { <--- это у тебя было }

{ добавляешь эти 2 строки }
setfillstyle(solidfill, black);
bar(0, 0, 20, 100);

Кстати, добавление 2-х строк выявляет глюк в программе: ты копируешь изображение не полностью. несколько пикселей остаются на экране... Увеличь ширину копируемой области...
Dezman
Спасибо большое, теперь все понятно smile.gif good.gif

меню во фрейме
У меня не работает программа которую написал Дож. Пишет что Unit не может запуститься. Что делать? sad.gif
volvo
А Unit не запускается... Его надо подключить к программе (так же, как ты подключаешь Graph и Crt, в Uses), и использовать...
Dezman
То есть:
Program Z1;
Uses Unit ....
Или как? Я в модулях не шарю. sad.gif
Артемий
Да.Только не Unit - это зарезервированное слово.Unit1 пойдет
Dezman
file not found (unit1.tpu)
И где его взять? Замучился уже...
Артемий
Так ты должен создать сначала этот юнит,другими словами Build.
Dezman
Можешь написать этот кусок?
volvo
Dezman, по приведенной тобой ссылке есть текст модуля... Сохрани его в файл под именем FUNIT.PAS в той же папке, что и твоя программа, и в основной программе делай
Uses { что там у тебя было }, FUnit; { <--- Все, модуль подключен, можешь использовать }
...

(для компиляции нажимай F9, а не Alt+F9, тогда сначала скомпилируется модуль, а потом - твоя программа...)
Ozzя
ерш твою медь! mad.gif
Цитата
Пишешь uses fmenu; и используешь проц-ру simplemenu
Dezman
Спокойно sad.gif Я ж говорил, что в модулях и графике ниче не смыслю. Остальное знаю.

Добавлено через 11 мин.
Ладно, спасибо всем за помощь. Вторую задачу я осилил, а первая все равно не получается. sad.gif
Dezman
Я скопировал это на одном форуме, меню сойдет, но как описать появление квадрата, круга и треугольника.
Наверное процедуру надо написать. Я пишу обычную про-ру, вставляю ее имя после case в самом низу программы, а она не пашет. Вместо начать и загрузить, я пишу квадрат...


uses crt;
type
menuitems=array [1..3] of string;

const
mainmenu:menuitems =
(' начать ',
' загрузить ',
' Выход ');

Procedure menu(var m:menuitems; kol: byte; var num: byte);

var i,y: byte; ch: char;

Begin
window(25,8,65,20);
textbackground(0);
clrscr;
textcolor(12);
writeln(' +------+ ');
writeln('+----------! МЕНЮ !-----------+');
writeln('! +------+ !');
{ writeln(' ХННННННё ');
writeln('ЙННННННННННµ Њ…Ќћ ЖННННННННННН»');
writeln('є ФННННННѕ є'); }
for i:=1 to kol do
writeln('! !');
{ for i:=1 to kol do
writeln('є є');
}

window(25,10+kol+1,65,10+kol+1);
write('+-----------------------------+');
{ write('ИНННННННННННННННННННННННННННННј'); }

window(26,10+2,54,10+kol);
textcolor(3);
for i:=2 to kol-1 do
writeln(m[i]);
textcolor(4);write(m[kol]);

window(26,10+1,54,10+1);
textcolor(15);
textbackground(9);
clrscr;
write(m[1]);
i:=1;
y:=11;

repeat
ch:=readkey;
case ch of
#80: begin
window(26,y,54,y);textcolor(3);textbackground(0);clrscr;
write(m[i]);
if i=kol then
begin
window(26,y,54,y);clrscr;textbackground(0);textcolor(4);write(m[kol]);
i:=1;y:=11;
end
else begin inc(i);inc(y);end;
window(26,y,54,y);textcolor(15);textbackground(9);clrscr;write(m[i]);
end;
#72: begin
window(26,y,54,y);textcolor(3);textbackground(0);clrscr;write(m[i]);
if i=1 then
begin
i:=kol;y:=10+kol;
end
else begin i:=i-1;y:=y-1;
if i=kol-1 then begin
window(26,10+kol,54,10+kol);textcolor(4);clrscr;write(m[kol]); end;
end;
window(26,y,54,y);textcolor(15);textbackground(9);clrscr;write(m[i]);
end;
end;
until (ch=#13);
num:=i;
end;


var r: byte;

begin
textbackground(0);
clrscr;

repeat
window(1,1,80,25); textbackground(0); clrscr;

menu(mainmenu,3,r);

window(1,1,80,25); textbackground(0); clrscr;

Case r of

1: вызвать процедуру начать;

2: вызвать процедуру загрузить;

end;

until r=3;
end.

volvo
Цитата
Я пишу обычную про-ру
У тебя ж графика не инициализирована... InitGraph/CloseGraph в твоей процедуре тоже есть? А лучше бы показал программу полностью...
Dezman
И есть вся прога полностью, она работает. Я просто не знаю как сделать вторую часть проги. Я уже все перепробовал, прога Дожа все равно не пашет
volvo
Цитата
она работает
Опять 25... Работает - это значит компилируется (интересно, как может компилироваться
      Case r of 
1: вызвать процедуру начать;
2: вызвать процедуру загрузить;
end;
, ты точно на Паскале пишешь?), запускается и выдает верный результат/делает то, что от нее требуется. Если это так и есть - чего ты спрашиваешь? Если нет - значит не работает, тогда приаттачивай программу полностью.
Dezman
Это прога выводит только меню. А как сделать так, чтобы нажав на кнопку "квадрат" стерлось меню и появился квадрат??
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.