Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Processing:Примеры/Лотерея

Материал из Онлайн справочника
Перейти к: навигация, поиск


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Описание[1]

Этот пример демонстрирует, как использовать объект IntList для хранения списка чисел. Массив целочисленных значений служит примерно той же цели, что и IntList, но его размер фиксирован. Кроме того, значения в IntList можно легко удалять и добавлять, а также сортировать и перемешивать. Для списков значений float и String используйте, соответственно, объекты FloatList и StringList. Для списка объектов используйте ArrayList.

В данном скетче-примере создаются три списка целочисленных значений (т.е. три объекта IntList). Первый – это список постоянно перемешиваемых чисел, из которого скетч в случайном порядке выбирает числа для «результатов лотереи». Второй – это список «выбранных» чисел. И третий – это «лотерейный билет» с 5 числами, для которых должно выпасть совпадение.

Пример

  1. // три объекта IntList (три списка целочисленных переменных):
  2. IntList lottery;
  3. IntList results;
  4. IntList ticket;
  5.  
  6. void setup() {
  7.   size(640, 360);
  8.   frameRate(30);
  9.   // создаем пустые IntList – для «лотереи», «результатов» и «билета»:
  10.   lottery = new IntList();
  11.   results = new IntList();
  12.   ticket  = new IntList();
  13.  
  14.  
  15.   // добавляем в «лотерею» 20 целочисленных значений:
  16.   for (int i = 0; i < 20; i++) {
  17.     lottery.append(i);
  18.   }
  19.  
  20.   // выбираем из «лотереи» 5 чисел, чтобы добавить их в «билет»:
  21.   for (int i = 0; i < 5; i++) {
  22.     int index = int(random(lottery.size()));
  23.     ticket.append(lottery.get(index));
  24.   }
  25. }
  26.  
  27. void draw() {
  28.   background(51);
  29.  
  30.   // метод shuffle() в случайном порядке
  31.   // перемешивает порядок значений в «лотерее»:
  32.   lottery.shuffle();
  33.  
  34.   // вызываем метод showList(), который нарисует
  35.   // целочисленные значения из списков на заданных XY-позициях:
  36.   showList(lottery, 16, 48);
  37.   showList(results, 16, 100);
  38.   showList(ticket, 16, 140);
  39.  
  40.  
  41.   // в этом цикле for() проверяем, совпадают ли
  42.   // «выбранные» числа («результаты») числам в «билете»:
  43.   for (int i = 0; i < results.size(); i++) {
  44.     // это одно и то же число?
  45.     if (results.get(i) == ticket.get(i)) {
  46.       fill(0, 255, 0, 100);  // если да - зеленый
  47.     } else {
  48.       fill(255, 0, 0, 100);  // если нет - красный
  49.     }
  50.     ellipse(16+i*32, 140, 24, 24);
  51.   }
  52.  
  53.  
  54.   // каждые 30 секунд выбираем в «результаты» одно число из «лотереи»:
  55.   if (frameCount % 30 == 0) {
  56.     if (results.size() < 5) {
  57.       // берем первое значение в «лотерее» и удаляем его:
  58.       int val = lottery.remove(0);
  59.       // помещаем его в «результаты»:
  60.       results.append(val);
  61.     } else {
  62.       // ок, выбрали 5 чисел, теперь сбрасываем «результаты»:
  63.       for (int i = 0; i < results.size(); i++) {
  64.         // возвращаем «выбранные» числа обратно в «лотерею»:
  65.         lottery.append(results.get(i));
  66.       }
  67.       // очищаем «результаты» и начинаем сначала:
  68.       results.clear();
  69.     }
  70.   }
  71. }
  72.  
  73. // рисуем список чисел, начиная с заданной XY-позиции:
  74. void showList(IntList list, float x, float y) {
  75.   for (int i = 0; i < list.size(); i++) {
  76.     // при помощи метода get() извлекаем значение
  77.     // из заданной позиции списка IntList:
  78.     int val = list.get(i);
  79.     stroke(255);
  80.     noFill();
  81.     ellipse(x+i*32, y, 24, 24);
  82.     textAlign(CENTER);
  83.     fill(255);
  84.     text(val, x+i*32, y+6);
  85.   }
  86. }

См.также

Внешние ссылки

  1. processing.org - IntList Lottery example by Daniel Shiffman.