score nya udh bisa ke update di database
This commit is contained in:
parent
445d195adf
commit
3df391b29b
23
GameLogic.js
23
GameLogic.js
@ -175,6 +175,7 @@
|
|||||||
//set dan update score
|
//set dan update score
|
||||||
function UpdateScore(amount) {
|
function UpdateScore(amount) {
|
||||||
score = amount > 0 ? score + amount : 0;
|
score = amount > 0 ? score + amount : 0;
|
||||||
|
console.log("UPDATE SCORE , score:",score);
|
||||||
highscore = score > highscore ? score : highscore;
|
highscore = score > highscore ? score : highscore;
|
||||||
Text.innerHTML =
|
Text.innerHTML =
|
||||||
"Score: " +
|
"Score: " +
|
||||||
@ -191,11 +192,33 @@
|
|||||||
function GameOver() {
|
function GameOver() {
|
||||||
GameStart = false;
|
GameStart = false;
|
||||||
ClearCanvas();
|
ClearCanvas();
|
||||||
|
|
||||||
|
// Simpan score ke database
|
||||||
|
saveScore(score);
|
||||||
|
|
||||||
// TAMPILKAN POP-UP GAME OVER
|
// TAMPILKAN POP-UP GAME OVER
|
||||||
ScoreMain.innerHTML = "Score: " + score;
|
ScoreMain.innerHTML = "Score: " + score;
|
||||||
UpDead.style.display = "flex";
|
UpDead.style.display = "flex";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//fungsi untuk menyimpan score ke database
|
||||||
|
function saveScore(finalScore) {
|
||||||
|
console.log("SAVING SCORE , score:",finalScore);
|
||||||
|
// Buat form tersembunyi untuk submit score
|
||||||
|
var form = document.createElement('form');
|
||||||
|
form.method = 'POST';
|
||||||
|
form.action = 'simpan_score.php';
|
||||||
|
form.style.display = 'none';
|
||||||
|
|
||||||
|
var scoreInput = document.createElement('input');
|
||||||
|
scoreInput.type = 'hidden';
|
||||||
|
scoreInput.name = 'score';
|
||||||
|
scoreInput.value = finalScore;
|
||||||
|
|
||||||
|
form.appendChild(scoreInput);
|
||||||
|
document.body.appendChild(form);
|
||||||
|
form.submit();
|
||||||
|
}
|
||||||
|
|
||||||
//reset isi canvas doang
|
//reset isi canvas doang
|
||||||
function ClearCanvas() {
|
function ClearCanvas() {
|
||||||
|
|||||||
28
api_score.php
Normal file
28
api_score.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once "koneksi.php";
|
||||||
|
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
|
$input = json_decode(file_get_contents('php://input'), true);
|
||||||
|
|
||||||
|
if (isset($input['score']) && isset($_SESSION['users'])) {
|
||||||
|
$score = (int)$input['score'];
|
||||||
|
$username = $_SESSION['users']['username'];
|
||||||
|
|
||||||
|
$sql = "UPDATE users SET score = $score WHERE username = '$username' AND score < $score";
|
||||||
|
$result = mysqli_query($koneksi, $sql);
|
||||||
|
|
||||||
|
if ($result) {
|
||||||
|
echo json_encode(['success' => true, 'message' => 'Score saved', 'score' => $score]);
|
||||||
|
} else {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Database error']);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Invalid data']);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Method not allowed']);
|
||||||
|
}
|
||||||
|
?>
|
||||||
66
game.php
Normal file
66
game.php
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
// Cek apakah user sudah login
|
||||||
|
if (!isset($_SESSION['users'])) {
|
||||||
|
header("Location: login.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="GameStyle.css" />
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Coral+Pixels&family=Jacquarda+Bastarda+9&family=Pixelify+Sans:wght@400..700&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- header -->
|
||||||
|
<header>
|
||||||
|
<div class="centered">
|
||||||
|
<div class="icon"></div>
|
||||||
|
<h1>Snake - <?php echo htmlspecialchars($_SESSION['users']['nama']); ?></h1>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<!-- main konten -->
|
||||||
|
<div class="HalamanFull">
|
||||||
|
<canvas width="1056" height="480" id="game"></canvas>
|
||||||
|
<div id="gameover-overlay" class="starting" style="display: none">
|
||||||
|
<div class="popAwal">
|
||||||
|
<h1 style="color: red" id="gameover-title">YOU DIED</h1>
|
||||||
|
<p id="gameover-score">Score: 0</p>
|
||||||
|
<button id="ulangi" class="modegame">Main lagi?</button>
|
||||||
|
<a href="index.php">
|
||||||
|
<button id="keluar" class="">Keluar?</button>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="gameover" class="gameover"></div>
|
||||||
|
<div id="start" class="starting">
|
||||||
|
<div class="popAwal">
|
||||||
|
<h1>Start Game?</h1>
|
||||||
|
<p>Silakan Pilih Mode</p>
|
||||||
|
<button id="mode-normal" class="modegame">Normal</button>
|
||||||
|
<button id="mode-tambahan" class="modegame">Normal++</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div id="text" class="text"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- footer -->
|
||||||
|
<footer class="centered">
|
||||||
|
<div class="centered">
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!-- akhir html body -->
|
||||||
|
<script src="GameLogic.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
11
index.php
11
index.php
@ -1,8 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
if(!isset($_SESSION['users'])) {
|
if(!isset($_SESSION['username'])) {
|
||||||
header('location:login.php');
|
header('location:login.php');
|
||||||
|
exit;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
@ -57,23 +58,23 @@ if(!isset($_SESSION['users'])) {
|
|||||||
<a href="logout.php">Logout</a> -->
|
<a href="logout.php">Logout</a> -->
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<h3>Selamat datang, <?php echo $_SESSION['users']['nama'] ?></h3>
|
<h3>Selamat datang, <?php echo isset($_SESSION['users']['nama']) ? htmlspecialchars($_SESSION['users']['nama']) : 'User' ?></h3>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<!-- <h1>EAT THAT APPLE</h1> -->
|
<!-- <h1>EAT THAT APPLE</h1> -->
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="b2">
|
<div class="b2">
|
||||||
<a href="game.html">
|
<a href="game.php">
|
||||||
<div id="button">Play Game</div>
|
<div id="button">Play Game</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="b2">
|
<div class="b2">
|
||||||
<a href="http://localhost/uas_sem_1/leaderboard.php">
|
<a href="leaderboard.php">
|
||||||
<div id="button">Leaderboard</div>
|
<div id="button">Leaderboard</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="b2">
|
<div class="b2">
|
||||||
<a href="http://localhost/uas_sem_1/logout.php">
|
<a href="logout.php">
|
||||||
<div id="button">Logout</div>
|
<div id="button">Logout</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,22 +1,22 @@
|
|||||||
<?php
|
<?php
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 1);
|
||||||
session_start();
|
session_start();
|
||||||
require_once "koneksi.php";
|
require_once "koneksi.php";
|
||||||
|
|
||||||
|
$nama = "";
|
||||||
if (isset($_SESSION['username'])) {
|
if (isset($_SESSION['username'])) {
|
||||||
$nama = $_SESSION['username'];
|
$nama = (string)$_SESSION['username'];
|
||||||
} else {
|
|
||||||
$nama = "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$score = 0;
|
$score = 0;
|
||||||
|
|
||||||
if (!empty($nama)) {
|
if (!empty($nama)) {
|
||||||
$getScore = "SELECT score FROM users WHERE username = '$nama'";
|
$getScore = "SELECT score FROM users WHERE username = '" . mysqli_real_escape_string($koneksi, $nama) . "'";
|
||||||
$resultMe = mysqli_query($koneksi, $getScore);
|
$resultMe = mysqli_query($koneksi, $getScore);
|
||||||
|
|
||||||
if ($resultMe && mysqli_num_rows($resultMe) > 0) {
|
if ($resultMe && mysqli_num_rows($resultMe) > 0) {
|
||||||
$row = mysqli_fetch_assoc($resultMe);
|
$row = mysqli_fetch_assoc($resultMe);
|
||||||
$score = $row['score'];
|
$score = (int)$row['score'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ $sql = "SELECT username, score FROM users ORDER BY score DESC LIMIT 10";
|
|||||||
$result = mysqli_query($koneksi, $sql);
|
$result = mysqli_query($koneksi, $sql);
|
||||||
$leaderboard = [];
|
$leaderboard = [];
|
||||||
|
|
||||||
if($result) {
|
if($result && mysqli_num_rows($result) > 0) {
|
||||||
$leaderboard = mysqli_fetch_all($result, MYSQLI_ASSOC);
|
$leaderboard = mysqli_fetch_all($result, MYSQLI_ASSOC);
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
@ -57,7 +57,7 @@ if($result) {
|
|||||||
<tbody>
|
<tbody>
|
||||||
<?php
|
<?php
|
||||||
$peringkat = 1;
|
$peringkat = 1;
|
||||||
if (!empty($leaderboard)) {
|
if (!empty($leaderboard) && is_array($leaderboard)) {
|
||||||
foreach ($leaderboard as $pemain):
|
foreach ($leaderboard as $pemain):
|
||||||
?>
|
?>
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ if($result) {
|
|||||||
<td><?php echo $peringkat; ?></td>
|
<td><?php echo $peringkat; ?></td>
|
||||||
<td><?php echo htmlspecialchars($pemain['username']); ?></td>
|
<td><?php echo htmlspecialchars($pemain['username']); ?></td>
|
||||||
|
|
||||||
<td><?php echo $pemain['score']; ?> PTS</td>
|
<td><?php echo (int)$pemain['score']; ?> PTS</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ if(isset($_POST['username'])) {
|
|||||||
if(mysqli_num_rows($query) > 0) {
|
if(mysqli_num_rows($query) > 0) {
|
||||||
$data = mysqli_fetch_array($query);
|
$data = mysqli_fetch_array($query);
|
||||||
$_SESSION['users'] = $data;
|
$_SESSION['users'] = $data;
|
||||||
$_SESSION['username'] = $data = ['username'];
|
$_SESSION['username'] = $data['username'];
|
||||||
echo '<script>location.href="index.php";</script>';
|
echo '<script>location.href="index.php";</script>';
|
||||||
} else {
|
} else {
|
||||||
echo '<script>alert("Username atau Password tidak sesuai");</script>';
|
echo '<script>alert("Username atau Password tidak sesuai");</script>';
|
||||||
|
|||||||
38
save_score.php
Normal file
38
save_score.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once "koneksi.php";
|
||||||
|
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
|
$input = json_decode(file_get_contents('php://input'), true);
|
||||||
|
$score = isset($input['score']) ? (int)$input['score'] : 0;
|
||||||
|
|
||||||
|
if (!isset($_SESSION['users'])) {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'User not logged in']);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$username = $_SESSION['users']['username'];
|
||||||
|
|
||||||
|
// Update score jika lebih tinggi dari score sebelumnya
|
||||||
|
$sql = "UPDATE users SET score = ? WHERE username = ? AND score < ?";
|
||||||
|
$stmt = mysqli_prepare($koneksi, $sql);
|
||||||
|
|
||||||
|
if ($stmt) {
|
||||||
|
mysqli_stmt_bind_param($stmt, "isi", $score, $username, $score);
|
||||||
|
mysqli_stmt_execute($stmt);
|
||||||
|
|
||||||
|
if (mysqli_stmt_affected_rows($stmt) > 0) {
|
||||||
|
echo json_encode(['success' => true, 'message' => 'Score updated']);
|
||||||
|
} else {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Score not higher than current']);
|
||||||
|
}
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
} else {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Database error']);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo json_encode(['success' => false, 'message' => 'Invalid request method']);
|
||||||
|
}
|
||||||
|
?>
|
||||||
19
simpan_score.php
Normal file
19
simpan_score.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
require_once "koneksi.php";
|
||||||
|
|
||||||
|
if (isset($_POST['score']) && isset($_SESSION['users'])) {
|
||||||
|
$score = (int)$_POST['score'];
|
||||||
|
$username = $_SESSION['users']['username'];
|
||||||
|
|
||||||
|
$sql = "UPDATE users SET score = $score WHERE username = '$username' AND (score < $score OR score IS NULL)";
|
||||||
|
$result = mysqli_query($koneksi, $sql);
|
||||||
|
|
||||||
|
if ($result) {
|
||||||
|
echo "<script>console.log('Score $score tersimpan untuk $username');</script>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirect kembali ke game
|
||||||
|
echo "<script>window.history.back();</script>";
|
||||||
|
?>
|
||||||
@ -3,7 +3,7 @@
|
|||||||
-- https://www.phpmyadmin.net/
|
-- https://www.phpmyadmin.net/
|
||||||
--
|
--
|
||||||
-- Host: localhost:3306
|
-- Host: localhost:3306
|
||||||
-- Generation Time: Dec 03, 2025 at 05:17 AM
|
-- Generation Time: Dec 14, 2025 at 08:39 AM
|
||||||
-- Server version: 8.0.30
|
-- Server version: 8.0.30
|
||||||
-- PHP Version: 8.1.10
|
-- PHP Version: 8.1.10
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ CREATE TABLE `users` (
|
|||||||
`nama` varchar(255) DEFAULT NULL,
|
`nama` varchar(255) DEFAULT NULL,
|
||||||
`username` varchar(225) DEFAULT NULL,
|
`username` varchar(225) DEFAULT NULL,
|
||||||
`password` varchar(255) DEFAULT NULL,
|
`password` varchar(255) DEFAULT NULL,
|
||||||
`score` int NOT NULL
|
`score` int NOT NULL DEFAULT '0'
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||||
|
|
||||||
--
|
--
|
||||||
@ -41,7 +41,12 @@ CREATE TABLE `users` (
|
|||||||
|
|
||||||
INSERT INTO `users` (`id_user`, `nama`, `username`, `password`, `score`) VALUES
|
INSERT INTO `users` (`id_user`, `nama`, `username`, `password`, `score`) VALUES
|
||||||
(1, 'Chris Daud Koroh', 'daudkoroh', '88d602f1ad6d62b9a11c688ab47fed22', 20),
|
(1, 'Chris Daud Koroh', 'daudkoroh', '88d602f1ad6d62b9a11c688ab47fed22', 20),
|
||||||
(2, 'Zefanya Isaac', 'zefanya', 'de413c0365e3c88d8b3315f9d90b98ae', 68);
|
(2, 'Zefanya Isaac', 'zefanya', 'de413c0365e3c88d8b3315f9d90b98ae', 68),
|
||||||
|
(4, 'ygygyg', 'yatim', 'c929fedbfce1bdc014ed835a0cdf35f4', 0),
|
||||||
|
(5, 'hentai', 'untung', '25f9e794323b453885f5181f1b624d0b', 0),
|
||||||
|
(6, 'kepin', 'kepin', '202cb962ac59075b964b07152d234b70', 0),
|
||||||
|
(8, 'ayam', 'ayam', '202cb962ac59075b964b07152d234b70', 2),
|
||||||
|
(9, 'ayam2', 'ayam2', '289dff07669d7a23de0ef88d2f7129e7', 35);
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Indexes for dumped tables
|
-- Indexes for dumped tables
|
||||||
@ -61,7 +66,7 @@ ALTER TABLE `users`
|
|||||||
-- AUTO_INCREMENT for table `users`
|
-- AUTO_INCREMENT for table `users`
|
||||||
--
|
--
|
||||||
ALTER TABLE `users`
|
ALTER TABLE `users`
|
||||||
MODIFY `id_user` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
|
MODIFY `id_user` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
Loading…
x
Reference in New Issue
Block a user