- The Backdooms, doğrudan bir QR koddan çalışabilen bir HTML oyunudur; DOOM 1993 ve The Backrooms'tan ilham alınarak geliştirilmiştir
- Proje, QR kod depolama ve sıkıştırma sınırlarını test etmek ve QR kod içinde hafif web uygulamaları barındırmanın yenilikçi bir yolunu göstermek için tasarlanmıştır
- Oyun, internet bağlantısı olmadan bir QR kod taranarak oynanabilir ve son derece sıkıştırılmış bir biçimde sunulur
- Tarayıcı içinde oyunu dinamik olarak çalıştırmak için DecompressionStream API'si kullanılır
- Modern mobil tarayıcılarla uyumludur ve Python ile QR kod kütüphaneleri kullanılarak QR kod üretilebilir
Projeye genel bakış
- The Backdooms, doğrudan bir QR koddan çalışabilen bir HTML oyunudur; DOOM 1993 ve The Backrooms'tan ilham alınarak geliştirilmiştir
- QR kod depolama ve sıkıştırma sınırlarını test etmek ve QR kod içinde hafif web uygulamaları barındırmanın yenilikçi bir yolunu göstermek için tasarlanmıştır
Özellikler
- Tamamen çevrimdışı: QR kod tarandıktan sonra internet bağlantısı olmadan oyun oynanabilir
- Aşırı sıkıştırma: Zlib sıkıştırması, Gzip açma akışı ve base64 kodlama kullanılarak nihai sonuç son derece sıkıştırılır
- Kendini açan web sayfası:
DecompressionStream API'si kullanılarak oyun tarayıcı içinde dinamik olarak çalıştırılır
- Mobil uyumluluk: DecompressionStream API'sini destekleyen modern mobil tarayıcılarda çalışır (Edge, Yandex, Opera)
Kurulum ve bağımlılıklar
- Teknik olarak yalnızca modern bir web tarayıcısı gerekir, ancak yaklaşık 2.5kb'lık bir oyunun QR kodunu oluşturmak için Python 3.7+,
qrcode kütüphanesi ve pillow gereklidir
Kullanım
1️⃣ Oyunu QR koda dönüştürme
- Betiği şu komutla çalıştırın:
python3 QRGEN.py <your-game.html> <output-qrcode.png>
2️⃣ QR kodu tarama
- Akıllı telefon veya QR tarayıcı kullanarak oyunu doğrudan web tarayıcısında açabilirsiniz
3️⃣ Anında oynayın 🎮
- İndirme veya kurulum olmadan The Backdooms'un keyfini çıkarabilirsiniz
Teknik analiz
Sıkıştırma iş akışı
- Girdi HTML'ini okuma: Dosyadan veya giriş kaynağından verilen HTML içeriği okunur
- Zlib sıkıştırma + GZip açma: HTML, Zlib ile sıkıştırılır ve en iyi sıkıştırmayı sağlamak için GZip'in DecompressionStream'i kullanılır
- Base64 kodlama: Sıkıştırılmış veriler, metin tabanlı kalması ve HTML dosyasına güvenle gömülebilmesi için Base64 ile kodlanır
- HTML sarmalayıcıya gömme: JavaScript tabanlı, kendini açan bir HTML sarmalayıcı oluşturulur. Bu sarmalayıcı, tarayıcıda açıldığında içeriği otomatik olarak açan DecompressionStream API işlevini içerir
- Data URI'ye dönüştürme: Tüm HTML, fiziksel dosya olmadan kolayca depolanıp paylaşılabilmesi için
data:text/html;base64,... biçimine dönüştürülür
QR kod oluşturma mantığı
- Sistem önce
qr.make(fit=True) kullanarak içerik uzunluğuna göre QR boyutunu dinamik biçimde ayarlayıp mümkün olan en küçük QR sürümünü oluşturmaya çalışır
- Gerekli sürüm 40'ı aşarsa (QR kod standardı sınırı),
fit=False ile sürüm 40 zorlanır
- Mümkün olan en fazla veriyi sığdırmak için en düşük hata düzeltme seviyesi olan L kullanılır
- Veri hâlâ QR v40 seviye L'ye sığmıyorsa süreç başarısız olur ve verinin QR koda kodlanamayacak kadar büyük olduğunu belirten bir hata mesajı döndürülür
Sonuç
- Başarılı olursa QR kod oluşturulur ve görüntülenir
- Başarısız olursa süreç, verinin QR koda kodlanamayacak kadar büyük olduğunu belirten bir hata mesajıyla sonlanır
Lisans
- Bu proje MIT lisansı altında yayımlanmıştır ve serbestçe kullanılabilir, değiştirilebilir ve paylaşılabilir
Katkıda bulunanlar
- DOOM'u geliştiren id Software
- 5 yıl önce bu fikri öneren matttkc
- Undertale'ın harika müziklerini yapan Toby Fox; bu oyunun GitHub üzerinde barındırılan sürümü Bonetrousle'un 8-bit versiyonunu kullanır
- Kuber Mehta tarafından geliştirilmiştir
1 yorum
Hacker News yorumu
Bazen rastgele projelere başlıyorum, bu da onlardan biriydi. Bu yılın başında bir haftada yaptığım bir projeydi ama paylaşmamıştım; şimdi paylaşmaya karar verdim
Sonraki proje: LLM'yi QR koda dönüştürmek
Gerçekten harika bir proje.
data:URL hakkında bilgi edinmiş oldum.data:URI scheme'ini biliyordum ama bunun tam bir URL olarak kullanılabileceğini bilmiyordum. Tüm oyunu QR kodun içine koyabilir miyim diye düşünmüştüm ama HTTP(s) bağlantısı gerektiğini sanıp bunu ertelemiştim. Bu çalışma bana ciddi şekilde ilham verdi: QR kodun içine tüm bir oyun sığdırılabilir mi? [YouTube bağlantısı]Depoya birkaç ekran görüntüsü eklemenizi isterim. Telefonda bakıyorum ve nedenini bilmiyorum ama sadece 3 düğme ve siyah bir ekran gördüm
iPhone'un varsayılan QR kod tarayıcısıyla taradım ve "Kullanılabilir veri yok" dedi
Görüntünün bulanık değil net görünmesi için canvas'ın CSS'ini
image-rendering: pixelatedolarak güncellemeniz gerekirHarika şeyler yapmaya devam et, kuberwastaken
Müthiş bir proje. "Kendi kendine yeten QR kod"un canitrundoom'a eklenmesini bekliyorum (teknik olarak kabul edilir mi bilmiyorum)
Bu proje Snow Crash'e yaklaşıyormuş gibi hissettiriyor. QR koda bakıp beynimin değişime uğrayıp uğramadığını merak ettim :-D Muhteşem bir iş
Çok havalı. Küçük bir düzeltme ama: DOOM raycasting kullanmıyordu. Bu proje Wolfenstein 3D'ye daha benziyor ve Wolf3D raycasting kullanıyordu