Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задачи на графику

Автор: Dezman 8.12.2007 17:32

Ни на одном форуме мне никто не смог помочь. Надеюсь, что здесь я все таки найду помощь smile.gif

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

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

Заранее спасибо! smile.gif

Автор: Ozzя 8.12.2007 17:36

Цитата
которая выводит на экран меню
http://forum.pascal.net.ru/index.php?s=&showtopic=5103&view=findpost&p=41079

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

http://forum.pascal.net.ru/index.php?showtopic=2999&hl=коды+клавиш#

Автор: Dezman 8.12.2007 17:50

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

Автор: Ozzя 8.12.2007 18:09

2.
http://forum.pascal.net.ru/index.php?showtopic=3240&hl=движение+графика

Добавлено через 2 мин.
В 1-м готовый модуль. Пишешь uses fmenu; и используешь проц-ру simplemenu

Автор: Dezman 9.12.2007 0:46

А вторую часть первой проги куда прикрутить? sad.gif

Автор: Dezman 9.12.2007 1:27

Вторая задача у меня не работает sad.gif Может кто-нить скинуть код проги без лишних процедур, операций, функций?

Автор: Dezman 9.12.2007 3:23

Неужели никто не знает? sad.gif Мне это на зачет надо, плиз помогите.
Я саму прогу написал, но как сохранить в память человечка не знаю!

Автор: Dezman 9.12.2007 15:58

sad.gif Мдя

Автор: Ozzя 10.12.2007 14:46

Цитата(Dezman @ 9.12.2007 0:23) *

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

getimage

Автор: Dezman 10.12.2007 16:41

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


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я 10.12.2007 17:31

После GetImage сделай ClearViewPort.

Автор: volvo 10.12.2007 17:34

getimage(0,0,20,100,p1^); { <--- это у тебя было }

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

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

Автор: Dezman 10.12.2007 17:51

Спасибо большое, теперь все понятно smile.gif good.gif

http://forum.pascal.net.ru/index.php?s=&showtopic=5103&view=findpost&p=41079
У меня не работает программа которую написал Дож. Пишет что Unit не может запуститься. Что делать? sad.gif

Автор: volvo 10.12.2007 18:14

А Unit не запускается... Его надо подключить к программе (так же, как ты подключаешь Graph и Crt, в Uses), и использовать...

Автор: Dezman 10.12.2007 18:25

То есть:
Program Z1;
Uses Unit ....
Или как? Я в модулях не шарю. sad.gif

Автор: Артемий 10.12.2007 18:32

Да.Только не Unit - это зарезервированное слово.Unit1 пойдет

Автор: Dezman 10.12.2007 18:36

file not found (unit1.tpu)
И где его взять? Замучился уже...

Автор: Артемий 10.12.2007 18:39

Так ты должен создать сначала этот юнит,другими словами Build.

Автор: Dezman 10.12.2007 18:45

Можешь написать этот кусок?

Автор: volvo 10.12.2007 18:52

Dezman, по приведенной тобой ссылке есть текст модуля... Сохрани его в файл под именем FUNIT.PAS в той же папке, что и твоя программа, и в основной программе делай

Uses { что там у тебя было }, FUnit; { <--- Все, модуль подключен, можешь использовать }
...

(для компиляции нажимай F9, а не Alt+F9, тогда сначала скомпилируется модуль, а потом - твоя программа...)

Автор: Ozzя 10.12.2007 18:54

ерш твою медь! mad.gif

Цитата
Пишешь uses fmenu; и используешь проц-ру simplemenu

Автор: Dezman 10.12.2007 18:56

Спокойно sad.gif Я ж говорил, что в модулях и графике ниче не смыслю. Остальное знаю.

Добавлено через 11 мин.
Ладно, спасибо всем за помощь. Вторую задачу я осилил, а первая все равно не получается. sad.gif

Автор: Dezman 12.12.2007 0:19

Я скопировал это на одном форуме, меню сойдет, но как описать появление квадрата, круга и треугольника.
Наверное процедуру надо написать. Я пишу обычную про-ру, вставляю ее имя после 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 12.12.2007 0:23

Цитата
Я пишу обычную про-ру
У тебя ж графика не инициализирована... InitGraph/CloseGraph в твоей процедуре тоже есть? А лучше бы показал программу полностью...

Автор: Dezman 12.12.2007 0:27

И есть вся прога полностью, она работает. Я просто не знаю как сделать вторую часть проги. Я уже все перепробовал, прога Дожа все равно не пашет

Автор: volvo 12.12.2007 1:16

Цитата
она работает
Опять 25... Работает - это значит компилируется (интересно, как может компилироваться
      Case r of 
1: вызвать процедуру начать;
2: вызвать процедуру загрузить;
end;
, ты точно на Паскале пишешь?), запускается и выдает верный результат/делает то, что от нее требуется. Если это так и есть - чего ты спрашиваешь? Если нет - значит не работает, тогда приаттачивай программу полностью.

Автор: Dezman 12.12.2007 1:32

Это прога выводит только меню. А как сделать так, чтобы нажав на кнопку "квадрат" стерлось меню и появился квадрат??