Project UAS Algoritma dan pemrograman


 Pendeklarasian:

int grid = 20;
PVector food;
int speed = 10;
boolean dead = true;
int highscore = 0;
Snake snake;
______________________________________________________________________________

Pengaturan untuk besar kecil nya window dan memasukan object(data ini dieksekusikan hanya sekali ):

void setup() {
  size(500, 500);
  snake = new Snake();
  food = new PVector();
  newFood();
  //frameRate(8);
}





______________________________________________________________________________


 pengaturan untuk tampilan dalam window pengeksekusian data ini di lakukan berkali kali:

void draw() {
  background(0); //untuk latar belakang
  fill(255);//pengisian warna dalam text menu awal
  if (!dead) {

    if (frameCount % speed == 0) {
      snake.update();
    }
    snake.show();// untuk menampilkan grafis ular
    fill(#55BC7D);//untuk mengatur warna dalam pada object ular
    snake.eat();//untuk menampil kan objek makanan ular
    fill(255, 0, 0);//untuk mengatur warna dalam pada makanan ular
    rect(food.x, food.y, grid, grid);//menampil kan objek makanan ular dan besarnya grid pada      makanan
    textAlign(LEFT);//menampilkan text menjadi jajar di sebelah kiri/melurus kan jajaran text ke kiri
    textSize(15);//mengatur ukuran text yg akan di tampilkan mnjadi 15
    fill(#55BC7D);//mengaur warna text "score" pada score
    text("Score: " + snake.len, 10, 20);//pengaturan posisi text pada tampilan
  } else { // pilihan lain jika "if" salah maka akan menampilkan hasil source code di bwah ini
    textSize(25);//mengatur ukuran text menjadi nilai 25
    textAlign(CENTER, CENTER);//jajaran text di tengah
    text("Snake Game\nKlik apa saja untuk mulai" + "\nHighscore: " + highscore, width/2, height/2);//isi tulisan yang di masukkan
  }
}

void newFood() { //menampilkan mkanan ular secara random/acak
  food.x = floor(random(width));
  food.y = floor(random(height));
  food.x = floor(food.x/grid) * grid;
  food.y = floor(food.y/grid) * grid;
}

void mousePressed() {//tampilan jika mouse di klik
  if (dead) {//jika "dead"maka...
    snake = new Snake();//memanggil ular baru
    newFood();//memanggil makanan
    speed = 10;//kecepatan ular
    dead = false;
  }
}
-------------------------------------------------------------------------------------------------------------------
 class snake
-------------------------------------------------------------------------------------------------------------------

class Snake {//gabungan bidang (data) dan metode (fungsi yang merupakan bagian dari kelas) yang dapat dipakai sebagai objek pada snake




//deklarasi
  PVector pos;//besaran arah "pos"
  PVector vel;//besaran arah"vel"
  ArrayList<PVector> hist;//sejumlah variabel objek dan tipe di dalam nya"PVectror"
  int len;//deklarasi integer "len"
  int moveX = 0;deklarasi moveX  bernolai 0
  int moveY = 0;deklarasi moveY  bernolai 0

  Snake() {//mengatur tampilan posisi awal dari ular
    pos = new PVector(0, 0);
    vel = new PVector();
    hist = new ArrayList<PVector>();
    len = 0;
  }

  void update() {//opsi lanjutan utk mengatur ular
    hist.add(pos.copy());// adalah "hist" menambahkan vector lain dan Menyalin komponen vektor dan mengembalikan hasilnya sebagai PVector.
    pos.x += vel.x*grid;//"pos.x"  addsign dari"vel.x*grid"
    pos.y += vel.y*grid;//"pos.y" addsign dari"vel.x*grid"
    moveX = int(vel.x);// moveX menempatkan data dalam int(vel.x)
    moveY = int(vel.y)://moveY menempatkan data dalam int(vel y)

    pos.x = (pos.x + width) % width;//pos.x menempatkan data dalam  (pos.x + width) dan  Menghitung sisanya pada width
    pos.y = (pos.y + height) % height;////pos.y menempatkan data dalam  (pos.y + width) dan  Menghitung sisanya pada height

    if (hist.size() > len)//menjelaskan jika   hist.size() greater than "len'' maka   hist.remove(0) {    

      hist.remove(0);
    }

    for (PVector p : hist) {
      if (p.x == pos.x && p.y == pos.y) {
        dead = true;
        if (len > highscore) highscore = len;
      }
    }
  }

  void eat() { // pengaturan jika ular memakan makanan
    if (pos.x == food.x && pos.y == food.y) //jika pos.x  sama dgn food.x  &&( Membandingkan dua ekspresi dan mengembalikan true hanya jika keduanya bernilai true. Mengembalikan nilai false jika salah satu atau keduanya bernilai false.) pos.y sama dgn food.y {
      len++;// menambahkan nilai int dari "len"
      if (speed > 5) speed--; //jika kecepatan lebih besar dari 5, nilai integer speed akan berkurang
      newFood();
    }
  }

  void show() {// menampilkan tampilan ular
    noStroke();
    fill(#55BC56); //warna dlm ular
    rect(pos.x, pos.y, grid, grid);//menampil kan objek  ular dan besarnya grid pada      makanan
    for (PVector p : hist) {
      rect(p.x, p.y, grid, grid);
    }
  }
}

void keyPressed() //tampilan jika mouse di klik{
  if (keyCode == LEFT && snake.moveX != 1) //jika kode Left di press maka posisi Xakan berpindah sebesar -1{
    snake.vel.x = -1;
    snake.vel.y = 0;
  } else if (keyCode == RIGHT && snake.moveX != -1)//jika kode right di press maka posisi Xakan berpindah sebesar  1 {
    snake.vel.x = 1;
    snake.vel.y = 0;
  } else if (keyCode == UP && snake.moveY != 1)//jika kode up di press maka posisi Yakan berpindah sebesar -1 {
    snake.vel.y = -1;
    snake.vel.x = 0;
  } else if (keyCode == DOWN && snake.moveY != -1)//jika kode Down di press maka posisi Y akan berpindah sebesar  1 {
    snake.vel.y = 1;
    snake.vel.x = 0;
  }
}

Comments