Compare commits

..

No commits in common. "66f7aef1e32a0db0884a9b00699325ffa812de90" and "88b5fdf1c899eb6b3da43e193d1f849f1ab60672" have entirely different histories.

10 changed files with 298 additions and 638 deletions

View File

@ -1,82 +1,69 @@
// //bagian tempat main ama buat generate game 2d //bagian tempat main ama buat generate game 2d
var canvas = document.getElementById("game"); var canvas = document.getElementById("game");
var content = canvas.getContext("2d"); var content = canvas.getContext("2d");
const Text = document.getElementById("text"); const Text = document.getElementById("text");
const UpDead = document.getElementById("gameover-overlay"); const UpDead = document.getElementById("gameover-overlay");
const ScoreMain = document.getElementById("gameover-score"); const ScoreMain = document.getElementById("gameover-score");
const PlayAgain = document.getElementById("ulangi"); const PlayAgain = document.getElementById("ulangi");
const Udahan = document.getElementById("keluar"); const Udahan = document.getElementById("keluar");
//settingan awal //settingan awal
var grid = 24; var grid = 24;
var count = 0; var count = 0;
var speed = 10; var speed = 10;
var score = 0; var score = 0;
var highscore = 0; var highscore = 0;
var ArahUlar = 0; var ArahUlar = 0;
var GameOverTimer = 0; var GameOverTimer = 0;
var GameStart = false; var GameStart = false;
var ModeH = false; var ModeH = false;
const persiapan = document.getElementById("start"); const persiapan = document.getElementById("start");
//generate gambar external //generate gambar external
var KepalaUlarImage = new Image();
KepalaUlarImage.src = "image/KepalaHorizontalKanan.png";
var KepalAtas = new Image();
KepalAtas.src = "image/KepalaVertikalAtas.png";
var KepalaBawah = new Image();
KepalaBawah.src = "image/KepalaVertikalBawah.png";
var KepalaKiri = new Image();
KepalaKiri.src = "image/KepalaHorizontalKiri.png";
var KepalaKanan = new Image();
KepalaKanan.src = "image/KepalaHorizontalKanan.png";
// ↑ kepala ular
//kepala var BadanUlarImage = new Image();
const kepala = { BadanUlarImage.src = "image/BadanVertikal.png";
  kanan: new Image(), // ↑ badan ular
  kiri: new Image(),
  atas: new Image(),
  bawah: new Image(),
};
kepala.kanan.src = "image/KepalaHorizontalKanan.png";
kepala.kiri.src  = "image/KepalaHorizontalKiri.png";
kepala.atas.src    = "image/KepalaVertikalAtas.png";
kepala.bawah.src  = "image/KepalaVertikalBawah.png";
//badan var ApelImage = new Image();
const badan = { ApelImage.src = "image/ApelLayer.png"; // Apel
  horizontal: new Image(), var TembokImage = new Image();
  vertical: new Image(), TembokImage.src = "image/Tembok.png"; // Tembok Batagor
};
badan.horizontal.src = "image/BadanHorizontal.png";
badan.vertical.src   = "image/BadanVertikal.png";
//const beluk //set posisi ular dan Apel
const belok = { var Ular = { x: 528, y: 240, dx: grid, dy: 0, cells: [], maxCells: 4 };
  AtasKanan: new Image(), var Apel = { x: 0, y: 0 };
  AtasKiri: new Image(), var Tembok = [];
  BawahKanan: new Image(), UpdateScore(0);
  BawahKiri: new Image(), RandomizeApel();
};
belok.AtasKanan.src   = "image/BelokAtasKanan.png";
belok.AtasKiri.src    = "image/BelokAtasKiri.png";
belok.BawahKanan.src = "image/BelokBawahKanan.png";
belok.BawahKiri.src  = "image/BelokBawahKiri.png";
//bokong //mastiin gambar external generate dulu sebelum game start
const bokong = { KepalaUlarImage.onload = function () {
  kanan: new Image(), function gameLoop() {}
  kiri: new Image(), };
  atas: new Image(),
  bawah: new Image(),
};
bokong.kanan.src = "image/BokongHorizontalKanan.png";
bokong.kiri.src  = "image/BokongHorizontalKiri.png";
bokong.atas.src    = "image/BokongVertikalAtas.png";
bokong.bawah.src  = "image/BokongVertikalBawah.png";
//ngatur biar game ga langsung jalan
var ApelImage = new Image(); function StartingGame(menantang) {
ApelImage.src = "image/ApelLayer.png"; ModeH = menantang;
var TembokImage = new Image(); persiapan.style.display = "none";
TembokImage.src = "image/Tembok.png"; if (ModeH) {
RandomSpawnWall();
//set posisi ular dan Apel } else {
var Ular = { x: 528, y: 240, dx: grid, dy: 0, cells: [], maxCells: 4 }; Tembok = [];
var Apel = { x: 0, y: 0 }; }
var Tembok = []; GameStart = true;
UpdateScore(0); }
RandomizeApel();
//buat ngatur batu spwan apa ga nanti //buat ngatur batu spwan apa ga nanti
const halaman = document.querySelector(".HalamanFull"); const halaman = document.querySelector(".HalamanFull");
@ -98,141 +85,99 @@ RandomizeApel();
StartingGame(true); StartingGame(true);
}); });
//play again pas gameover
function resetGame() {
Ular.x = 528;
Ular.y = 240;
Ular.cells = [];
Ular.maxCells = 4;
Ular.dx = grid;
Ular.dy = 0;
Tembok = [];
RandomizeApel();
UpdateScore(0);
ModeH = false;
GameStart = false;
}
//ngatur tombol pas gameover kemana abis di klik
PlayAgain.addEventListener("click", function () {
UpDead.style.display = "none";
resetGame();
persiapan.style.display = "flex";
});
function getDirection(cell1, cell2) { Udahan.addEventListener("click", function () {
    if (cell2.x > cell1.x) return "kanan"; UpDead.style.display = "none";
    if (cell2.x < cell1.x) return "kiri"; resetGame();
    if (cell2.y > cell1.y) return "bawah"; });
    if (cell2.y < cell1.y) return "atas";
    return null;
}
//ngatur biar game ga langsung jalan //gameover terus ngatur ular ke setting awal
function StartingGame(menantang) { function gameLoop() {
    ModeH = menantang; if (!GameStart) {
    persiapan.style.display = "none"; requestAnimationFrame(gameLoop);
    if (ModeH) { return;
        RandomSpawnWall(); }
    } else { ClearCanvas();
        Tembok = []; Movement();
    } IntiGame();
    GameStart = true;
}
//buat ngatur batu spwan apa ga nanti requestAnimationFrame(gameLoop);
document.getElementById("mode-normal").addEventListener("click", function () { }
    StartingGame(false);
});
document.getElementById("mode-tambahan").addEventListener("click", function () { //random spawn Apel
    StartingGame(true); function RandomizeApel() {
}); var pembataslebar = Math.floor(canvas.width / grid);
var pembatastinggi = Math.floor(canvas.height / grid);
Apel.x = Math.floor(Math.random() * pembataslebar) * grid;
Apel.y = Math.floor(Math.random() * pembatastinggi) * grid;
}
//play again pas gameover //random spawn tembok
function resetGame() { function RandomSpawnWall() {
    Ular.x = 528; var TembokX, TembokY;
    Ular.y = 240; var kosong;
    Ular.cells = []; var pembataslebar = Math.floor(canvas.width / grid);
    Ular.maxCells = 4; var pembatastinggi = Math.floor(canvas.height / grid);
    Ular.dx = grid;
    Ular.dy = 0;
    Tembok = [];
    RandomizeApel();
    UpdateScore(0);
}
//ngatur tombol pas gameover kemana abis di klik //create tembok
PlayAgain.addEventListener("click", function () { do {
    UpDead.style.display = "none"; kosong = true;
    resetGame();
    ModeH = false;
    persiapan.style.display = "flex";
});
Udahan.addEventListener("click", function () { TembokX = Math.floor(Math.random() * pembataslebar) * grid;
    UpDead.style.display = "none"; TembokY = Math.floor(Math.random() * pembatastinggi) * grid;
    resetGame();
    ModeH = false;
});
//gameover terus ngatur ular ke setting awal //cek untuk posisi yang mau di kasih tembok ada/tidak ada ularnya
function gameLoop() { for (var i = 0; i < Ular.cells.length; i++) {
    if (!GameStart) { if (Ular.cells[i].x === TembokX && Ular.cells[i].y === TembokY) {
        requestAnimationFrame(gameLoop); kosong = false;
        return; break;
    } }
    ClearCanvas(); }
    Movement();
    IntiGame();
    requestAnimationFrame(gameLoop); //tidak memperbolehkan tembok spawn sama dengan apel
} if (TembokX === Apel.x && TembokY === Apel.y) {
kosong = false;
}
//random spawn Apel for (var i = 0; i < Tembok.length; i++) {
function RandomizeApel() { if (Tembok[i].x === TembokX && Tembok[i].y === TembokY) {
    var pembataslebar = Math.floor(canvas.width / grid); kosong = false;
    var pembatastinggi = Math.floor(canvas.height / grid); break;
    }
    do { }
        Apel.x = Math.floor(Math.random() * pembataslebar) * grid; } while (kosong === false);
        Apel.y = Math.floor(Math.random() * pembatastinggi) * grid; Tembok.push({ x: TembokX, y: TembokY });
        }
        //mastiin Apel gak spawn di atas ular
        var isOverlapSnake = Ular.cells.some(cell => cell.x === Apel.x && cell.y === Apel.y);
       
        //mastiin Apel gak spawn di atas tembok
        var isOverlapWall = Tembok.some(bata => bata.x === Apel.x && bata.y === Apel.y);
    } while (isOverlapSnake || isOverlapWall); //nambah tembok tiap score kelipatan ... berapa enaknya ya? 😁
} function PenambahanTembok() {
if (ModeH) {
//random spawn tembok if (Tembok.length < Math.floor(score / 2)) {
function RandomSpawnWall() { RandomSpawnWall();
    var TembokX, TembokY; }
    var kosong; }
    var pembataslebar = Math.floor(canvas.width / grid); }
    var pembatastinggi = Math.floor(canvas.height / grid);
    //create tembok
    do {
        kosong = true;
        TembokX = Math.floor(Math.random() * pembataslebar) * grid;
        TembokY = Math.floor(Math.random() * pembatastinggi) * grid;
        //cek untuk posisi yang mau di kasih tembok ada/tidak ada ularnya
        for (var i = 0; i < Ular.cells.length; i++) {
            if (Math.abs(Ular.cells[i].x - TembokX) <= grid * 5 && Math.abs(Ular.cells[i].y - TembokY) <= grid * 5) {
                kosong = false;
                break;
            }
        }
        // tidak memperbolehkan tembok spawn sama dengan apel
        if (TembokX === Apel.x && TembokY === Apel.y) {
            kosong = false;
        }
        //cek agar tembok tidak menumpuk
        for (var i = 0; i < Tembok.length; i++) {
            if (Tembok[i].x === TembokX && Tembok[i].y === TembokY) {
                kosong = false;
                break;
            }
        }
    } while (kosong === false);
    Tembok.push({ x: TembokX, y: TembokY });
}
//nambah tembok tiap score kelipatan
function PenambahanTembok() {
    if (ModeH) {
        if (score > 0 && score % 2 === 0 && Tembok.length < 15 && Tembok.length < score / 2) {
             RandomSpawnWall();
        }
    }
}
//set dan update score //set dan update score
function UpdateScore(amount) { function UpdateScore(amount) {
@ -247,8 +192,8 @@ function PenambahanTembok() {
"<br>Speed: " + "<br>Speed: " +
speed; speed;
    PenambahanTembok(); PenambahanTembok();
} }
//tampilin gameover //tampilin gameover
function GameOver() { function GameOver() {
@ -282,222 +227,144 @@ function PenambahanTembok() {
form.submit(); form.submit();
} }
//reset isi canvas doang //reset isi canvas doang
function ClearCanvas() { function ClearCanvas() {
    content.clearRect(0, 0, canvas.width, canvas.height); content.clearRect(0, 0, canvas.width, canvas.height);
} }
//bagian utama: //bagian utama:
//ular makan dan mati pas ketemu badannya //ular makan dan mati pas ketemu badannya
function IntiGame() { function IntiGame() {
    // buat gambarnya bisa keluar //buat gambarnya bisa keluar
    content.drawImage(ApelImage, Apel.x, Apel.y, grid, grid); content.drawImage(ApelImage, Apel.x, Apel.y, grid, grid);
    Tembok.forEach(function (bata) {
    // Gambar Tembok content.drawImage(TembokImage, bata.x, bata.y, grid, grid);
    Tembok.forEach(function (bata) { });
        content.drawImage(TembokImage, bata.x, bata.y, grid, grid);
    });
    // Gambar Ular
Ular.cells.forEach(function (cell, index) { Ular.cells.forEach(function (cell, index) {
    var gambarUlar = null;
    //pala ulo
    if (index === 0) {
        if (Ular.dx === grid) gambarUlar = kepala.kanan;
        else if (Ular.dx === -grid) gambarUlar = kepala.kiri;
        else if (Ular.dy === -grid) gambarUlar = kepala.atas;
        else if (Ular.dy === grid) gambarUlar = kepala.bawah;
    }
    //bokong
    else if (index === Ular.cells.length - 1) {
        var sebelum = Ular.cells[index - 1];
        var arahEkor = getDirection(sebelum, cell);
        if (arahEkor === "kanan") gambarUlar = bokong.kanan;
        else if (arahEkor === "kiri") gambarUlar = bokong.kiri;
        else if (arahEkor === "atas") gambarUlar = bokong.atas;
        else if (arahEkor === "bawah") gambarUlar = bokong.bawah;
    }
    //badan
    else {
        var sebelum = Ular.cells[index - 1];
        var sesudah = Ular.cells[index + 1];
        var ArahMasuk = getDirection(sebelum, cell);
        var ArahKeluar = getDirection(cell, sesudah);
        if (ArahMasuk && ArahKeluar) {
        if (ArahMasuk === ArahKeluar) {
            // Badan Lurus (Horizontal/Vertical)
            if (ArahMasuk === "kiri" || ArahMasuk === "kanan") {
                gambarUlar = badan.horizontal;
            } else {
                gambarUlar = badan.vertical;
            }
        }
    else {
// belok AtasKanan
            if ((ArahMasuk === "bawah" && ArahKeluar === "kanan") || (ArahMasuk === "kiri" && ArahKeluar === "atas"))
gambarUlar = belok.AtasKanan;
           
// belok AtasKiri
else if ((ArahMasuk === "bawah" && ArahKeluar === "kiri") || (ArahMasuk === "kanan" && ArahKeluar === "atas"))
gambarUlar = belok.AtasKiri;
            // belok BawahKanan
else if ((ArahMasuk === "atas" && ArahKeluar === "kanan") || (ArahMasuk === "kiri" && ArahKeluar === "bawah"))
gambarUlar = belok.BawahKanan;
            // belok BawahKiri
else if ((ArahMasuk === "atas" && ArahKeluar === "kiri") || (ArahMasuk === "kanan" && ArahKeluar === "bawah"))
gambarUlar = belok.BawahKiri;
    }
    }
    }
    if (gambarUlar) {
        content.drawImage(gambarUlar, cell.x, cell.y, grid, grid);
    }
//ular makan apel
if (index === 0) { if (index === 0) {
    if (cell.x === Apel.x && cell.y === Apel.y) { // Logika Pemilihan Gambar Kepala Ular
        Ular.maxCells += 1; var posisiKepalaImage;
        UpdateScore(1); if (Ular.dx === grid) {
        RandomizeApel(); // KANAN
    } posisiKepalaImage = KepalaKanan;
} else if (Ular.dx === -grid) {
// KIRI
posisiKepalaImage = KepalaKiri;
} else if (Ular.dy === -grid) {
// ATAS
posisiKepalaImage = KepalAtas;
} else if (Ular.dy === grid) {
// BAWAH
posisiKepalaImage = KepalaBawah;
} else {
// Default, misalnya saat game baru mulai (dx=grid, dy=0, atau default awal)
posisiKepalaImage = KepalaKanan;
}
    //nabrak tembok content.drawImage(posisiKepalaImage, cell.x, cell.y, grid, grid);
    Tembok.forEach(function (bata) { } else {
        if (cell.x === bata.x && cell.y === bata.y) { content.drawImage(BadanUlarImage, cell.x, cell.y, grid, grid);
            GameOver(); }
        } });
    });
    //nabrak diri e dw //bagian generate ular
    for (var i = 1; i < Ular.cells.length; i++) { Ular.cells.forEach(function (cell, index) {
        if (cell.x === Ular.cells[i].x && cell.y === Ular.cells[i].y) { if (index === 0) {
            GameOver(); content.drawImage(KepalaUlarImage, cell.x, cell.y, grid, grid);
        } } else {
    } content.drawImage(BadanUlarImage, cell.x, cell.y, grid, grid);
    } }
    });
}
//update speed kalau score update //buat pas ular makan Apel
function Movement() { if (cell.x === Apel.x && cell.y === Apel.y) {
    if (++count < speed) return; Ular.maxCells += 1;
    if (ArahUlar > 0) ArahUlar--; UpdateScore(1);
    count = 0; RandomizeApel();
    }
    Ular.x += Ular.dx;
    Ular.y += Ular.dy;
   
    if (
        Ular.x < 0 ||
        Ular.x >= canvas.width ||
        Ular.y < 0 ||
        Ular.y >= canvas.height
    )
        GameOver();
       
    Ular.cells.unshift({ x: Ular.x, y: Ular.y });
    if (Ular.cells.length > Ular.maxCells) Ular.cells.pop(); //tabrak tembok = mati
} if (index === 0) {
Tembok.forEach(function (bata) {
if (cell.x === bata.x && cell.y === bata.y) {
GameOver();
}
});
}
//input keyboard //buat pas ular mati kena badan sendiri
function InputKeyboard() { for (var i = index + 1; i < Ular.cells.length; i++)
    document.addEventListener("keydown", function (e) { if (cell.x === Ular.cells[i].x && cell.y === Ular.cells[i].y)
        if (!GameStart) return; GameOver();
});
}
        if ( //update teks pada speed kalau score update
            ArahUlar == 0 && function Movement() {
            ((e.code == "KeyA" && Ular.dx === 0) || if (++count < speed) return;
                (e.code == "KeyD" && Ular.dx === 0)) if (ArahUlar > 0) ArahUlar--;
        ) { count = 0;
            ArahUlar = 1; Ular.x += Ular.dx;
            Ular.dx = e.code === "KeyA" ? -grid : grid; Ular.y += Ular.dy;
            Ular.dy = 0; if (
        } Ular.x < 0 ||
Ular.x >= canvas.width ||
Ular.y < 0 ||
Ular.y >= canvas.height
)
GameOver();
Ular.cells.unshift({ x: Ular.x, y: Ular.y });
if (Ular.cells.length > Ular.maxCells) Ular.cells.pop();
}
        else if ( //input keyboard
            ArahUlar == 0 && function InputKeyboard() {
            ((e.code === "KeyW" && Ular.dy === 0) || document.addEventListener("keydown", function (e) {
                (e.code == "KeyS" && Ular.dy === 0)) if (!GameStart) return;
        ) {
            ArahUlar = 1;
            Ular.dy = e.code == "KeyW" ? -grid : grid;
            Ular.dx = 0;
        }
        else if ( // jalan buat ular
            ArahUlar == 0 && if (
            ((e.code === "ArrowUp" && Ular.dy === 0) || ArahUlar == 0 &&
                (e.code == "ArrowDown" && Ular.dy === 0)) ((e.code == "KeyA" && Ular.dx === 0) ||
        ) { (e.code == "KeyD" && Ular.dx === 0))
            ArahUlar = 1; ) {
            Ular.dy = e.code == "ArrowUp" ? -grid : grid; ArahUlar = 1;
            Ular.dx = 0; Ular.dx = e.code === "KeyA" ? -grid : grid;
        } Ular.dy = 0;
} else if (
ArahUlar == 0 &&
((e.code === "KeyW" && Ular.dy === 0) ||
(e.code == "KeyS" && Ular.dy === 0))
) {
ArahUlar = 1;
Ular.dy = e.code == "KeyW" ? -grid : grid;
Ular.dx = 0;
} else if (
ArahUlar == 0 &&
((e.code === "ArrowUp" && Ular.dy === 0) ||
(e.code == "ArrowDown" && Ular.dy === 0))
) {
ArahUlar = 1;
Ular.dy = e.code == "ArrowUp" ? -grid : grid;
Ular.dx = 0;
} else if (
ArahUlar == 0 &&
((e.code === "ArrowLeft" && Ular.dx === 0) ||
(e.code == "ArrowRight" && Ular.dx === 0))
) {
ArahUlar = 1;
Ular.dx = e.code == "ArrowLeft" ? -grid : grid;
Ular.dy = 0;
}
        else if ( if (e.code === "KeyE" || e.code == "KeyQ")
            ArahUlar == 0 && speed =
            ((e.code === "ArrowLeft" && Ular.dx === 0) || e.code == "KeyE" && speed > 5
                (e.code == "ArrowRight" && Ular.dx === 0)) ? speed - 1
        ) { : e.code == "KeyQ" && speed < 15
            ArahUlar = 1; ? speed + 1
            Ular.dx = e.code == "ArrowLeft" ? -grid : grid; : speed;
            Ular.dy = 0; });
        } }
InputKeyboard();
        if (e.code === "KeyE" || e.code == "KeyQ") gameLoop();
            speed =
                e.code == "KeyE" && speed > 2
                    ? speed - 1
                    : e.code == "KeyQ" && speed < 30
                    ? speed + 1
                    : speed;
    });
}
// nti ae la daud
// function kirimSkorKeServer(skor, GameMode) {
//     console.log(`Mengirim skor ${skor} (Mode: ${GameMode}) ke server...`);
//     fetch('score.php', {
//         method: 'POST',
//         headers: {
//             'Content-Type': 'application/json',
//         },
//         body: JSON.stringify({
//             score: skor,
//             mode: GameMode
//         }),
//     })
//     .then(response => {
//         if (!response.ok) {
//               return response.json().then(error => { throw new Error(error.message || 'Gagal menyimpan skor'); });
//         }
//         return response.json();
//     })
//     .then(data => {
//         if (data.status === 'success') {
//             console.log('✅ Berhasil:', data.message);
//             if (data.message.includes('Highscore baru')) {
//                  highscore = skor;
//                  UpdateScore(0);
//             }
//         } else {
//             console.error('❌ Error Server:', data.message);
//         }
//     })
//     .catch((error) => {
//         console.error('⚠️ Error Jaringan atau Proses:', error.message);
//     });
// }
InputKeyboard();
gameLoop();

View File

@ -105,49 +105,6 @@
#keluar:hover { #keluar:hover {
background-color: #d32f2f; background-color: #d32f2f;
} }
.starting {
position: absolute;
top: 21px;
left: 51px;
width: 1056px;
height: 480px;
background-color: rgba(100, 100, 100, 0.8);
display: flex;
align-items: center;
justify-content: center;
z-index: 10;
}
#start {
position: absolute;
top: 21px;
left: 51px;
width: 1056px;
height: 480px;
background-color: rgba(100, 100, 100, 0.8);
display: flex;
align-items: center;
justify-content: center;
z-index: 10;
}
.popAwal {
text-align: center;
border-radius: 10px;
background-color: rgb(50, 50, 50);
padding: 30px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
width: 80%;
max-width: 400px;
}
.popAwal h1 {
margin-left: 30px;
margin-right: 25px;
}
#keluar {
background-color: #f44336;
}
#keluar:hover {
background-color: #d32f2f;
}
.icon { .icon {
width: 70px; width: 70px;
height: 70px; height: 70px;

View File

@ -7,22 +7,8 @@ include "koneksi.php";
<html lang="en"> <html lang="en">
<style> <style>
body { body {
background: linear-gradient(to bottom right, #A3D438, #004D40);
height: 568px; height: 568px;
rgb(24, 24, 24)
}
div {
border-radius: 7px;
justify-content: center;
justify-self: center;
width: 540px;
height: 280px;
background-image: url("succes/loginSuccess.png");
background-size: 100% 100%;
background-position: center;
background-repeat: no-repeat;
}
h3 {
margin-top: 50px;
} }
</style> </style>
<head> <head>
@ -31,7 +17,6 @@ include "koneksi.php";
<title>Halaman: Daftar</title> <title>Halaman: Daftar</title>
</head> </head>
<body> <body>
<div>
<?php <?php
if(isset($_POST['username'])) { if(isset($_POST['username'])) {
$nama = $_POST['nama']; $nama = $_POST['nama'];
@ -76,6 +61,6 @@ include "koneksi.php";
</tr> </tr>
</table> </table>
</form> </form>
</div>
</body> </body>
</html> </html>

View File

@ -1,5 +1,4 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- tes merge -->
<html> <html>
<head> <head>
<link rel="stylesheet" href="GameStyle.css" /> <link rel="stylesheet" href="GameStyle.css" />
@ -18,7 +17,7 @@
<h1>Snake</h1> <h1>Snake</h1>
</div> </div>
</header> </header>
<img src="" alt="">
<!-- main konten --> <!-- main konten -->
<div class="HalamanFull"> <div class="HalamanFull">
<canvas width="1056" height="480" id="game"></canvas> <canvas width="1056" height="480" id="game"></canvas>

View File

@ -11,29 +11,23 @@ if(!isset($_SESSION['username'])) {
<html lang="id"> <html lang="id">
<style> <style>
body { body {
background: linear-gradient(to bottom right, #A3D438, #004D40);
height: 526px; height: 526px;
background-color: rgb(24, 24, 24);
} }
h1 { h1 {
text-align: center; text-align: center;
margin-top: 10%; margin-top: 10%;
font-size: 40px; font-size: 40px;
box-sizing: border-box; box-sizing: border-box;
color: white;
}
h3 {
color: white;
} }
.container { .container {
padding: 5px; /* Nanti dihapus */ padding: 5px;
border: 2px solid; /* Nanti dihapus */
border-radius: 7pt; /* Nanti dihapus */ border-radius: 7pt; /* Nanti dihapus */
width: 65%; width: 65%;
height: 55%; height: 55%;
justify-self: center; justify-self: center;
background-image: url("gameOver/gameOver.png");
background-size: 100% 100%;
background-position: center;
background-repeat: no-repeat;
/* background-image: url(); */ /* background-image: url(); */
} }
@ -42,9 +36,7 @@ if(!isset($_SESSION['username'])) {
margin-top: 5%; margin-top: 5%;
width: 50%; width: 50%;
margin-bottom: 5%; margin-bottom: 5%;
border: 2px solid #5c5b58; border: 1px solid;
background-color: #5c5b58;
color: white;
border-radius: 3pt; border-radius: 3pt;
padding: 2px; padding: 2px;
justify-self: center; justify-self: center;

View File

@ -33,24 +33,9 @@ if($result && mysqli_num_rows($result) > 0) {
<!DOCTYPE html> <!DOCTYPE html>
<html lang="id"> <html lang="id">
<style> <style>
.container {
padding: 10px;
justify-items: center;
justify-self: center;
border-radius: 7pt;
width: 540px;
height: 540px;
background-image: url("leaderboard/Leaderboard.png");
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
body { body {
background: linear-gradient(to bottom right, #A3D438, #004D40);
height: 568px; height: 568px;
background-color: rgb(24, 24, 24);
}
table {
margin-top: 20px;
} }
</style> </style>
<head> <head>
@ -61,7 +46,6 @@ if($result && mysqli_num_rows($result) > 0) {
<link rel="stylesheet" href=""> <link rel="stylesheet" href="">
</head> </head>
<body> <body>
<div class=container>
<table> <table>
<thead> <thead>
<tr> <tr>
@ -96,6 +80,5 @@ if($result && mysqli_num_rows($result) > 0) {
</tbody> </tbody>
</table> </table>
</div>
</body> </body>
</html> </html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@ -23,31 +23,15 @@ if(isset($_POST['username'])) {
<html lang="id"> <html lang="id">
<style> <style>
body { body {
background-color: rgb(24, 24, 24); background: linear-gradient(to bottom right, #A3D438, #004D40);
/* height: 568px; */
} }
.login { .login {
/* background-image: url('login/login.png'); */ /* background-image: url('login/login.png'); */
height: 568px;
margin-top: 0;
background-image: url("login/log.png");
background-size: 50% 80%;
background-position: center;
background-repeat: no-repeat; background-repeat: no-repeat;
} background-size: 300px 190px;
h3 { background-position: center top;
color: white; height: 568px;
}
table {
padding: 42px;
font-size: 50px;
}
a {
color: white;
font-size: 21px;
}
input {
color: white;
background-color: rgb(24, 24, 24);
} }
</style> </style>
<head> <head>
@ -62,47 +46,21 @@ if(isset($_POST['username'])) {
<table align="center"> <table align="center">
<tr> <tr>
<td colspan="2" align="center"> <td colspan="2" align="center">
<div id="h3">
<h3>Login User</h3> <h3>Login User</h3>
</div>
</td> </td>
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
<td align="center"><input type="text" name="username" placeholder="Username" style="border: none"></td> <td><input type="text" name="username" placeholder="Username" style="border: none"></td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr>
<td></td>
<td align="center"><input type="password" name="password" placeholder="Password" style="border: none"></td>
<!-- <td><input type="password" name="password" placeholder="Password" style="border: none"></td> -->
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
<td align="center"> <td><input type="password" name="password" placeholder="Password" style="border: none"></td>
</tr>
<tr>
<td></td>
<td>
<button type="submit">Masuk</button> <button type="submit">Masuk</button>
<a href="daftar.php">Daftar</a> <a href="daftar.php">Daftar</a>
</td> </td>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,81 +0,0 @@
<?php
session_start();
require_once 'koneksi.php';
header('Content-Type: application/json');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['status' => 'error', 'message' => 'Metode tidak diizinkan.']);
exit;
}
if (!isset($_SESSION['id_user']) && !isset($_SESSION['username'])) {
http_response_code(401);
echo json_encode(['status' => 'error', 'message' => 'Anda harus login untuk menyimpan skor.']);
exit;
}
$input = json_decode(file_get_contents('php://input'), true);
$final_score = (int)($input['score'] ?? 0);
if ($final_score <= 0) {
http_response_code(400);
echo json_encode(['status' => 'error', 'message' => 'Skor tidak valid atau 0.']);
exit;
}
$user_id = null;
if (isset($_SESSION['id_user'])) {
$user_id = $_SESSION['id_user'];
} elseif (isset($_SESSION['username'])) {
$username = $_SESSION['username'];
$getID_sql = "SELECT id_user FROM users WHERE username = '$username'";
$result_id = mysqli_query($koneksi, $getID_sql);
if ($result_id && mysqli_num_rows($result_id) > 0) {
$row = mysqli_fetch_assoc($result_id);
$user_id = $row['id_user'];
}
}
if (!$user_id) {
http_response_code(401);
echo json_encode(['status' => 'error', 'message' => 'ID pengguna tidak ditemukan.']);
exit;
}
$sql = "UPDATE users SET score = ? WHERE id_user = ? AND score < ?";
if ($stmt = mysqli_prepare($koneksi, $sql)) {
mysqli_stmt_bind_param($stmt, "iii", $final_score, $user_id, $final_score);
$exec = mysqli_stmt_execute($stmt);
if ($exec) {
$rows_affected = mysqli_stmt_affected_rows($stmt);
if ($rows_affected > 0) {
$message = 'Skor berhasil diperbarui. Ini adalah Highscore baru!';
} else {
$message = 'Skor berhasil dikirim, tetapi skor tidak lebih tinggi dari Highscore sebelumnya.';
}
echo json_encode([
'status' => 'success',
'message' => $message,
'skor_terkirim' => $final_score
]);
} else {
http_response_code(500);
echo json_encode(['status' => 'error', 'message' => 'Gagal menjalankan kueri update: ' . mysqli_stmt_error($stmt)]);
}
mysqli_stmt_close($stmt);
} else {
http_response_code(500);
echo json_encode(['status' => 'error', 'message' => 'Gagal mempersiapkan statement: ' . mysqli_error($koneksi)]);
}
?>