How to initialise and use array in game assignment

Let’s put this all together now, randomize the incoming invaders numbers, and add a keyPressed() method to test killing an invader, and check if offset gets too high:

int[] invaders;
float offset;

void setup() {
  size(800, 300);
  invaders = new int[800/35];
  for ( int i = 0; i < invaders.length; i++) {
    invaders[i] = int( random(10));
  }
  offset = -70;
}

void draw() {
  background(0);
  if( offset > width ){
    background(200,0,0);
  }
  offset++;
  // Draw all invaders.
  for ( int i = 0; i < invaders.length; i++) {
    if ( invaders[i] != -1 ) {
      rectMode(CENTER);
      pushMatrix();
      translate(width - offset + i * 70, height/2);
      fill(255);
      rect(0, 0, 40, 40);
      fill(0);
      text(invaders[i], 0, 0);
      popMatrix();
    }
  }
}

void add_invader(int new_number){
  for( int i = 0; i < invaders.length; i++){
    if( invaders[i] == -1 ){
      invaders[i] = new_number;
      return;
    }
  }
}

boolean remove_invader(int which_number){
  for( int i = 0; i < invaders.length; i++){
    if( invaders[i] == which_number ){
      invaders[i] = -1;
      shift_invader(i);
      return(true);
    }
  }
  return(false);
}

void shift_invader(int i){
 if( i+1 < invaders.length){
   invaders[i] = invaders[i+1];
   shift_invader(i+1);
  } else {
   invaders[i] = -1;
  }
}

void keyPressed(){    
  if( key >= '0' && key <= '9' ){
    if( remove_invader( key - int('0') ) ){
      offset-=70;
      add_invader( int(random(10)) );
    }
  }
}

There. That’s a solid example for you to study. It’s up to you to make it work for your invaders, and to replace my keyPressed() with you number selecting code.

Also notice that killing an invader now causes a new one to be added, and makes the offset jump back a bit.

1 Like