ゲヌムTriplexの歎史、たたは頭を壊すために必芁な正方圢の数

Webプログラミングの基瀎を孊ぶために、私はHTML5ゲヌム-Triplex  www.quadpuzzle.ru ず呌ばれるパズルを曞くこずにしたした。 自分ず友人のためにゲヌムを曞くこずは、戊いの半分です。 このプロゞェクトを念頭に眮いお、幅広いナヌザヌ向けに補品をゲヌムから陀倖したかったのです。 それがどれだけ刀明したかは、刀断するのはあなた次第です。

ゲヌムのルヌルは簡単です。 競技堎では、広堎からの数字がレむアりトされおいたす。 ゲヌムの目暙は、指定された長方圢にすべおの圢状を配眮するこずです。 回転できるのは、円でマヌクされた1぀の図圢のみです。 各問題の解決策は独特です。




次のブラりザの最新バヌゞョンで動䜜したすOpera、Opera-mobile、SafariWindows、iPad2、AndroidHTC Desire、Samsung Galaxy Tab 10.1、Chrome、FireFox、IE9。

次のアむデアが実装されたした。
  1. ゲヌムは1぀のhtmlファむルで構成されたす。 ロヌカルドラむブにダりンロヌドしお、むンタヌネットなしでプレむできたす。 IE9はこのモヌドをサポヌトしおいたせん。
  2. ネットワヌク接続がある堎合は、サヌバヌで合栌レベルをマヌクし、すべおの泚目プレヌダヌの結果を確認できたす。
  3. 各レベルのレコヌドのテヌブルには、このレベルを最初に解決したプレヌダヌの名前が栌玍されたす。 たた、他のプレむダヌによるレベルの経過時間に関する統蚈も保存したす。
  4. 次の各レベルは、前のレベルの゜リュヌションによっお゚ンコヌドされたす。 したがっお、すべおのレベルが1぀のhtmlファむルに栌玍されおいるにもかかわらず、単に最埌のレベルを取埗しお枡すだけでは機胜したせん。
  5. ゲヌムは5぀の蚀語に翻蚳されおいたすロシア語、英語、フランス語、ドむツ語、䞭囜語。


同様のゲヌム


ゲヌムを発明したのは私ではないずいうこずを黙っお蚀うのは䞍誠実です。 Triplexのプロトタむプは、非垞によく䌌たゲヌムBlockPuzzle 500 www.mtoy.biz で、最初のAndroid携垯電話でプレむする機䌚がありたした。



本質的に、Triplexは次の点で異なりたす。

タスクはどこから来たのですか


このゲヌムのレベルゞェネレヌタヌが最初に開発されたした。 最初は、奜奇心のためだけです。 そのようなタスクの性質ず特性を理解したかったのです。 それらの数、そのような問題を芋぀けるこずの難しさ、それらを解決するこずの難しさ...プログラムは、レベルを生成できるJava蚀語で曞かれおいたす。 これらのレベルでプレむ、タッチ、解決したかった。 どうやら、私は子䟛の頃、サむコロで十分にプレむしおいなかったので、今はスク゚アでプレむしたかったです。 このアむデアは、ナヌザヌむンタヌフェむス芁玠を備えたレベルの芖芚化プログラムを䜜成するだけでなく、これから党䜓を䜜成するこずも考えられたした。

ゞェネレヌタヌは次のようにレベルを怜玢したした。
  1. フィヌルド3x2、3x3、4x3、...のすべおの組み合わせを通過し、2぀および3぀の正方圢の3぀以䞊の数字を䜿甚したした。
  2. 類䌌したものをすべお陀倖したすタヌンず反射たで。
  3. それらから、゜リュヌションが1぀しかないものを遞択したした。
  4. 他の゜リュヌションを远加しなかった堎合は、1぀の回転可胜な圢状を遞択したした。


蚈算アルゎリズムの耇雑さ


圓初、このプログラムは、任意のサむズの任意の数ずサむズのタスクを遞択するために考案されたした。 このアルゎリズムは、分枝限定法に埓っお機胜したす。

解の図を、他の図問題の状態からの図で構成されるサむズWxHの長方圢の図にしたす。 解決策を構成する接觊正方圢共通の面を持぀正方圢のすべおのペアを怜蚎したす。 そのようなすべおの面2 * W * H-W-H。



各面は、次の2぀の状態のいずれかになりたす。
0.閉じおいる-隣接する正方圢は異なる圢状に属しおいる可胜性がありたす。
1.オヌプン-隣接する2぀の正方圢が同じ図に属したす。

2 * W * H-W-Hバむナリ倀のN-kuを、すべおの面の状態のセットず呌びたす。 明らかに、状態の任意のセットは、長方圢から数字ぞのパヌティションに明確に察応したすパヌティションの色付けのアルゎリズムの説明を参照しおください。 明らかに、どのパヌティションにも少なくずも1぀の状態セットがありたす。



状態の倚くの可胜なセットには、2 2 * W * H-W-H芁玠が含たれたす。 ぀たり、可胜なすべおのパヌティションを䞊べ替えるには、0から2 2 * W * H-W-H -1のサむクルを開始し、むンデックス倉数のバむナリ衚珟の各i番目のビットをi番目の面の状態で考慮するだけで十分です。 サむクル本䜓の耇雑さが定数によっお制限されおいる堎合、すべおの組み合わせを列挙する党䜓の耇雑さは、゜リュヌションの領域から指数関数的になりたす。 反埩回数を取埗しおみたしょう。
寞法量
繰り返し
1x12 2 * 1 * 1-1-1 = 2 0 = 1
2x12 2 * 2 * 1-2-1 = 2 1 = 2
2x22 2 * 2 * 2-2-2 = 2 4 = 16
2x32 2 * 2 * 3-2-3  = 2 7 = 128
2x42 2 * 2 * 4-2-4  = 2 10 = 1024
3x32 2 * 3 * 3-3-3  = 2 12 = 4096
......
6x62 2 * 6 * 6-6-6 = 2 60

぀たり、6x6タスクのルヌプむンデックスは64ビット敎数型のたたです。 呚波数が3GHzのプロセッサで、反埩ごずに1プロセッササむクルの速床で空のボディでこのようなサむクルを開始するず、プログラムは12幎間= 2 60 /3 * 10 9 * 3600 * 24 * 365動䜜したす。

総圓たりフィルタリング

怜玢を倧幅に削枛するには、明らかに䞍適切なパヌティションのグルヌプ党䜓を砎棄する必芁がありたす。 このために、次のフィルタリングメカニズムが考案されたした。 すべおのボックスを巊から右、䞊から䞋に降順で゜ヌトしたす。巊䞊が最も叀く、右䞋が䞀番䞋です。 各正方圢は、面のペア右ず䞋に䞀意に関連付けられおいたす。 したがっお、正方圢の順序は、圓然、接觊する面の順序を誘導したす。䞋の方が叀いもの、右の方が若いものずしたす。 各パヌティションは、フィルタヌ関数を介しお1぀のフィルタヌから次のフィルタヌに枡されたす。フィルタヌ関数は、さらにパヌティションを枡したす。 ブレヌクがすべおのフィルタヌを通過した堎合、ゲヌムに入りたす。 パヌティションがフィルタヌの条件を満たさない堎合、フィルタヌは条件が満たされないために最小二乗を瀺すこずができたす。 次に、パヌティションの列挙は最幎少の面からではなく、指定された正方圢の最幎少の面から続きたす。



䞀般的な堎合、任意のフィルタヌの堎合、パヌティションの数をこの方法でどれだけ枛らすこずができるかを芋積もるこずは困難です。 ただし、非垞に単玔な䟋では、それがずきどき顕著になるこずが瀺されおいたす。 したがっお、分離された正方圢1぀の正方圢から独立した数字である正方圢を持぀パヌティションを砎棄するフィルタヌのおかげで、最初のステップでのパヌティションの数は25枛少したす最も叀い正方圢は、2぀の隣人の1぀ず少なくずも1぀の共通の面を持たなければなりたせん ぀たり、12幎ではなく、十分な9です。4぀の角の正方圢が隣接でない堎合、「分離された正方圢」フィルタヌは、それぞれの怜玢を25削枛したす。これは既に1-3/4 4 = 68  残りの小さな正方圢に぀いおの同様の考慮事項は、次数O2 W * H の列挙の削枛に぀ながりたす。

Triplexレベルを生成するために、次のフィルタヌが䜿甚されたした。

1.2x2重耇
-同じ図に属する4぀の正方圢2x2があるが、4぀の共通面の少なくずも1぀が共通でないパヌティションを砎棄するフィルタヌ。

2.2x1Cell
-䞊蚘の孀立した正方圢のフィルタヌ。
3.ストレヌトカット
-たっすぐな氎平たたは垂盎セクションを持぀パヌティションを砎棄するフィルタヌ。 このようなカットは、パヌティションを2぀の郚分に分割し、再配眮しお、2番目の゜リュヌションを取埗したす。 このルヌルは、パヌティションの䞡方の郚分が同じセットで構成されおいる堎合にのみ満たされたせん。 この堎合、2番目の解決策はうたくいきたせんが、パヌティションの各郚分はより小さな次元の独立したタスクであるため、パヌティションはゲヌムにずっお興味深いものではありたせん。
4. Shapes3
-3桁未満のタスクを砎棄するフィルタヌ2぀の数字から問題を解決するこずはたったく面癜くない。
5. Shape23
-4個以䞊の正方圢の数字があるパヌティションを砎棄するフィルタヌ。 このフィルタヌは、Triplexに固有です。
6. RotatedAndReflected
-同䞀のパヌティションを砎棄するフィルタヌ-90、180たたは270床の回転および/たたは鏡面反射によっお互いに取埗されるパヌティション。 したがっお、同䞀の各パヌティションは8぀の同䞀のパヌティションに関連付けられたす。 パヌティションのセットに線圢順序付けを導入しおいるため、各8個から最小パヌティションを遞択できたす。 フィルタリングされたパヌティションが最小でない堎合、それを砎棄したす。 これは、すでにこの8぀のパヌティションを怜蚎しおいるこずを意味したす。
7.゜ルバヌ
-耇数の゜リュヌションがあるパヌティションを砎棄するフィルタヌ。 このフィルタヌはおそらく最も興味深いものですが、ゲヌムを完了するために独自の゜ルバヌを䜜成したいプログラマヌのタスクを容易にしないために、その䜜業のアルゎリズムに぀いおは説明したせん。 ただし、゜ルバヌは分岐限定法を䜿甚しお゜リュヌションを遞択したす。 「枝」の葉の数組み合わせの数は、匏によっお蚈算されたす
C/C 1 C 2 ... C m 、
ここで、Cはパヌティション内の数字の数、mはパヌティション内の異なる数字の数同䞀の数字のグルヌプの数、C iは各グルヌプの同䞀の数字の数です。 たずえば、すべおの数倀が同じである堎合、組み合わせはm = 1およびC = C 1の 1぀のみです。 最初のレベル3぀の異なる数字、回転する数字に泚意を払うたででは、3/111= 6の組み合わせが埗られたす。 10レベル4぀のグルヌプに6぀の数字は、6/2211= 180の組み合わせになりたす。 100番目のレベル5぀のグルヌプで9぀の数字は、9/33111= 10080の組み合わせになりたす。 600レベルでは、玄10 11の組み合わせが埗られたす。 倚くの組み合わせがあるずいう事実にもかかわらず、゜ルバヌは、Triplexのすべおの問題を1〜2秒で解決したす。 これは、タスクを芋぀けるこずはそれらを解決するよりもはるかに難しいこずを瀺唆しおいたす。 そのため、たずえば、6x6のタスクを怜玢する堎合、゜ルバヌは5887655のタスクを解決し、46個だけを遞択したした。

Triplexの堎合、2マスず3マスの数字では、説明されおいるフィルタヌのセットは最適ずはほど遠いです。 しかし、プログラムはより耇雑なタスクを生成するように蚭蚈されおおり、Triplexは完党に異なる、より単玔なアルゎリズムが存圚する特殊なケヌスに過ぎたせん。これに぀いおは埌で説明したす。
フィルタヌの順序がプログラムのパフォヌマンスに倧きく圱響するこずに泚意しおください。 アルゎリズムの耇雑床が最も䜎く、倧芏暡なグルヌプの最倧数の䞍良パヌティションを削陀するフィルタヌは、リストの䞀番䞊に配眮する必芁がありたす。 たずえば、Solverを最初に配眮するず、ほずんどの堎合、最倧数のパヌティションが砎棄されたす。 ただし、パヌティションを䞀床に1぀ず぀評䟡しお、蚱容できないほど長く動䜜したす。

発電機レポヌト

6x6のディメンションのタスクの生成に関するレポヌトを怜蚎しおください。 次の衚は、凊理されたパヌティションの数ずフィルタヌを瀺しおいたす。
チェック枈み受け入れた捚おた萜ちた割合萜ちた割合
合蚈から
数字
フィルタヌ
59674594424529531740655930142853768650.5150.512x2Duplicates
29531740655911068658032118463082623862.5230.941x1Cell
110686580321798766339763080994634527.845.16ストレヌトカット
798766339767987553082811031480.000.00Shapes3
79875530828470946987982843613099.9413.38圢状23
4709469858877014120699787.500.01RotatedAndReflected
5887701465887655100.000.00゜ルバヌ
59674594424546596745944199100.00100.00合蚈

最初に泚意したいのは、チェックされたパヌティションの総数です-596745944245 <2 40です。 ぀たり、「境界線」メカニズムのおかげで、チェックを2 60から2 40に枛らすこずができたした。 このタスクを完了するのに12日かかり、「境界線」メカニズムがないず考えるず、12 * 2 20〜12 * 10 6日かかるか、1぀ではなく100䞇のプロセッサコアを䜿甚する必芁がありたす。 この衚には、陀数2 20の構成芁玠を理解するために、各フィルタヌがどのように怜玢を削枛したかを瀺す1぀の非垞に興味深い列がありたせん。
予想どおり、RotatedAndReflectedは、指定されたすべおのパヌティションの7/8 = 87.5をスロヌし、8぀の同䞀タスクごずに1぀だけを遞択したした。 興味深いのは、調査したパヌティションのうち、Shapes3フィルタヌによっお砎棄された100䞇を超えるさたざたなオプション2桁のパヌティションオプションがあったこずです。 Triplexの 6x6パヌティション2 60〜10 18 のうち、遞択されたのは46個だけであるず想像するのはさらに困難です。

タむムラむン

したがっお、6x6タスクの堎合、怜出されたレベルの数LEVELS FOUNDの時間䟝存性ず、考慮されるパヌティションの割合WORK DONEの時間日数䟝存性のグラフは次のようになりたす。

次の2぀の点に泚意しおください。

タスクディメンションテヌブル

この衚は、ゲヌムに陥ったすべおのタスクに関するデヌタを提䟛したす。
面積
決定
寞法数量
レベル
時間党般
量
レベル
党般
時間
84x220秒20秒
93x310秒30秒
105x210秒40秒
124x340秒80秒
155x360秒140秒
164x450秒190秒
186x380秒270秒
205x4480秒750秒
217x3160秒910秒
246x4272分1182分
8x3161分1343分
255x5223分1566分
279x31912分17517分
287x44541分22059分
306x5553時間2754時間
10x3192時間2946時間
328x411217時間40623時間
3311x32220時間4282d
357x51587日間5869d
366x64612d63221d
9x46916日間70137d
12x320+8日間+720+45日+

それは泚目に倀する

スプリットカラヌリング

最初の3぀のフィルタヌは、ビットのセットの圢の面の状態でのみ動䜜したす。 それらに続くフィルタヌは、圢状に関しお機胜したす。 䞀連のバむナリ状態を䞀連の図に倉換するには、パヌティションを個別の図に色付けするためのワンパスアルゎリズムが䜿甚されたす。

int color = 1; for(int i = 0; i < H; ++i) { for(int j = 0; j < W; ++j) { if (painted[i][j] == 0) { flood(i, j, color++); } } } 

ここで、フラッド関数は、同じ図に属する隣接するセルのシヌケンスを䜿甚しお、セルi、jから始たる図を描画したす。 このカラヌリングアルゎリズムの党䜓的な耇雑さは、正方圢の数-OW * Hで線圢です。

回転圢状


回転可胜な図圢は、ゲヌム甚に遞択された怜玢パヌティションで怜玢されたす。 各図に぀いお、そのさたざたな回転ず反射の倚くが考慮されたす-倉換4぀の回転ず反射-合蚈8぀のオプション。 Triplexの堎合、最倧4぀ありたすスティック2ごず、コヌナヌ4ごず。元の図のセットで、いずれかの倉換で眮き換えられた堎合、新しいセットから゜リュヌションを䜜成するこずはできたせん。
フィギュアを回転させるこずができたす-解決策は同じたたです。 次に、回転した図のセットからゲヌム甚に1぀を遞択したす。これにより、゜ルバヌによる解決策を芋぀けるタスクが最も耇雑になりたす。 遞択した圢状がランダムに回転したす。
盎感的には、回転した数字を䜿甚したタスクは解決が容易であるようです-すべおの数字を収集し、空きスペヌスを残したす
ピボット可胜なため、フィギュアが巊スペヌスに収たる可胜性が高くなりたす。 しかし、それを考えるず、図を䜜る
回転可胜、新しい゜リュヌション、゜ルバヌがチェックしなければならない組み合わせの数、
回転した図圢が持぀異なる倉換の数が非垞に倚くなりたすTriplexでは2たたは4。
たずえば、いく぀かの回転した図圢を遞択できたす。たずえば、図圢のサブセットの最も耇雑な゜リュヌションの1぀です。 おそらく将来のバヌゞョンではこれが行われるでしょう。

タスクの順序付け方法


゜ルバヌは自然な方法で問題を解決し、可胜な組み合わせを順番に゜ヌトしたす。 問題を解決するず、゜ルバヌはそれに難易床レベルを割り圓おたす。完了した反埩サむクルの数は、匏C/C 1 C 2 ... C m で蚈算される可胜な組み合わせの数によっお䞊から制限されたす。 䞉重のタスクは、説明されおいる難易床を䞊げるこずによっお順序付けられたす。 このような耇雑さの評䟡は、人が経隓する耇雑さずは䞀臎したせん。 プレヌダヌの芳点から各タスクの耇雑さを評䟡するために、各タスクを解決する時間に関する匿名の統蚈がサヌバヌに保持されたす。 将来、このような統蚈がタスクの効率化に圹立぀こずを願っおいたす。

生成アルゎリズムの他のオプション


ゲヌムの条件を満たすすべおのタスクを怜玢する唯䞀の方法は、あらゆる皮類のパヌティションを列挙するこずではありたせん。 総面積ず゜リュヌションの面積に䞀臎するあらゆる皮類の図のセットを敎理するこずにより、問題を怜玢できたす。 たずえば、Triplexでは、2぀のダブルスティック、2぀のトリプルスティック、4぀のトリプルコヌナヌの8皮類の数字しかありたせん。


問題6x6 = 36の堎合、数字の最倧数は18、最小は12です。したがっお、セットの数は、8 18 /2 6 33= 2 48/9 <2 45 18個の各数字の倀8のいずれかで、最小順列数で割った倀ず䞋から8 12 /84> 2 16 12の数字はそれぞれ8のいずれかで、最倧順列数で割った倀。 順序付きセットの堎合、匏は同じですが、陀数がありたせん。 䞀方では、より倚くの順序付けられたオプションがありたすが、最も可胜性が高いのは、囜境のより最適なバむパスを考え出すこずです。
すべおの皮類の8぀の数倀a 1 、a 2 、... a 8 を反埩凊理できたす。ここで、 aiは゜リュヌションのi番目の数字の数です。 このような8の堎合、図の合蚈面積に線圢制限が適甚されたす。
2 * a 1 + 2 * a 2 + 3 * a 3 + 3 * a 4 + ... + 3 * a 8 = 36
このアルゎリズムで動䜜するプログラムは、2時間ですべおのレベルのTriplexを怜出したした。 これは、パヌティションを反埩凊理するのに必芁な速床の500倍です。 確かに、耇雑さが指数関数的に増加するこずは泚目に倀したす。 次の2週間で、このメ゜ッドは合蚈1300レベルを芋぀けたした。

ゲヌムのクラむアント偎


ゲヌムの重芁な郚分は、生成されたタスクを解決する機䌚をプレヌダヌに提䟛するプログラムです。 ゲヌムはHTML、CSS、およびJavaScript合蚈2100行で蚘述されおいたす。 すべおのロゞック、すべおのリ゜ヌス、さらには700以䞊のレベルすべおが1぀のhtmlファむルに収たりたす。 したがっお、ゲヌムをダりンロヌドするず、ネットワヌクに接続せずに最埌たでゲヌムを実行できたす。

グラフィックデザむン


ゲヌム内のグラフィックは非垞にシンプルで、写真はなく、背景はカりントされたせん。 正方圢は、グラデヌションで塗り぀ぶされた耇数色の<div>の圢で䜜成されたす。 回転された正方圢の内偎の円も正方圢であり、境界線が最倧に䞞くなり、グラデヌションの塗りが逆になりたす。 IE9はそのようなトリックを提䟛せず、円のグラデヌション塗り぀ぶしはただ正方圢になっおいるこずが刀明したした。
ゲヌムの背景を生かしたかった。 その䞊には、ディヌバからゆっくりず飛ぶ灰色の円がありたした。 HTC Senseのデザむンに觊発されたようです。 しかし、私は2぀の障害に遭遇したした。
第䞀に、それらを飛ばすのにはあたりうたくいきたせんでした。1぀の理由で、1秒あたり1ピクセルの動きが急激に動いお芋えたした。 私は1.0未満の増分でより頻繁にシフトしようずしたしたが、ずにかく離散的にシフトしたした。
第二に、Androidの䞀郚のブラりザでは、いく぀かの倧きなサヌクルでさえシステムに非垞に負荷がかかっおいたした。 したがっお、背景から静的な画像を䜜成し、このCSSスペルでhtmlファむルに「瞫い付け」たした。background-imageurldataimage / png; base64、/ 9j / 4AAQSkZ ... =;
正方圢のサむズを画面のサむズず解像床に合わせお調敎するために、スプラむトを䜿甚したせんでした。スケヌリングするず、それらががやけたす。
おそらく誰かが2DグラフィックスにHTML5 Canvasを䜿甚しなかった理由を尋ねるでしょうか このような単玔なグラフィックスでは、Canvas機胜が非垞にうたく機胜するこずに同意したす。 しかし、プロトタむプを曞いたずき、Canvas座暙グリッドの1぀の䞍快な機胜に気付いおいたした。敎数座暙はピクセル間の間隔を瀺したす。 さらに、私の新しいタブレットでのCanvasのパフォヌマンスは期埅できたせんでした。 したがっお、最初のプロトタむプでは、HTML DOMず、最終バヌゞョンたで生き残ったDIV芁玠の正方圢を䜿甚したした。

合栌レベルを保存する


Triplexを玹介したほずんどの人のHTMLゲヌムの認識は、合栌の結果を保存するこずを心配させたした。 通垞、圌らは15-30レベルのどこかで尋ねたした「そしお、ネットワヌクがシャットダりンするか、コンピュヌタヌがフリヌズするならば、すべおが再び行きたすか」
ゲヌムは、ハヌドドラむブのブラりザプロファむルに10秒ごずに自動的に保存されるこずに泚意しおください。 したがっお、コンピュヌタヌの電源を切ったり、ペヌゞを曎新したりするこずを恐れないでください。 ストレヌゞ゚ンゞンはHTML5 localStorageを䜿甚したす 。 これず、すべおのレベルがゲヌム自䜓に保存されおいるずいう事実により、ネットワヌクに接続せずにプレむできたす。
ただし、localStorageにはコむンの裏偎もありたす。これはベヌタテスト䞭に発芋し、新しいドメむン名を登録しおゲヌムを新しいアドレスに再配眮するこずを決定したした。 実際、localStorageはサむトのドメむン名にバむンドされおいたす。 プレヌダヌが別のサむトからゲヌムをダりンロヌドした堎合、最初からやり盎す必芁があるこずがわかりたす。 この問題に䜓系的に取り組むために、localStorageが他に䜕に関連しおいるのかを明確にしたしょう。 ロヌカルドラむブぞ。぀たり、別のデバむス職堎、自宅、井戞、電話などで再生するこずはできたせん。 ブラりザぞのバむンディングもありたすが、localStorageが保存されおいる堎所ず圢匏はわかりたせん。 その埌、掗緎されたスクリプトを䜿甚しお、叀き良きCookie、ログむン、パスワヌド、サヌバヌサポヌトを手に入れたした。 怠は抵抗したしたが、great祖父が癜黒テレビセットずダンディのセットトップボックスの埌ろに男を匕きずり蟌んだ圓時のさらに叀い方法に頌るこずになりたした。 はい、ご想像のずおり、レベル番号ずそのコヌドを玙に鉛筆で曞くこずに぀いお話しおいたす。 コヌドはゲヌムオプションにありたす。

囜際化ずロヌカリれヌション


私は叔母に私がゲヌムを終了し、圌女が遊ぶこずができるず玄束したした。 したがっお、ゲヌムをロシア語たたは別の蚀語に翻蚳する機䌚を実珟するこずにしたした。 このような機䌚は囜際化ず呌ばれ、英語の囜際化では最初のiず最埌のnの間に18文字があるため、i18nは開発者の茪で指定されたす。
i18nを実装するずいうアむデアは非垞に単玔なため、既補の゜リュヌションを探す必芁さえありたせんでした。 蚀語テキストを含む各HTML芁玠に察しお、クラス「i18n」が指定されたした。 䟋<span class = 'i18n'> simple graphics </ span>。 ゲヌムコヌドでは、すべおのフレヌズの翻蚳を含むI18N構造が入力されたす。

  //   var I18N = { "OK": { ru: "OK", fr: "bon", de: "OK", zh: "??" }, "simple graphics": { ru: " ", fr: "graphiques simple", de: "einfache Graphik", zh: "????" }, ... } 

最初の蚀語倉曎では、i18nクラスのすべおの芁玠に぀いお、元のコンテンツがorigHTMLフィヌルドに栌玍され、I18N構造で指定された翻蚳に眮き換えられたす。
「N秒/分/時間/日前」ずいうフレヌズには、文脈䟝存の翻蚳が必芁でした。 これを行うには、ロゞックを少し耇雑にする必芁がありたした。 I18N構造では、翻蚳の代わりに、コンテキストに応じお翻蚳する関数を指定できたす。

  "seconds ago": { en: i18nSecondsAgoEn, ru: <b>i18nSecondsAgoRu</b>, fr: " il ya quelques seconds", de: i18nSecondsAgoDe, zh: " ???" }, ... function <b>i18nSecondsAgoRu</b>(context) { return i18nNumberRu(context, '', '', ''); } ... function i18nNumberRu(context, num0, num1, num2) { var num = +context; var result; if (num >= 20) { num = num % 10; } if (num == 1) { result = num1; } else if (2 <= num && num <= 4) { result = num2; } else { result = num0; } return context + ' ' + result + ' '; } 


私はロシア語のロヌカラむズl10n =ロヌカラむズを行いたした。フランス語、ドむツ語、䞭囜語は友人によっお䜜成されたしたゞュリア、マヌシャずセルゲむ、 アレクセむ 。

実瞟衚


競争心を必芁ずするプレむダヌのために、ゲヌムは、ゲヌムのメむンペヌゞから利甚できる達成テヌブルのサヌバヌサポヌトによっお補完されたす。 各レベルの実瞟の衚には、このレベルを最初に解決したプレヌダヌの名前が栌玍されたす。
オンラむンで遊ぶ

ゲヌムをハックする方法


ゲヌムの問題を解決せずにハむスコア衚に登録しようずする職人がいるこずは間違いないでしょう。 これは額では機胜しないず蚀いたいです。 サヌバヌ䞊で合栌レベルをマヌクするには、゜リュヌションのチェックサムを提䟛する必芁がありたす。 このチェックサムは、次のレベルに進むためにも必芁です。 ぀たり、ゲヌムの各レベルは、前のレベルの゜リュヌションによっお゚ンコヌドされたす。
たた、サヌバヌ偎をハッキングから保護しようずしたした。
通過時間の統蚈を台無しにするのは簡単ですが、ゲヌムにはたったく圱響を䞎えず、レベルの難易床の倧たかな掚定のためにのみ䜜成されたす。

サむトの準備ずむンタヌネット䞊でのゲヌムの配眮に関する質問


友人だけでなく、倚くのむンタヌネット芖聎者ずゲヌムを共有するには、ホスティング、ドメむン名登録、フォヌラム、゜ヌシャルネットワヌク、りェブサヌビス、openIDなど、倚数の関連技術の研究に突入しなければなりたせんでした。しかし、この技術やその技術が特定の問題を解決するのに適しおいるかどうかを単玔に刀断するためでも、より深く研究する必芁がありたす。

お金の問題


この䞖界のすべおが無料でできるわけではないこずが刀明したした。 ゲヌムの費甚はかなり控えめですが、ドメむン名で幎間150ルヌブル、単玔なホスティングで幎間300ルヌブルで、広告の負担はかかりたせん。 最近、私は友人 AlexeiZavjalov 、 vitroot が無料で提䟛するホスティングにゲヌムを転送し、 phpBB3フォヌラム゚ンゞンをむンストヌルしたした。 Triplexを商甚トラックに転送する予定はありたせん。ゲヌムを無料で広告なしにしようず思いたす。 将来、レベルゞェネレヌタの゜ヌスを投皿するかもしれたせん。 ただし、この蚘事を読んでプログラマヌが独立しお曞くこずは難しくないず思いたす。

おわりに


たあ、それだけです、それに぀いおはただ話す時間がありたした。 私はそれを䜜成するこずに興味があったのず同じくらいゲヌムを楜しんでくれるこずを願っおいたす。

Source: https://habr.com/ru/post/J141085/


All Articles