Compare commits

..

19 Commits
daud ... main

Author SHA1 Message Date
d0459d99f8 y 2025-12-05 16:00:32 +07:00
77de57304e score ke database 2025-12-05 12:50:38 +07:00
df3f478734 gabungkan smua 2025-12-05 11:37:08 +07:00
77a7a4a342 gabungin semuanya 2025-12-05 11:36:08 +07:00
e30ef4a019 update database 2025-12-03 12:21:15 +07:00
c2a00e3238 leaderboard 2025-12-03 12:01:37 +07:00
b6fbbc31c7 teks 2025-12-01 12:15:56 +07:00
0bc467a684 . 2025-12-01 09:43:50 +07:00
a74311d4d8 +control pakai tanda panah 2025-12-01 09:29:55 +07:00
9171afb11d update branch main 2025-11-29 22:02:13 +07:00
michaelailbert
6a4e0e3b09 tampilan halaman homescreen 2025-11-29 15:48:16 +07:00
19cdafd808 misah js css 2025-11-26 22:38:55 +07:00
cd26b1b2f1 tembok dan ukuran 2025-11-26 21:28:34 +07:00
7e654bfe9c tembok update 2025-11-26 18:44:19 +07:00
0e7035e018 baru game 2025-11-24 13:54:52 +07:00
9a32dfa6a9 gambar di file 2025-11-24 13:38:17 +07:00
76919ff7d6 foto bagian wenzel 2025-11-24 13:32:52 +07:00
b00be0b6f9 Merge branch 'main' of https://git-eng.ukwms.ac.id/2526-web/Kelompok04-UlardanApel-Wenzel-Daud-Boanerges 2025-11-24 13:29:48 +07:00
2f3361e6b2 js belum di pisah 2025-11-24 13:28:11 +07:00
30 changed files with 855 additions and 63 deletions

340
GameLogic.js Normal file
View File

@ -0,0 +1,340 @@
//bagian tempat main ama buat generate game 2d
var canvas = document.getElementById("game");
var content = canvas.getContext("2d");
const Text = document.getElementById("text");
const UpDead = document.getElementById("gameover-overlay");
const ScoreMain = document.getElementById("gameover-score");
const PlayAgain = document.getElementById("ulangi");
const Udahan = document.getElementById("keluar");
//settingan awal
var grid = 24;
var count = 0;
var speed = 10;
var score = 0;
var highscore = 0;
var ArahUlar = 0;
var GameOverTimer = 0;
var GameStart = false;
var ModeH = false;
const persiapan = document.getElementById("start");
//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
var BadanUlarImage = new Image();
BadanUlarImage.src = "image/BadanVertikal.png";
// ↑ badan ular
var ApelImage = new Image();
ApelImage.src = "image/ApelLayer.png"; // Apel
var TembokImage = new Image();
TembokImage.src = "image/Tembok.png"; // Tembok Batagor
//set posisi ular dan Apel
var Ular = { x: 528, y: 240, dx: grid, dy: 0, cells: [], maxCells: 4 };
var Apel = { x: 0, y: 0 };
var Tembok = [];
UpdateScore(0);
RandomizeApel();
//mastiin gambar external generate dulu sebelum game start
KepalaUlarImage.onload = function () {
function gameLoop() {}
};
//ngatur biar game ga langsung jalan
function StartingGame(menantang) {
ModeH = menantang;
persiapan.style.display = "none";
if (ModeH) {
RandomSpawnWall();
} else {
Tembok = [];
}
GameStart = true;
}
//buat ngatur batu spwan apa ga nanti
document
.getElementById("mode-normal")
.addEventListener("click", function () {
StartingGame(false);
});
document
.getElementById("mode-tambahan")
.addEventListener("click", function () {
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";
});
Udahan.addEventListener("click", function () {
UpDead.style.display = "none";
resetGame();
});
//gameover terus ngatur ular ke setting awal
function gameLoop() {
if (!GameStart) {
requestAnimationFrame(gameLoop);
return;
}
ClearCanvas();
Movement();
IntiGame();
requestAnimationFrame(gameLoop);
}
//random spawn Apel
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;
}
//random spawn tembok
function 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 (Ular.cells[i].x === TembokX && Ular.cells[i].y === TembokY) {
kosong = false;
break;
}
}
//tidak memperbolehkan tembok spawn sama dengan apel
if (TembokX === Apel.x && TembokY === Apel.y) {
kosong = false;
}
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 ... berapa enaknya ya? 😁
function PenambahanTembok() {
if (ModeH) {
if (Tembok.length < Math.floor(score / 2)) {
RandomSpawnWall();
}
}
}
//set dan update score
function UpdateScore(amount) {
score = amount > 0 ? score + amount : 0;
highscore = score > highscore ? score : highscore;
Text.innerHTML =
"Score: " +
score +
"<br>Highscore: " +
highscore +
"<br>Speed: " +
speed;
PenambahanTembok();
}
//tampilin gameover
function GameOver() {
GameStart = false;
ClearCanvas();
// TAMPILKAN POP-UP GAME OVER
ScoreMain.innerHTML = "Score: " + score;
UpDead.style.display = "flex";
}
//reset isi canvas doang
function ClearCanvas() {
content.clearRect(0, 0, canvas.width, canvas.height);
}
//bagian utama:
//ular makan dan mati pas ketemu badannya
function IntiGame() {
//buat gambarnya bisa keluar
content.drawImage(ApelImage, Apel.x, Apel.y, grid, grid);
Tembok.forEach(function (bata) {
content.drawImage(TembokImage, bata.x, bata.y, grid, grid);
});
Ular.cells.forEach(function (cell, index) {
if (index === 0) {
// Logika Pemilihan Gambar Kepala Ular
var posisiKepalaImage;
if (Ular.dx === grid) {
// 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;
}
content.drawImage(posisiKepalaImage, cell.x, cell.y, grid, grid);
} else {
content.drawImage(BadanUlarImage, cell.x, cell.y, grid, grid);
}
});
//bagian generate ular
Ular.cells.forEach(function (cell, index) {
if (index === 0) {
content.drawImage(KepalaUlarImage, cell.x, cell.y, grid, grid);
} else {
content.drawImage(BadanUlarImage, cell.x, cell.y, grid, grid);
}
//buat pas ular makan Apel
if (cell.x === Apel.x && cell.y === Apel.y) {
Ular.maxCells += 1;
UpdateScore(1);
RandomizeApel();
}
//tabrak tembok = mati
if (index === 0) {
Tembok.forEach(function (bata) {
if (cell.x === bata.x && cell.y === bata.y) {
GameOver();
}
});
}
//buat pas ular mati kena badan sendiri
for (var i = index + 1; i < Ular.cells.length; i++)
if (cell.x === Ular.cells[i].x && cell.y === Ular.cells[i].y)
GameOver();
});
}
//update teks pada speed kalau score update
function Movement() {
if (++count < speed) return;
if (ArahUlar > 0) ArahUlar--;
count = 0;
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();
}
//input keyboard
function InputKeyboard() {
document.addEventListener("keydown", function (e) {
if (!GameStart) return;
// jalan buat ular
if (
ArahUlar == 0 &&
((e.code == "KeyA" && Ular.dx === 0) ||
(e.code == "KeyD" && Ular.dx === 0))
) {
ArahUlar = 1;
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;
}
if (e.code === "KeyE" || e.code == "KeyQ")
speed =
e.code == "KeyE" && speed > 5
? speed - 1
: e.code == "KeyQ" && speed < 15
? speed + 1
: speed;
});
}
InputKeyboard();
gameLoop();

141
GameStyle.css Normal file
View File

@ -0,0 +1,141 @@
body {
background-color: rgb(24, 24, 24);
color: white;
text-align: left;
font-family: "Pixelify Sans", sans-serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
font-size: 24px;
}
header,
footer,
.HalamanFull {
padding-left: 50px;
padding-right: 50px;
}
header,
footer {
background-color: rgb(18, 18, 18);
display: flex;
align-items: center;
justify-content: space-between;
}
.HalamanFull {
position: relative;
background-color: rgb(28, 28, 28);
color: white;
height: 100%;
display: flex;
align-items: left;
justify-content: left;
padding-bottom: 20px;
padding-top: 20px;
}
.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 {
width: 70px;
height: 70px;
background-image: url("https://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Nazi_Swastika.svg/2048px-Nazi_Swastika.svg.png");
background-size: cover;
margin-right: 20px;
margin-left: 20px;
}
.centered {
display: flex;
align-items: center;
justify-content: center;
}
h1 {
font-size: 40px;
margin-right: 100px;
}
.text {
padding-top: 30px;
padding-left: 50px;
color: white;
}
#gameover {
color: red;
font-size: 90px;
position: absolute;
top: 280px;
left: 300px;
}
#game {
background: rgb(192, 232, 255);
border: 1px solid white;
}
.modegame {
padding: 15px 30px;
font-size: 20px;
cursor: pointer;
color: rgb(255, 255, 255);
border: none;
border-radius: 5px;
margin: 10px 5px;
display: block;
width: 90%;
max-width: 300px;
margin-left: auto;
margin-right: auto;
transition: background-color 0.2s, color 0.25s;
font-family: "Pixelify Sans", sans-serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
}
#mode-normal {
background-color: #73e4c2;
}
#mode-normal:hover {
background-color: #57c9aa;
}
#mode-tambahan {
background-color: #9572e7;
}
#mode-tambahan:hover {
background-color: #703db3;
}

59
game.html Normal file
View File

@ -0,0 +1,59 @@
<!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</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="http://localhost/uas_sem_1/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 class="text">Controls: <br />Movement: W A S D <br /><br /></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>

BIN
gameOver/gameOver.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

48
home.html Normal file
View File

@ -0,0 +1,48 @@
<html>
<style>
body {
background-image: url();
}
h1 {
text-align: center;
margin-top: 10%;
font-size: 85px;
}
.container {
padding: 5px;
border: 2px solid; /* Nanti dihapus */
border-radius: 7pt; /* Nanti dihapus */
width: 70%;
justify-self: center;
background-image: url();
}
#button {
font-size: 35px;
margin-top: 5%;
width: 50%;
margin-bottom: 5%;
border: 1px solid;
border-radius: 3pt;
padding: 2px;
justify-self: center;
text-align: center;
}
</style>
<body>
<h1>EAT THAT APPLE</h1>
<div class="container">
<a href="game.html">
<div id="button">Play Game</div>
</a>
<div id="button">Leaderboard</div>
<div id="button">Logout</div>
</div>
<input type="text">
</body>
<script></script>
</html>

BIN
image/ApelLayer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

BIN
image/BadanHorizontal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 B

BIN
image/BadanVertikal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

BIN
image/BelokAtasKanan.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

BIN
image/BelokAtasKiri.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

BIN
image/BelokBawahKanan.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

BIN
image/BelokBawahKiri.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

BIN
image/PialaLayer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

BIN
image/Tembok.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

View File

@ -1,26 +1,72 @@
<?php <?php
// buat inisialisasi session
session_start(); session_start();
// mengecek apakah ada session user yang aktif, jika tidak arahkan ke login.php
if(!isset($_SESSION['users'])) { if(!isset($_SESSION['users'])) {
header('location:login.php'); // arahkan ke login.php header('location:login.php');
} }
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="id"> <html lang="id">
<head> <style>
body {
background-image: url();
}
h1 {
text-align: center;
margin-top: 10%;
font-size: 85px;
}
.container {
padding: 5px;
border: 2px solid; /* Nanti dihapus */
border-radius: 7pt; /* Nanti dihapus */
width: 70%;
justify-self: center;
background-image: url();
}
#button {
font-size: 35px;
margin-top: 5%;
width: 50%;
margin-bottom: 5%;
border: 1px solid;
border-radius: 3pt;
padding: 2px;
justify-self: center;
text-align: center;
}
</style>
<head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Halaman ke-1</title> <title>Halaman ke-1</title>
</head> </head>
<body style='text-align:center'> <body style='text-align:center'>
<h1>Halaman ke-1</h1> <h1>EAT THAT APPLE</h1>
<a href="index.php">Home</a> <!-- <a href="index.php">Home</a>
<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 $_SESSION['users']['nama'] ?></h3>
Halaman ini akan tampil setelah user login. <br>
</body>
<!-- <h1>EAT THAT APPLE</h1> -->
<div class="container">
<a href="game.html">
<div id="button">Play Game</div>
</a>
<a href="http://localhost/uas_sem_1/leaderboard.php">
<div id="button">Leaderboard</div>
</a>
<a href="http://localhost/uas_sem_1/logout.php">
<div id="button">Logout</div>
</a>
</div>
</body>
</html> </html>

78
leaderboard.php Normal file
View File

@ -0,0 +1,78 @@
<?php
session_start();
require_once "koneksi.php";
if (isset($_SESSION['username'])) {
$nama = $_SESSION['username'];
} else {
$nama = "";
}
$score = 0;
if (!empty($nama)) {
$getScore = "SELECT score FROM users WHERE username = '$nama'";
$resultMe = mysqli_query($koneksi, $getScore);
if ($resultMe && mysqli_num_rows($resultMe) > 0) {
$row = mysqli_fetch_assoc($resultMe);
$score = $row['score'];
}
}
$sql = "SELECT username, score FROM users ORDER BY score DESC LIMIT 10";
$result = mysqli_query($koneksi, $sql);
$leaderboard = [];
if($result) {
$leaderboard = mysqli_fetch_all($result, MYSQLI_ASSOC);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Leaderboard</title>
<link rel="stylesheet" href="">
<link rel="stylesheet" href="">
</head>
<body>
<table>
<thead>
<tr>
<th>#</th>
<th>Username</th>
<th>Score</th>
</tr>
</thead>
<tbody>
<?php
$peringkat = 1;
if (!empty($leaderboard)) {
foreach ($leaderboard as $pemain):
?>
<tr>
<td><?php echo $peringkat; ?></td>
<td><?php echo htmlspecialchars($pemain['username']); ?></td>
<td><?php echo $pemain['score']; ?> PTS</td>
</tr>
<?php
$peringkat++;
endforeach;
} else {
echo '<tr><td colspan="3" style="text-align: center;">Belum ada Pemain</td></tr>';
}
?>
</tbody>
</table>
</body>
</html>

View File

@ -1,18 +1,8 @@
<?php <?php
session_start(); session_start();
include "koneksi.php"; include "koneksi.php";
?> if(isset($_POST['username'])) {
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Halaman: Login</title>
</head>
<body>
<?php
if(isset($_POST['username'])) {
$username = $_POST['username']; $username = $_POST['username'];
$password = md5($_POST['password']); $password = md5($_POST['password']);
@ -21,13 +11,32 @@ include "koneksi.php";
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;
echo '<script>alert("Selamat datang, '.$data['nama'].'"); location.href="index.php";</script>'; $_SESSION['username'] = $data = ['username'];
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>';
} }
} }
?> ?>
<!DOCTYPE html>
<html lang="id">
<style>
body {
background-color: limegreen;
}
.login {
background-image: url('login/log.png');
}
</style>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Halaman: Login</title>
</head>
<body>
<div class="login">
<form action="" method="post"> <form action="" method="post">
<table align="center"> <table align="center">
<tr> <tr>
@ -37,12 +46,12 @@ include "koneksi.php";
</tr> </tr>
<tr> <tr>
<td>Username</td> <td></td>
<td><input type="text" name="username"></td> <td><input type="text" name="username" placeholder="Username" style="border: none"></td>
</tr> </tr>
<tr> <tr>
<td>Password</td> <td></td>
<td><input type="password" name="password"></td> <td><input type="password" name="password" placeholder="Password" style="border: none"></td>
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
@ -53,6 +62,8 @@ include "koneksi.php";
</tr> </tr>
</table> </table>
</form> </form>
</div>
</body>
</body>
</html> </html>

BIN
login/log.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
login/login.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
mapGame/mapgame .png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
succes/loginSuccess.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

69
users.sql Normal file
View File

@ -0,0 +1,69 @@
-- phpMyAdmin SQL Dump
-- version 5.2.0
-- https://www.phpmyadmin.net/
--
-- Host: localhost:3306
-- Generation Time: Dec 03, 2025 at 05:17 AM
-- Server version: 8.0.30
-- PHP Version: 8.1.10
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `game`
--
-- --------------------------------------------------------
--
-- Table structure for table `users`
--
CREATE TABLE `users` (
`id_user` int NOT NULL,
`nama` varchar(255) DEFAULT NULL,
`username` varchar(225) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`score` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
--
-- Dumping data for table `users`
--
INSERT INTO `users` (`id_user`, `nama`, `username`, `password`, `score`) VALUES
(1, 'Chris Daud Koroh', 'daudkoroh', '88d602f1ad6d62b9a11c688ab47fed22', 20),
(2, 'Zefanya Isaac', 'zefanya', 'de413c0365e3c88d8b3315f9d90b98ae', 68);
--
-- Indexes for dumped tables
--
--
-- Indexes for table `users`
--
ALTER TABLE `users`
ADD PRIMARY KEY (`id_user`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
MODIFY `id_user` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;