Talen: English · Nederlands · Deutsch · Español · Français · Italiano · Português · Papiamentu · Frysk

Yndeks / Berjochten / Snake '97 fernije

Snake '97 fernije

Oer de útdagings fan it ûntwikkeljen fan in ekstreem populêr spultsje

Publisearre
Bywurke
(oanmakke )
Skreaun troch
Willem L. Middelkoop
Ûnderwerpen
Windows · android · meitsje · kreativiteit · design · spultsje · iOS · iPad · iPhone · programmearjen · retro · server · smartphone · snake · wurk
Minsklike ferzje fan dit berjocht
https://willem.com/fy/2018-02-21_snake-97-fernije/
English
Updating Snake '97
Nederlands
Snake '97 Updaten
Deutsch
Snake '97 aktualisieren
Español
Actualizando Snake '97
Français
Mettre à jour Snake '97
Italiano
Aggiornare Snake '97
Português
Atualizar o Snake '97
Papiamentu
Aktualisá Snake '97
Talen
Oerset út it Ingelske oarspronklike troch in taalmodel yn twa rûnten (oersetting en korreksje) mei in wurdlist en in staveringskontrôle; noch net lêzen troch in memmetaalsprekker.

Gearfetting

In pear jier lyn smiet myn broer in bier oer myn iPhone yn in kroech yn Amsterdam. It earme ding fûn it Nederlânske bier net sa lekker as ik: it gie dea. Wylst ik wachte op in nije tillefoan, brûkte ik in âlde dy't neat koe útsein sms'en, belje en... Snake! Sa waard it idee foar Snake '97 berne en dizze moanne wie it tiid om dat ekstreem populêre spultsje te fernijen.

Folsleine tekst

Café 't Pakhuis yn Amsterdam, dêr't Snake '97 "útfûn" waard
Café 't Pakhuis yn Amsterdam, dêr't Snake '97 "útfûn" waard

Snake '97

Oarspronklik haw ik it Snake-spultsje yn 2011 programmearre foar iOS. It hat my sa'n twa wiken kosten om in wurkjend prototype te meitsjen dat der útseach en oanfielde as de echte klassiker út de jierren njoggentich. Myn oare broer holp my mei de grafyk troch skerpe makro's te meitsjen fan myn âlde tillefoan (it bliuwt in nuvere gedachte dat safolle fan jimme in kopy fan myn tillefoan yn de bûse hawwe).

Snake '97 op in iPhone X, dat der útsjocht en oanfielt as it retro-tillefoanspultsje út de jierren njoggentich
Snake '97 op in iPhone X, dat der útsjocht en oanfielt as it retro-tillefoanspultsje út de jierren njoggentich

It waard oppakt troch guon grutte blogs en dêrtroch stie Snake '97 oeral yn de wrâld boppe yn de ranglisten. Hjoed de dei wurdt it oeral yn de wrâld spile, it is oerset yn 53 talen en it is der foar iOS, Android, Windows, ChromeOS en macOS.

Snake '97 yn de top fan de ranglisten tegearre mei Angry Birds en WhatsApp
Snake '97 yn de top fan de ranglisten tegearre mei Angry Birds en WhatsApp

Fernijing nedich

Yn 2011 wie der mar ien iPhone, de iPhone 4. As ûntwikkeler koest Android rêstich negearje en Windows Phone wie noch net iens útfûn. It libben wie sa moai as in (loaie) ûntwikkeler mar winskje koe: mar ien skermgrutte.

iPhone 4, ah, swiete ûntwikkelersoantinkens fan doe't ien (lytse) maat foar elkenien paste...
iPhone 4, ah, swiete ûntwikkelersoantinkens fan doe't ien (lytse) maat foar elkenien paste...

Snel foarút nei hjoed: Apple ferkeapet no 8 iPhones en der binne miljoenen en miljoenen Android-apparaten mei allegearre ferskillende skermgruttes, prosessors, ûnthâld en softwareferzjes. It is in understatement om dit in útdaging te neamen...

Om it nocht yn Snake '97 te hâlden moast ik de game engine yn de kearn fernije. Ik moast de grafyk op ien of oare manier passend meitsje foar elk skerm yn de wrâld en rekken hâlde mei de ferskillen yn rekenkrêft en ûnthâld....

Prototype fan Snake '97 op ferskillende apparaten
Prototype fan Snake '97 op ferskillende apparaten

Ien game engine om se allegear te hearskjen

De oarspronklike ferzjes fan it spultsje hiene allegearre in eigen engine. Ien foar iOS, ien foar Android, ien foar Windows ensafuorthinne. Doe't ik Snake 2k (de Snake II-farianten fan it spultsje) útbrocht, haw ik gewoan wer in set game engines tafoege. Yn totaal haw ik 6 ferskillende Snake-game engines programmearre yn Objective-C (iOS), Java (Android) en C# (Windows). Dizze engines draaiende hâlde op nije apparaten mei oare skermgruttes, prosessors en ûnthâldkonfiguraasjes waard hieltyd lestiger.

Mar dizze moanne haw ik de knoop trochhakt, en hoe. Ik haw noch in Snake-game engine ûntworpen en boud. Mar dizze moast alle foargeanden ferfange. Hy moat draaie op iOS, Android en Windows. Ik woe in engine dy't klear wie foar de takomst, foar elk skerm en elke soarte fan ynput (toetseboerd, touch, pencil, gamepad, joystick, neam it mar op).

De nije game engine programmearje en testen op in HMD Nokia 2 mei Android
De nije game engine programmearje en testen op in HMD Nokia 2 mei Android

HTML5 Rocks

It web hat de native app-technology ynhelle. Der binne in soad nije API's yntrodusearre dy't rike ynteraktive ûnderfinings mooglik meitsje op in protte ferskillende apparaten. Ik frege my ôf hoe dreech it wêze soe om Snake '97 op webtechnology te litten wurkje. Der is mar ien manier om dat út te finen, dus ik bin begûn.

Responsive grafyk

Earst bin ik begûn mei it bouwen fan de grafyske engine op basis fan HTML5 canvas en in responsive skaalsysteem dat ik ûntwurpen hie foar de Android-ferzje fan Snake '97. Yn prinsipe mjit de engine de beskikbere skermgrutte, de oriïntaasje en de pikseldichtheid. It rekkent heechsteande foto's automatysk om, sadat se by dyn skerm passe.

Deselde 3310? Sjoch goed en fyn de ferskillen tusken de iPhone SE en de iPhone X
Deselde 3310? Sjoch goed en fyn de ferskillen tusken de iPhone SE en de iPhone X

De nije grafyske engine hâldt sels rekken mei nuvere dingen lykas de notch fan de iPhone X. Dit giet allegearre yn in split sekonde. Ik haw de nije grafyske engine ek sa ûntworpen dat hy reagearret op feroaringen yn skermgrutte. No kin it spultsje spile wurde yn portret of lânskip, yn in finster of folslein skerm (of splitskerm as it op in iPad is).

Wiidskermgameplay is no mooglik troch de nije responsive grafyk
Wiidskermgameplay is no mooglik troch de nije responsive grafyk
Snake '97 as macOS-buroblêdapp, mooglik makke troch de skaalbere grafyk
Snake '97 as macOS-buroblêdapp, mooglik makke troch de skaalbere grafyk

Ferskillen yn rekenkrêft

Tinkst dat in ienfâldich spultsje him gjin soargen hoecht te meitsjen oer rekenkrêft? Fout! Yn in spultsje as Snake is timing essinsjeel. Minsken spylje it spultsje op "spiergeheugen" en tippe op it touchscreen sûnder oer de losse bewegingen nei te tinken.

De game engine moat foarsisber wêze, hy moat konstant draaie. Mar fierders moat de ûnderfining gelyk wêze, of do no op in âld Android-apparaat sitst of op in krêftpatser mei 6 kearnen lykas de iPhone X.

Ferskillen yn spultsjesnelheid analysearje mei slow-motionfideo
Ferskillen yn spultsjesnelheid analysearje mei slow-motionfideo

Ik haw de hegesnelheidsvideokamera fan de iPad Pro brûkt om Snake-gameplay yn slow motion fêst te lizzen. Mei de fideo koe ik ferskillen yn snelheid sjen, frame foar frame. Dat late ta in yntern benchmarksysteem (mei timers, dy't millisekonden telle) dat de snelheid fan it spultsje automatysk oanpast en krekt ôfstimt op dyn apparaat.

Bestjoering: Touch, toetseboerd, Pencil, Gamepad

Spilers bestjoere de Snake mei de retro-knoppen (it âlde tillefoantoetseboerd). De oarspronklike iOS-ferzje fan it spultsje brûkte fêste trochsichtige UIButtons dy't ik oer de foto's fan de âlde tillefoan pleatst hie. In ienfâldige en effektive start.

Spitigernôch hiene de knoppen fan iOS wat lag (dat foar ûnfoarsisbere fertraging yn ynput soarge) en skaalden fansels net nei ferskillende skermgruttes. Ik haw letterlik foar elke nije iPhone dy't Apple de lêste jierren útbrocht hat nije koördinaten hardcode.... gjin noflik wurk.

De nije game engine brûkt in trúk dy't ik foar de Android-ferzje ûntwikkele haw: dynamysk pleatste firtuele knoppen. Mei de skaaljinformaasje dy't de grafyske engine útrekkent, hâld ik dynamysk in matriks fan X- en Y-koördinaten by dy't by de firtuele knoppen hearre. As in spiler it skerm oanrekket, rekkent de engine mei wiskunde út wat de tichtstby lizzende knop is: de stelling fan Pythagoras.

De echte koade fan Snake '97 dy't de ôfstân útrekkent mei de stelling fan Pythagoras
De echte koade fan Snake '97 dy't de ôfstân útrekkent mei de stelling fan Pythagoras

Dit wurket as in tierelier en makket effektyf it hiele skerm ta in knop. It spultsje is op dizze manier folle moaier om te spyljen. Neist touch haw ik stipe foar it toetseboerd tafoege, sadat ek minsken sûnder touchscreen Snake spylje kinne.

Doe't ik dwaande wie mei de bestjoering ûntdekte ik noch mear HTML5-moaiens: de GamePad API. Dêrmei kinne programmeurs lykas ik gamepads, joysticks en oare ynputapparaten stypje dy't fia USB of Bluetooth ferbûn binne.

Snake bestjoere mei in Super Nintendo-gamepad is geweldich (mei in SuperSmart-joy USB-oansluting)
Snake bestjoere mei in Super Nintendo-gamepad is geweldich (mei in SuperSmart-joy USB-oansluting)

Ferskillende gamepads stypje is útdaagjend, mar dochs grappich. Ik haw der perfoarst in hiele dei oan kwytrekke wylst ik oan it "testen" wie... myn feardigens ferfine mei de prachtige SNES-gamepad en de lekkere analoge stick fan de DualShock-controller. ("Sorry skat, ik bin hjir oan it wurk...")

In trúk dêr't de oarspronklike Snake net oan tocht: it spultsje bestjoere mei in Bluetooth DualShock PlayStation-controller mei in analoge thumbstick
In trúk dêr't de oarspronklike Snake net oan tocht: it spultsje bestjoere mei in Bluetooth DualShock PlayStation-controller mei in analoge thumbstick

Ynternasjonalisaasje

As do dit lêst, begryp datst wierskynlik Ingelsk. Mar in grut part fan it Snake '97-publyk is net Ingelsktalich. Der binne sels spilers dy't mear as 30 ferskillende talen brûke. Fan Spaansk oant Russysk, fan Arabysk oant Hebrieusk, fan Dútsk oant Japansk. Neam it mar op, Snake hat it.

In ynterface ûntwerpe dy't op tekst rint is útdaagjend as do de hiele wrâld dwaan wolst. Ikoanen binne ek net perfekt (in ôfbylding kin yn in oare kultuer wat oars betsjutte). As UX-ûntwerper moatst nei konsepten sykje dy't breed brûkt wurde oer de hiele wrâld. Foar Snake haw ik ikoanen brûkt fan in klok, in snelheidsmeter, in lúdspreker en in trofee. Dizze ikoanen binne oeral yn de wrâld gewoan en binne krekt dêrom keazen.

UX-design foar in ynternasjonaal publyk. Ynterfaces sûnder wurden ûntwerpe is dreech!
UX-design foar in ynternasjonaal publyk. Ynterfaces sûnder wurden ûntwerpe is dreech!

De app-beskriuwing bestiet út tekst dy't ik troch in profesjonele oersetstjinst oersette litten haw. Guon oare útjouwers fertrouwe op Google Translate, mar ik wit dat dat tryst resultaat jout.

Wrâldwide ranglist

Op 'e jierren njoggentich krigest in soad strjitrespekt as do in moaie skoare yn Snake helle hiest. Yn de oarspronklike ferzjes fan Snake '97 hiest allinnich dyn eigen heechste skoare om te ferslaan en op iOS koest dyn skoare nei GameCenter uploade.

Foar de nije ferzje woe ik in wiidner berik, mei in "wrâldwide ranglist". It is it nije yntegreare leaderboard dat dyn spultsje direkt rangskikt en skoares fan minsken fan oeral yn de wrâld fergeliket. Der binne trije ranglisten: altyd, 24 oeren en it lêste oere.

Wrâldkampioen fan Snake '97, mar net foar lang...
Wrâldkampioen fan Snake '97, mar net foar lang...

De heechste skoares wurde ferwurke troch in machtige 48-kearns Intel XEON-server mei in bulte ûnthâld. Hy draait Debian GNU/Linux, MariaDB, NGINX en NodeJS. Yn de drokke oeren ferwurket hy mear as 10 spultsjeskoares yn de sekonde. De serveropset is in eigen blogberjocht weardich dat ik letter skriuwe sil, hâld dit blog dus yn de gaten as big data dyn ding is.

Sa sjocht de cloud der út, leave jonges en famkes.
Sa sjocht de cloud der út, leave jonges en famkes.

Download no

Der is mar ien manier om út te finen oft myn wurk wat wie: probearje it sels.

Lit it my witte as do bugs tsjinkomst, myn kontaktynformaasje fynst do hjir.

Snake '97 as fergees te downloaden foar iOS, Android, macOS, Windows en ChromeOS
Snake '97 as fergees te downloaden foar iOS, Android, macOS, Windows en ChromeOS

Formaten foar masines fan dizze side