While value in array

edited May 17 in Questions about Code

For a snake game, I have the food teleport to a random spot on the screen when you eat it, but it's possible for the food to end up on your tail, and not on an empty space. Basically, I sort of need some way to check if the food's x is in the arrayList for the snake's x, and the smae with y, and if so, to execute an action until that is not true.

Answers

  • Answer ✓

    like this....?

    ArrayList<Integer> snakeArrayX=new ArrayList();
    ArrayList<Integer> snakeArrayY=new ArrayList();
    
    // --------------------------------------------------------------
    
    void setup() {
      size(400, 400);
      frameRate(60);
    }
    
    void draw() {
    
      int x = int(random(width));   // probably gridSize here !!!  
      int y = int(random(height)); 
    
      // as long as new apple position x,y is inside snake, the position is not acceptable and gets redefined
      while (positionIsInsideSnake(x, y)) {
        x = int(random(width));   // probably gridSize here !!!  
        y = int(random(height));
      }//while 
      //
    }//func
    
    boolean positionIsInsideSnake(int x, int y) {
    
      for (int i=0; i<snakeArrayX.size(); i++) {
        if (x==snakeArrayX.get(i) && y==snakeArrayY.get(i)) {
          return true; // it's inside; we immediately leave the function (because one occurance is enough)
        }//if
      }//for 
    
      // no occurance 
      return false;
    }//func  
    //
    
  • Yes, thank you. I completely forgot about the possibility of using return true / false.

  • A do... while loop is better if you know that the loop is going to be done at least once, less repetition (your lines 13, 14 are identical to lines 18, 19)

    void draw() {
      int x, y;
      do {
        x = int(random(width));
        y = int(random(height));
      } while (positionIsInsideSnake(x, y));
    }
    

    (Untested)

  • thanks!

Sign In or Register to comment.