BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
휴대폰으로 무료 온라인 게임을 친구와 함께, 링크만 보내면 바로 플레이, 회원가입·다운로드 없이
Juegos online gratis para jugar juntos desde el celular: en pareja, con amigos, en grupo o solo. Elegí un juego, mandá el link por WhatsApp y ya están jugando. Sin registrarse ni descargar nada.
게임TypeScript · CSSGitHub @Jf08ml온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Subí una imagen, se convierte automáticamente en un rompecabezas con piezas de "tabs" curvos, y se arma en tiempo real con quien quieras dentro de una sala compartida (código de 6 caracteres o enlace directo).
No hace falta correr ningún servidor propio — todo el tiempo real lo maneja
Firebase. La app no usa Firebase Auth: la identidad de cada jugador es un id
propio generado en el navegador (guardado en localStorage), suficiente para
presencia y para saber quién sostiene cada pieza.
lenovo-experiences.env.local tiene las credenciales del proyecto Firebase
lenovo-experiences (cuenta [email protected]), compartido
con otras apps de la empresa (game, espacio-inteligente, ap_game, etc.).
Probé el flujo real (crear sala, subir imagen) de punta a punta y no hace
falta tocar nada más:
".read": true, ".write": true en la raíz
de las reglas — eso ya cubre /rooms, así que no agregué ni cambié nada
ahí (evité tocar el archivo de reglas de un proyecto compartido).match /{allPaths=**} { allow read, write: if true; } que cubre cualquier ruta no listada
explícitamente — incluida rooms/{roomId}/image.jpg, que usa esta app.Es decir: subestimé al principio y pensé que hacía falta Auth anónimo y
reglas nuevas, pero verificando las reglas reales del proyecto no hace falta
ninguna de las dos cosas. Si en algún momento quisieran reglas más estrictas
específicas para /rooms (por ejemplo, limitar el tamaño de imagen en
Storage en vez de depender del catch-all abierto), dejo el snippet opcional
más abajo.
Si preferís separar esto a un proyecto Firebase propio (recomendable si este juego va a tener uso real, para no compartir cuota/facturación con producción), avisame y creo uno nuevo con el Firebase CLI.
.env.local ya está completo. Si en algún momento apuntás a otro proyecto
Firebase, copiá .env.local.example y completá cada valor con los datos de
firebaseConfig de ese proyecto (Configuración del proyecto → Tus apps →
app Web):
NEXT_PUBLIC_FIREBASE_API_KEY=
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
NEXT_PUBLIC_FIREBASE_DATABASE_URL=
NEXT_PUBLIC_FIREBASE_PROJECT_ID=
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
NEXT_PUBLIC_FIREBASE_APP_ID=
Mientras estas variables no estén completas, la app muestra un aviso de
"Falta configurar Firebase" en vez de romperse. Asegurate también de que ese
otro proyecto tenga Realtime Database y Storage creados, con reglas que
permitan leer/escribir bajo /rooms (ver snippet opcional más abajo) — esta
app no usa Firebase Auth, así que las reglas no pueden exigir auth != null
a menos que agregues autenticación vos mismo.
/roomsNo hacen falta en lenovo-experiences (ya queda cubierto por las reglas
abiertas existentes), pero si algún día querés limitar específicamente esta
app — por ejemplo tope de tamaño de imagen — podés sumar esto a las reglas
de Storage existentes, sin reemplazar las demás:
match /rooms/{roomId}/{fileName} {
allow read: if true;
allow write: if request.resource.size < 15 * 1024 * 1024
&& request.resource.contentType.matches('image/.*');
}
npm install
npm run dev
Abrí http://localhost:3000. Para probarlo con otra
persona en la misma red, usá la IP de tu máquina
(http://TU-IP-LOCAL:3000) o un túnel como ngrok http 3000.
Al crear una sala se puede elegir modo Competencia en vez de Colaborativo: Equipo Rojo 🔴 contra Equipo Azul 🔵, cada uno arma su propia copia del mismo rompecabezas (misma imagen y mismas piezas, pero posiciones independientes por equipo — no comparten tablero).
lib/puzzleGeometry.ts Generador determinístico de la forma de las piezas
lib/piecesRender.ts Recorta la imagen en bitmaps individuales por pieza
lib/room.ts Crear sala, subir imagen, piezas, equipos y estado de carrera
lib/presence.ts Jugadores conectados (Realtime Database + onDisconnect)
lib/firebase.ts Inicialización de Firebase (Database/Storage)
components/PuzzleStage.tsx Tablero interactivo (Konva): zoom, paneo, drag & drop
components/TeamPicker.tsx Selector de equipo (modo Competencia)
components/RaceBar.tsx Progreso dual, cronómetro y banner de ganador
app/sala/[roomId]/ Página de una sala
app/page.tsx Inicio: crear sala (colab/versus) / unirse a una sala