{
“id”: “1”,
“name”: “Player1”,
“coins”: 1000,
“level”: 1,
“wins”: 0,
“losses”: 0,
“avatar”: “default.png”,
“online”: true
}
{
“roomId”: “ABC123”,
“host”: “Player1”,
“status”: “waiting”,
“players”: [
"Player1"
],
“maxPlayers”: 4
}
جاكارو العربيةbody{
font-family:Tahoma;
background:#0b3d2e;
color:white;
text-align:center;
direction:rtl;
}
.container{
margin-top:100px;
}
button{
padding:15px 30px;
border:none;
border-radius:10px;
margin:10px;
cursor:pointer;
font-size:18px;
background:#f5c542;
}
rooms
└── ABC123
├── host: "player1"
├── status: "waiting"
├── currentTurn: 0
├── deck: \[\]
├── players
│ ├── uid1
│ ├── uid2
│ ├── uid3
│ └── uid4
└── board
├── red
├── green
├── blue
└── yellow
function createRoom(playerName){
const roomId =
Math.random()
.toString(36)
.substring(2,8)
.toUpperCase();
db.collection(“rooms”)
.doc(roomId)
.set({
host: playerName,
status: “waiting”,
currentTurn: 0,
players: [playerName]
});
alert("رمز الغرفة: " + roomId);
}
async function joinRoom(roomId,playerName){
const roomRef =
db.collection(“rooms”)
.doc(roomId);
const room =
await roomRef.get();
if(!room.exists){
alert(“الغرفة غير موجودة”);
return;
}
const data = room.data();
data.players.push(playerName);
roomRef.update({
players:data.players
});
}
const cards = [
1,2,3,4,5,6,7,
8,9,10,11,12,13
];
let deck = [];
for(let i=0;i<4;i++){
deck.push(…cards);
}
function shuffle(deck){
for(let i=deck.length-1;i>0;i–){
const j =
Math.floor(Math.random()*(i+1));
=
[deck[j],deck[i]];
}
return deck;
}
function dealCards(players){
players.forEach(player=>{
player.cards = [];
for(let i=0;i<5;i++){
player.cards.push(
deck.pop()
);
}
});
}
{
color:“red”,
pieces:[
0,
0,
0,
0
]
}
function movePiece(player,piece,steps){
player.pieces[piece] += steps;
}
db.collection(“rooms”)
.doc(roomId)
.onSnapshot((doc)=>{
const room = doc.data();
updateBoard(room);
});
function startGame(roomId){
const deck =
shuffle(createDeck());
db.collection(“rooms”)
.doc(roomId)
.update({
status:“playing”,
deck:deck
});
}