|
помощь - Форум
помощь
| |
Lincor | Дата: Понедельник, 18.03.2013, 19.40.10 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 6
Статус: Offline
| программа не работает при попытке установить прямоугольник.
Код program SelectIT; var net:array[0..5,0..5] of boolean; //сетка x,y:integer; //координаты курсора i,j,key:integer;
begin repeat setcolor(0,0,0); fillrect(0,0,getwidth,getheight); setcolor(255,255,255); for i:=0 to 5 do for j:=0 to 4 do drawrect(i*getwidth/5,j*getwidth/5,getwidth/5,getwidth/5); key:=keytoaction(getkeyclicked); if key=GA_RIGHT then if x<(getwidth-getwidth/5) then x:=x+getwidth/5; if key=GA_LEFT then if x>0 then x:=x-getwidth/5; if key=GA_UP then if y>0 then y:=y-getwidth/5; if key=GA_DOWN then if Y<(getwidth-getwidth/5) then y:=y+getwidth/5; if key=GA_FIRE then if net[x/5,y/5] then drawline(x,y,x+getwidth/5,y+getwidth/5) else fillrect(x,y,getwidth/5,getwidth/5); setcolor(255,0,0); drawrect(x,y,getwidth/5,getwidth/5); repaint; until false; end.
|
|
| |
Wladymyr | Дата: Вторник, 19.03.2013, 05.52.41 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 15
Статус: Offline
| Цитата (Lincor) программа не работает при попытке установить прямоугольник.Код program SelectIT; var net:array[0..5,0..5] of boolean; //сетка x,y:integer; //координаты курсора i,j,key:integer;
begin repeat setcolor(0,0,0); fillrect(0,0,getwidth,getheight); setcolor(255,255,255); for i:=0 to 5 do for j:=0 to 4 do drawrect(i*getwidth/5,j*getwidth/5,getwidth/5,getwidth/5); key:=keytoaction(getkeyclicked); if key=GA_RIGHT then if x<(getwidth-getwidth/5) then x:=x+getwidth/5; if key=GA_LEFT then if x>0 then x:=x-getwidth/5; if key=GA_UP then if y>0 then y:=y-getwidth/5; if key=GA_DOWN then if Y<(getwidth-getwidth/5) then y:=y+getwidth/5; if key=GA_FIRE then if net[x/5,y/5] then drawline(x,y,x+getwidth/5,y+getwidth/5) else fillrect(x,y,getwidth/5,getwidth/5); setcolor(255,0,0); drawrect(x,y,getwidth/5,getwidth/5); repaint; until false; end. Вся проблема в строке преобразования х,у в номер массива квадрата. if key=GA_FIRE then if net[x/5,y/5] всё дело в том что тут х и у делятсяна 5.В телефоне 240х320 если выбрать последнюю клетку то х и у ровняются 192, а 192/5=38,4. А такого масива нету, по этом у нужно мудрить с шириной экрана.Вот если сделать эту строку вот так if key=GA_FIRE then if net[x/(getwidth/5),y/(getwidth/5)] , то всё работает без проблем.
|
|
| |
|
|