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
Post a Comment