Score0
Best0
Plays145k plays
Gamelot
The Kingdom of Games
🔐
Vault
A curated collection of classic arcade games. Jump between titles, beat high sco…
Free · No sign-up · Instant play
CLICK Varies by game — see each game's instructions
Vault
A curated collection of classic arcade games. Jump between titles, beat high sco…
Free · No sign-up · Instant play
Free Unblocked Games
PLAY
ANY
WHERE.
50+ hand-crafted browser games. No downloads. No logins. No nonsense. Runs at school, at home, anywhere with a browser.
Floppy Bird
124k plays · Arcade
🔥 HOT
Floppy Bird ✦
Neon Snake ✦
BlockDrop ✦
Space Dodger ✦
2048 ✦
Pixel Pong ✦
Asteroid Run ✦
Word Vault ✦
Brick Smash ✦
MineSweep ✦
Floppy Bird ✦
Neon Snake ✦
BlockDrop ✦
Space Dodger ✦
2048 ✦
Pixel Pong ✦
Asteroid Run ✦
Word Vault ✦
Brick Smash ✦
MineSweep ✦
🎮 All Games
👾 Arcade
🧩 Puzzle
⚡ Action
🕹️ Classics
📝 Word
🃏 Cards
⚡
Instant Play
Every game loads in under a second. No installs, no plugins, no app stores. Click and play.
🔓
Always Unblocked
Built to work everywhere — school networks, office firewalls, anywhere. VAULT never gets blocked.
🏆
Global Leaderboards
Every game has a live leaderboard. Set a record. Put your name in the VAULT forever.
// Hall of Fame
Top Scores
// New games every week
Never
Bored
Again.
Get notified when new games drop. First to know means first on the leaderboard. No spam — ever.
/* ── DATA ── */
const GAMES = [
{id:'floppy-bird', name:'Floppy Bird', cat:'arcade', tag:'hot', plays:'124k', rating:'4.9', emoji:'🐦', bg:'#1a3040', accent:'#74bf2e'},
{id:'snake', name:'Neon Snake', cat:'arcade', tag:'new', plays:'89k', rating:'4.8', emoji:'🐍', bg:'#0a1a0e', accent:'#39ff6e'},
{id:'tetris', name:'BlockDrop', cat:'classic', tag:'top', plays:'201k', rating:'4.9', emoji:'🟦', bg:'#0d0a2a', accent:'#00e5ff'},
{id:'2048', name:'2048', cat:'puzzle', tag:'top', plays:'156k', rating:'4.7', emoji:'🔢', bg:'#1a1206', accent:'#ffe600'},
{id:'pong', name:'Pixel Pong', cat:'classic', tag:'', plays:'67k', rating:'4.5', emoji:'🏓', bg:'#060606', accent:'#ffffff'},
{id:'space-dodge', name:'Space Dodger', cat:'action', tag:'hot', plays:'93k', rating:'4.8', emoji:'🚀', bg:'#08041a', accent:'#c8102e'},
{id:'memory', name:'Card Flip', cat:'card', tag:'new', plays:'44k', rating:'4.6', emoji:'🃏', bg:'#0a150a', accent:'#39ff6e'},
{id:'word-guess', name:'Word Vault', cat:'word', tag:'', plays:'78k', rating:'4.7', emoji:'📝', bg:'#0e0e0e', accent:'#ffe600'},
{id:'breakout', name:'Brick Smash', cat:'arcade', tag:'', plays:'55k', rating:'4.6', emoji:'🧱', bg:'#180808', accent:'#ff4444'},
{id:'asteroids', name:'Asteroid Run', cat:'action', tag:'new', plays:'38k', rating:'4.5', emoji:'☄️', bg:'#04041a', accent:'#00e5ff'},
{id:'whack', name:'Whack-A-Mole', cat:'arcade', tag:'', plays:'71k', rating:'4.4', emoji:'🔨', bg:'#0e1a08', accent:'#74bf2e'},
{id:'minesweeper', name:'MineSweep', cat:'puzzle', tag:'', plays:'92k', rating:'4.8', emoji:'💣', bg:'#0a0a0a', accent:'#aaaaaa'},
];
let cat = 'all', srchQ = '';
/* ── RENDER GRID ── */
function renderGrid() {
const list = GAMES.filter(g =>
(cat==='all'||g.cat===cat) &&
(!srchQ || g.name.toLowerCase().includes(srchQ.toLowerCase()))
);
const el = document.getElementById('gg');
el.innerHTML = list.map((g,i) => `
${g.name}
${g.tag?`
${g.tag.toUpperCase()}
`:''}
${g.cat}
`).join('');
setTimeout(()=>document.querySelectorAll('.gcard').forEach(c=>c.classList.add('in')),40);
list.forEach(g=>drawThumb(g));
}
/* ── THUMB ART ── */
function drawThumb(g) {
const cv = document.getElementById('gt-'+g.id); if(!cv)return;
const c=cv.getContext('2d'), W=cv.width, H=cv.height;
c.fillStyle=g.bg; c.fillRect(0,0,W,H);
if(g.id==='floppy-bird') {
const gr=c.createLinearGradient(0,0,0,H);
gr.addColorStop(0,'#2a6a7a'); gr.addColorStop(1,'#4a9aaa');
c.fillStyle=gr; c.fillRect(0,0,W,H);
c.fillStyle='#3a8c2e';
[[55,0,24,50],[55,85,24,H],[128,0,24,36],[128,78,24,H]].forEach(([x,y,w,h])=>{
c.fillRect(x,y,w,h);
c.fillStyle='rgba(255,255,255,0.1)'; c.fillRect(x+4,y,6,h);
c.fillStyle='#3a8c2e';
});
c.fillStyle='#5aac3e';
[[51,45,32,10],[51,85,32,10],[124,31,32,10],[124,78,32,10]].forEach(([x,y,w,h])=>c.fillRect(x,y,w,h));
c.fillStyle='#c8a020'; c.fillRect(0,H-16,W,16);
c.fillStyle='#5a9020'; c.fillRect(0,H-16,W,6);
c.fillStyle='#d4b830';
c.fillRect(28,60,14,10);
c.fillStyle='#fff'; c.fillRect(34,61,5,5);
c.fillStyle='#000'; c.fillRect(36,62,3,3);
c.fillStyle='#c85000'; c.fillRect(41,63,4,3);
} else if(g.id==='snake') {
c.fillStyle='rgba(57,255,110,0.05)';
for(let x=8;x
{
const a=1-i/(s.length+3);
c.fillStyle=`rgba(57,255,110,${a.toFixed(2)})`;
c.fillRect(sx,sy,10,10);
});
c.fillStyle='#c8102e'; c.fillRect(116,56,10,10);
c.fillStyle='rgba(200,16,46,0.3)'; c.fillRect(114,54,14,14);
} else if(g.id==='tetris') {
c.fillStyle='rgba(0,229,255,0.04)';
for(let x=0;x{
c.fillStyle=cols[i%5];
c.fillRect(bx*14+6,by*14-80,12,12);
c.fillStyle='rgba(255,255,255,0.25)'; c.fillRect(bx*14+6,by*14-80,4,4);
});
} else {
// Scatter pixel art
c.fillStyle=g.accent+'22';
for(let i=0;i<8;i++) for(let j=0;j<6;j++) {
if(Math.random()>.55){
c.fillStyle=g.accent+(Math.random()>.7?'':'55');
c.fillRect(12+i*25, 12+j*24, 16, 16);
c.fillStyle='rgba(255,255,255,0.2)'; c.fillRect(12+i*25,12+j*24,5,5);
}
}
c.font='46px serif'; c.textAlign='center';
c.fillStyle='rgba(255,255,255,0.9)';
c.fillText(g.emoji, W/2, H/2+16);
}
}
/* ── HERO ANIMATIONS ── */
function heroMainAnim() {
const cv=document.getElementById('c-hero-main'); if(!cv)return;
const c=cv.getContext('2d'), W=cv.width, H=cv.height;
let by=H/2,bvy=0,t=0;
let pipes=[{x:W+10,top:H*.32,bot:H*.32+72}];
function f(){
t++;
const gr=c.createLinearGradient(0,0,0,H);
gr.addColorStop(0,'#2a6a7a'); gr.addColorStop(1,'#4a9aaa');
c.fillStyle=gr; c.fillRect(0,0,W,H);
if(t%24===0) bvy=-6.5;
bvy+=0.38; by+=bvy;
if(by>H-14){by=H/2;bvy=0;} if(by<6)by=6;
pipes.forEach(p=>{p.x-=2;});
if(pipes[pipes.length-1].xp.x>-30);
pipes.forEach(p=>{
c.fillStyle='#3a8c2e';
c.fillRect(p.x,0,20,p.top); c.fillRect(p.x-3,p.top-8,26,8);
c.fillRect(p.x,p.bot,20,H); c.fillRect(p.x-3,p.bot,26,8);
});
c.fillStyle='#c8a020'; c.fillRect(0,H-13,W,13);
c.fillStyle='#5a9020'; c.fillRect(0,H-13,W,5);
c.save(); c.translate(40,by);
c.rotate(Math.max(-.4,Math.min(.7,bvy*.06)));
c.fillStyle='#f5c518'; c.fillRect(-6,-5,13,10);
c.fillStyle='#fff8e1'; c.fillRect(1,-4,6,8);
c.fillStyle='#fff'; c.fillRect(3,-4,5,5);
c.fillStyle='#000'; c.fillRect(5,-3,3,3);
c.fillStyle='#c85000'; c.fillRect(6,0,4,3);
c.restore();
requestAnimationFrame(f);
}
f();
}
function heroSnakeAnim() {
const cv=document.getElementById('c-hero-snake'); if(!cv)return;
const c=cv.getContext('2d'), W=cv.width, H=cv.height;
const CELL=10;
const cols=Math.floor(W/CELL), rows=Math.floor(H/CELL);
let snake=[{x:5,y:4},{x:4,y:4},{x:3,y:4},{x:2,y:4}];
let food={x:7,y:3}, dx=1,dy=0,t=0;
function f(){
t++;
c.fillStyle='#0a1a0e'; c.fillRect(0,0,W,H);
c.fillStyle='rgba(57,255,110,0.05)';
for(let x=0;x=cols)h.x=0;
if(h.y<0)h.y=rows-1; if(h.y>=rows)h.y=0;
snake.unshift(h);
if(h.x===food.x&&h.y===food.y){food={x:Math.floor(Math.random()*cols),y:Math.floor(Math.random()*rows)};}
else snake.pop();
const nx=snake[0].x+dx,ny=snake[0].y+dy;
if(nx<0||nx>=cols||ny<0||ny>=rows){if(dx!==0){dx=0;dy=Math.random()>.5?1:-1;}else{dy=0;dx=Math.random()>.5?1:-1;}}
}
snake.forEach((s,i)=>{
c.fillStyle=`rgba(57,255,110,${1-i/(snake.length+2)})`;
c.fillRect(s.x*CELL+1,s.y*CELL+1,CELL-2,CELL-2);
});
c.fillStyle='#c8102e'; c.fillRect(food.x*CELL+2,food.y*CELL+2,CELL-4,CELL-4);
requestAnimationFrame(f);
}
f();
}
function heroTetrisAnim() {
const cv=document.getElementById('c-hero-tetris'); if(!cv)return;
const c=cv.getContext('2d'), W=cv.width, H=cv.height;
const CELL=10, cols=Math.floor(W/CELL), rows=Math.floor(H/CELL);
const PIECES=[
{cells:[[0,0],[1,0],[2,0],[3,0]],color:'#00e5ff'},
{cells:[[0,0],[1,0],[0,1],[1,1]],color:'#ffe600'},
{cells:[[0,0],[1,0],[2,0],[1,1]],color:'#a855f7'},
{cells:[[0,0],[1,0],[1,1],[2,1]],color:'#39ff6e'},
];
let board=Array.from({length:rows},()=>Array(cols).fill(0));
let p=null,t=0;
function newP(){const r=PIECES[Math.floor(Math.random()*PIECES.length)];p={cells:r.cells,color:r.color,x:Math.floor(cols/2)-1,y:0};}
function f(){
t++;
c.fillStyle='#0d0a2a'; c.fillRect(0,0,W,H);
c.fillStyle='rgba(0,229,255,0.04)';
for(let x=0;xp.y+cy>=rows||board[p.y+cy]?.[p.x+cx])){
p.y--;
p.cells.forEach(([cx,cy])=>{if(p.y+cy>=0)board[p.y+cy][p.x+cx]=p.color;});
board=board.filter(row=>row.some(v=>!v));
while(board.lengthrow.forEach((col,x)=>{
if(col){c.fillStyle=col;c.fillRect(x*CELL+1,y*CELL+1,CELL-2,CELL-2);
c.fillStyle='rgba(255,255,255,0.2)';c.fillRect(x*CELL+1,y*CELL+1,3,3);}
}));
if(p){c.fillStyle=p.color;
p.cells.forEach(([cx,cy])=>{
c.fillRect((p.x+cx)*CELL+1,(p.y+cy)*CELL+1,CELL-2,CELL-2);
c.fillStyle='rgba(255,255,255,0.25)';c.fillRect((p.x+cx)*CELL+1,(p.y+cy)*CELL+1,3,3);
c.fillStyle=p.color;
});
}
requestAnimationFrame(f);
}
newP(); f();
}
function ctaAnim() {
const cv=document.getElementById('c-cta'); if(!cv)return;
const c=cv.getContext('2d'), W=cv.width, H=cv.height;
let by=H/2,bvy=0,t=0;
let pipes=[{x:W+10,top:H*.35,bot:H*.35+75}];
function f(){
t++; if(t%26===0)bvy=-6.2; bvy+=0.37; by+=bvy;
if(by>H-14){by=H/2;bvy=0;} if(by<6)by=6;
const gr=c.createLinearGradient(0,0,0,H);
gr.addColorStop(0,'#2a6a7a'); gr.addColorStop(1,'#4a9aaa');
c.fillStyle=gr; c.fillRect(0,0,W,H);
pipes.forEach(p=>{p.x-=1.8;});
if(pipes[pipes.length-1].xp.x>-28);
pipes.forEach(p=>{
c.fillStyle='#3a8c2e';
c.fillRect(p.x,0,20,p.top);c.fillRect(p.x-3,p.top-8,26,8);
c.fillRect(p.x,p.bot,20,H);c.fillRect(p.x-3,p.bot,26,8);
});
c.fillStyle='#c8a020';c.fillRect(0,H-12,W,12);
c.fillStyle='#5a9020';c.fillRect(0,H-12,W,5);
c.save();c.translate(44,by);
c.rotate(Math.max(-.4,Math.min(.7,bvy*.06)));
c.fillStyle='#f5c518';c.fillRect(-6,-5,13,10);
c.fillStyle='#fff';c.fillRect(3,-4,5,5);
c.fillStyle='#000';c.fillRect(5,-3,3,3);
c.fillStyle='#c85000';c.fillRect(6,0,4,3);
c.restore();
requestAnimationFrame(f);
}
f();
}
/* ── LEADERBOARD ── */
function renderLB() {
const at=[
{n:'PixelKing',g:'Floppy Bird',s:247,e:'👑'},
{n:'NeonSlayer',g:'Neon Snake',s:189,e:'🐍'},
{n:'BlockMaster',g:'BlockDrop',s:18400,e:'🟦'},
{n:'GridGod',g:'2048',s:2048,e:'🔢'},
{n:'StarDodger',g:'Space Dodger',s:156,e:'🚀'},
];
const wk=[
{n:'FastFingers',g:'Floppy Bird',s:134,e:'⚡'},
{n:'SnakeEyes',g:'Neon Snake',s:98,e:'👀'},
{n:'TetrisGod',g:'BlockDrop',s:9600,e:'🎮'},
{n:'2Kplayer',g:'2048',s:1024,e:'🎯'},
{n:'Blaster99',g:'Space Dodger',s:88,e:'🔥'},
];
const medals=['g1','g2','g3'];
const row=(r,i)=>`
${i===0?'♛':i===1?'♜':i===2?'♝':i+1}
${r.e}
${r.s.toLocaleString()}
`;
document.getElementById('lb-at').innerHTML=at.map(row).join('');
document.getElementById('lb-wk').innerHTML=wk.map(row).join('');
// Inject local scores
const saved=JSON.parse(localStorage.getItem('floppy_lb')||'[]');
if(saved.length){
document.getElementById('lb-at').innerHTML+=`
★
🎮
${saved[0].name}
Floppy Bird
${saved[0].score}
`;
}
}
/* ── FILTERS ── */
function setCat(c,el){
cat=c;
document.querySelectorAll('.pill').forEach(p=>p.classList.remove('active'));
el.classList.add('active');
renderGrid();
}
function filterGames(q){ srchQ=q; renderGrid(); }
/* ── MODAL ── */
function handleCard(e,id){ e.preventDefault(); openGame(id); }
function openGame(id){
const g=GAMES.find(x=>x.id===id); if(!g)return;
document.getElementById('mtitle').textContent=g.name.toUpperCase();
document.getElementById('miframe').src=id+'.html';
document.getElementById('modal').classList.add('open');
}
function closeModal(){
document.getElementById('modal').classList.remove('open');
document.getElementById('miframe').src='';
}
document.getElementById('modal').addEventListener('click',e=>{if(e.target===document.getElementById('modal'))closeModal();});
/* ── EMAIL ── */
function subEmail(){
const i=document.getElementById('email-in');
const b=document.querySelector('.cta-email button');
if(i.value&&i.value.includes('@')){b.textContent='✓ You\'re in!';b.style.color='#39ff6e';i.value='';}
}
/* ── INIT ── */
document.addEventListener('DOMContentLoaded',()=>{
renderGrid();
renderLB();
heroMainAnim();
heroSnakeAnim();
heroTetrisAnim();
ctaAnim();
});