IntList Lottery example

by Daniel Shiffman

This example demonstrates an IntList can be used to store a list of numbers. While an array of integers serves a similar purpose it is of fixed size. The An IntList can easily have values added or deleted and it can also be shuffled and sorted. For lists of floats or Strings, you can use FloatList and StringList. For lists of objects, use ArrayList. In this example, three lists of integers are created. One is a pool of numbers that is shuffled and picked randomly from. One is the list of "picked" numbers. And one is a lottery "ticket" which includes 5 numbers that are trying to be matched.

/**
 * IntList Lottery example
 * by Daniel Shiffman.  
 * 
 * This example demonstrates an IntList can be used to store a list of numbers.
 * While an array of integers serves a similar purpose it is of fixed size.  The
 * An IntList can easily have values added or deleted and it can also be 
 * shuffled and sorted.  For lists of floats or Strings, you can use FloatList
 * and StringList.  For lists of objects, use ArrayList.
 *
 * In this example, three lists of integers are created.  One is a pool of numbers
 * that is shuffled and picked randomly from.  One is the list of "picked" numbers.
 * And one is a lottery "ticket" which includes 5 numbers that are trying to be matched.
 */
 
// Three lists of integers
IntList lottery;
IntList results;
IntList ticket;

void setup() {
  size(640, 360);
  frameRate(30);
  // Create empy lists
  lottery = new IntList();
  results = new IntList();
  ticket  = new IntList();
  
  
  // Add 20 integers in order to the lottery list
  for (int i = 0; i < 20; i++) {
    lottery.append(i);
  }
  
  // Pick five numbers from the lottery list to go into the Ticket list
  for (int i = 0; i < 5; i++) {
    int index = int(random(lottery.size()));
    ticket.append(lottery.get(index));
  }
}

void draw() {
  background(51);
  
  // The shuffle() method randomly shuffles the order of the values in the list
  lottery.shuffle();
  
  // Call a method that will display the integers in the list at an x,y location
  showList(lottery, 16, 48);
  showList(results, 16, 100);
  showList(ticket, 16, 140);
  
  
  // This loop checks if the picked numbers (results)
  // match the ticket numbers
  for (int i = 0; i < results.size(); i++) {
    // Are the integers equal?
    if (results.get(i) == ticket.get(i)) {
      fill(0, 255, 0, 100);  // if so green
    } else {
      fill(255, 0, 0, 100);  // if not red
    }
    ellipse(16+i*32, 140, 24, 24);
  }
  
  
  // One every 30 frames we pick a new lottery number to go in results
  if (frameCount % 30 == 0) {
    if (results.size() < 5) {
      // Get the first value in the lottery list and remove it
      int val = lottery.remove(0);
      // Put it in the results
      results.append(val);
    } else {
      // Ok we picked five numbers, let's reset
      for (int i = 0; i < results.size(); i++) {
        // Put the picked results back into the lottery
        lottery.append(results.get(i));
      }
      // Clear the results and start over
      results.clear();
    }
  }
}

// Draw a list of numbers starting at an x,y location
void showList(IntList list, float x, float y) {
  for (int i = 0; i < list.size(); i++) {
    // Use get() to pull a value from the list at the specified index
    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);
  }
}

Related Examples

This example is for Processing 4+. If you have a previous version, use the examples included with your software. If you see any errors or have suggestions, please let us know.