Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 11.12.2015
Сообщений: 18
1

Найти ошибку в программе перемещения круга

08.02.2016, 19:25. Показов 973. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В центре графического окна рисуется красный круг. Используя клавиши управления курсором (вправо, влево, вверх, вниз), можно перемещать этот круг по графическому окну. При этом круг не должен выходить за пределы окна.C помощью клавиши ‘+’ (VK_Add) можно увеличивать размер круга, а с помощью клавиши ‘-’ (VK_Subtract) уменьшать его. При этом круг не должен становиться больше высоты графического окна (выходить за его границы) и меньше минимального размера. Минимальный размер круга и величина, на которую он изменяет свой размер, задаются в программе константами.
Вот то,что у меня получилось:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Program Romb;
Uses GraphABC;
const 
  minR=5;  
  Delta=5;
Var
   R, WW, WH, X, Y : Integer;
Procedure KeyDown(Key: Integer);
var RNew:integer;
Begin
  RNew:=R;
  Case Key Of
    VK_Add:
      If (X+R+Delta < WindowWidth) And (Y+R+Delta < WindowHeight)  Then
        RNew := R + Delta;
    VK_Subtract:
      If (R-Delta >= minR) Then 
        RNew := R - Delta;
      End;
  if R<>RNew then begin    
     SetPenColor(clWhite);
     SetBrushColor(clWhite);
     Circle(X, Y, R);
     R:=RNew;
     SetPenColor(clRed);
     SetBrushColor(clRed);
     Circle(X, Y, R);
  end;   
End;  
 Procedure KeyDown2(Key2: Integer);
Begin
   SetPenColor(clWhite);
   SetBrushColor(clWhite);
   Circle(X, Y, R);
   Case Key2 of
      VK_Up:
         If Y >= R + Delta Then
            Y := Y - Delta;
      VK_Right:
         If X <= WW - (R + Delta) Then
            X := X + Delta;
      VK_Down:
         If Y <= WH - (R + Delta) Then
            Y := Y + Delta;
      VK_Left:
         If X >= R + Delta Then
            X := X - Delta;
   End;
   SetPenColor(clRed);
   SetBrushColor(clRed);
   Circle(X, Y, R);
End;
 
Begin
   CenterWindow;
   WW := WindowWidth;
   WH := WindowHeight;
   X := WW div 2;
   Y := WH div 2;
   SetSmoothing(False);
   SetPenColor(clRed);
   SetBrushColor(clRed);
   R:=minR;
   Circle(X, Y, R);
   OnKeyDown := KeyDown;
    WW := WindowWidth;
   WH := WindowHeight;
   X := WW div 2;
   Y := WH div 2;
   SetSmoothing(False);
   SetPenColor(clRed);
   SetBrushColor(clRed);
   Circle(X, Y, R);
   OnKeyDown:= KeyDown2;
End.
С движением вроде бы всё норм,но размеры почему-то не работают(хотя в отдельной программе всё функционирует).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2016, 19:25
Ответы с готовыми решениями:

Найти ошибку в программе: в visual studio выдает ошибку
#include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() ...

Не могу найти ошибку в программе(для просмотра картинок):кнопка НАЗАД не работает(не становится активной) Найдите ошибку.

После перемещения круга появляется ненужная линия
почему при перемещении круга(обьект абс) с установленной заранее шириной после перемещения...

Найти ошибку в программе
А шо тут не так, че ано мне выдает всякую гадость, но не то что надо? Program Naselenie; uses...

3
20 / 20 / 16
Регистрация: 21.01.2015
Сообщений: 51
08.02.2016, 20:10 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
program Romb;
 
uses
  GraphABC;
 
const
  minR = 5;  
  Delta = 5;
 
var
  R, WW, WH, X, Y: Integer;
 
procedure KeyDown(Key: Integer);
var
  RNew: integer;
begin
  SetPenColor(clWhite);
  SetBrushColor(clWhite);
  Circle(X, Y, R);
  RNew := R;
  case Key of
    VK_Up:
      if Y >= R + Delta Then
        Y := Y - Delta;
    VK_Right:
      if X <= WW - (R + Delta) Then
        X := X + Delta;
    VK_Down:
      if Y <= WH - (R + Delta) Then
        Y := Y + Delta;
    VK_Left:
      if X >= R + Delta Then
        X := X - Delta;
    VK_Add:
      //Проверим все 4 стороны круга
      if (X + R + Delta < WindowWidth) AND (X - R - Delta > 0) AND (Y + R + Delta < WindowHeight) AND (Y - R - Delta > 0) Then
        RNew := R + Delta;
    VK_Subtract:
      if (R - Delta >= minR) Then 
        RNew := R - Delta;
  End;
  if R <> RNew then
    R := RNew;
  SetPenColor(clRed);
  SetBrushColor(clRed);
  Circle(X, Y, R);
  Redraw
end;
 
begin
  LockDrawing;
  CenterWindow;
  WW := WindowWidth;
  WH := WindowHeight;
  X := WW div 2;
  Y := WH div 2;
  SetSmoothing(False);
  SetPenColor(clRed);
  SetBrushColor(clRed);
  R := minR;
  Circle(X, Y, R);
  Redraw;
  //Событию присваивается ТОЛЬКО ОДНА процедура
  OnKeyDown := KeyDown;
end.
0
0 / 0 / 1
Регистрация: 11.12.2015
Сообщений: 18
08.02.2016, 22:06  [ТС] 3
nikhrom, понятно,спасибо.
0
20 / 20 / 16
Регистрация: 21.01.2015
Сообщений: 51
08.02.2016, 22:29 4
0
08.02.2016, 22:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2016, 22:29
Помогаю со студенческими работами здесь

Найти ошибку в программе
program nado; label bye; var f: text; fam: string; name: string; tel: string; begin writeln;...

Найти ошибку в программе
if (x1=x2) or (y2=y1) then begin xyxyxy:= xyxyxy+1; writeln('да'); end; else...

найти ошибку в программе
Всем привет. помогите найти ошибку... Program lab3; var a,b,an,ak,ah,bn,bk,bh,x,c:real; begin...

Найти ошибку в программе
Помогите найти ошибку в программе. Текст условия: В городе N проезд в трамвае осуществляется по...

Найти ошибку в программе
никак не пойму почему программа ругается на end который стоит перед else type x=arrayof...

Найти ошибку в программе
Попытался переделать по своему програмку вращения кубика по разным осям, предложенной Vincent - ом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru