Processing:Примеры/Лотерея
Содержание | Среда разработки Processing | Справочник языка Processing | Библиотеки | Примеры | Режимы программирования |
Описание[1]
Этот пример демонстрирует, как использовать объект IntList для хранения списка чисел. Массив целочисленных значений служит примерно той же цели, что и IntList, но его размер фиксирован. Кроме того, значения в IntList можно легко удалять и добавлять, а также сортировать и перемешивать. Для списков значений float и String используйте, соответственно, объекты FloatList и StringList. Для списка объектов используйте ArrayList.
В данном скетче-примере создаются три списка целочисленных значений (т.е. три объекта IntList). Первый – это список постоянно перемешиваемых чисел, из которого скетч в случайном порядке выбирает числа для «результатов лотереи». Второй – это список «выбранных» чисел. И третий – это «лотерейный билет» с 5 числами, для которых должно выпасть совпадение.
Пример
// три объекта IntList (три списка целочисленных переменных):
IntList lottery;
IntList results;
IntList ticket;
void setup() {
size(640, 360);
frameRate(30);
// создаем пустые IntList – для «лотереи», «результатов» и «билета»:
lottery = new IntList();
results = new IntList();
ticket = new IntList();
// добавляем в «лотерею» 20 целочисленных значений:
for (int i = 0; i < 20; i++) {
lottery.append(i);
}
// выбираем из «лотереи» 5 чисел, чтобы добавить их в «билет»:
for (int i = 0; i < 5; i++) {
int index = int(random(lottery.size()));
ticket.append(lottery.get(index));
}
}
void draw() {
background(51);
// метод shuffle() в случайном порядке
// перемешивает порядок значений в «лотерее»:
lottery.shuffle();
// вызываем метод showList(), который нарисует
// целочисленные значения из списков на заданных XY-позициях:
showList(lottery, 16, 48);
showList(results, 16, 100);
showList(ticket, 16, 140);
// в этом цикле for() проверяем, совпадают ли
// «выбранные» числа («результаты») числам в «билете»:
for (int i = 0; i < results.size(); i++) {
// это одно и то же число?
if (results.get(i) == ticket.get(i)) {
fill(0, 255, 0, 100); // если да - зеленый
} else {
fill(255, 0, 0, 100); // если нет - красный
}
ellipse(16+i*32, 140, 24, 24);
}
// каждые 30 секунд выбираем в «результаты» одно число из «лотереи»:
if (frameCount % 30 == 0) {
if (results.size() < 5) {
// берем первое значение в «лотерее» и удаляем его:
int val = lottery.remove(0);
// помещаем его в «результаты»:
results.append(val);
} else {
// ок, выбрали 5 чисел, теперь сбрасываем «результаты»:
for (int i = 0; i < results.size(); i++) {
// возвращаем «выбранные» числа обратно в «лотерею»:
lottery.append(results.get(i));
}
// очищаем «результаты» и начинаем сначала:
results.clear();
}
}
}
// рисуем список чисел, начиная с заданной XY-позиции:
void showList(IntList list, float x, float y) {
for (int i = 0; i < list.size(); i++) {
// при помощи метода get() извлекаем значение
// из заданной позиции списка IntList:
int val = list.get(i);
stroke(255);
noFill();
ellipse(x+i*32, y, 24, 24);
textAlign(CENTER);
fill(255);
text(val, x+i*32, y+6);
}
}
См.также
Внешние ссылки
Примеры на Processing | |
---|---|
Основы |
|
Продвинутые графические эффекты |
|
Примеры из сторонних библиотек |