По всем вопросам - пишите на эл.почтуКруглосуточно 24/7
We speak English

Урок 3.2. Программа BLOTCH: команда MOUSE

Рисуем пятно.

  • S = размер квадратного пятна
  • D = размер каждой ячейки в пятне, раскрашенной в случайный цвет.

Чтобы нарисовать квадратное пятно, просто коснитесь экрана вне меню.

Ввод: BLOTCH()

Программа:

// EWS 04-20-2021
EXPORT BLOTCH()
BEGIN
  // Инициализация
  LOCAL m, m1, mx, my, j, k, r;
  WHILE MOUSE(1) ≥ 0 DO END;

  // очистить холст
  RECT;
  LOCAL s := 50, d := 4;

  // Меню - перерисовать
  DRAWMENU("Clear", "S+5", "S-5", "D+2", "D-2", "Exit");

  // Начать основной цикл
  REPEAT

    // получить данные от нажатий кнопкой мыши
    REPEAT
      m := MOUSE; m1 := m(1);
    UNTIL SIZE(m1) > 0;
    mx := m1(1); my := m1(2);

    DRAWMENU("Clear", "S+5", "S-5", "D+2", "D-2", "Exit");

    // очистить экран
    IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 0 AND mx ≤ 51) THEN
      RECT;
    END;

    // изменить размер
    IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 53 AND mx ≤ 104) THEN
      IF s < 80 THEN s := s+5; END;
    END;

    IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 106 AND mx ≤ 157) THEN
      IF s > 5 THEN s := s-5; END;
    END;

    // изменить высоту
    IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 159 <>bAND mx ≤ 210) THEN
      IF d < 8 THEN d := d+2; END;
    END;

    IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 212 AND mx ≤ 263) THEN
      IF d > 2 THEN d := d-2; END;
    END;

    // кнопка выхода
    IF (my ≥ 220 AND my ≤ 319) AND (mx ≥ 256 AND mx ≤ 319) THEN
      BREAK;
    END;

    // нарисовать пятно
    FOR j FROM mx-s/2 TO mx+s/2 STEP d DO
      FOR k FROM my-s/2 TO my+s/2 STEP d DO
        r := RANDINT(1677215);
        RECT_P(j, k, j+d-1, k+d-1, r);
      END;
    END;

// закрыть основной цикл
  UNTIL (my ≥ 220 AND my ≤ 319) AND (mx ≥ 256 AND mx ≤ 319);

  RECT_P(0, 220, 319, 239);
  TEXTOUT_P("DONE!", 146, 220, 4, #FF0000h);
  WAIT(-1);

END;