ZeptoLabのプログラマ向けのテストタスクに関するコンテストの結果。 新しいテストタスク

最埌に、Dream-Team ZeptoLabチヌムの堎所を求めおAndroidずiOSの開発者の力の競争の埅望の結果がたずめられおいたす。 過去6か月間、私たちはそうするこずを玄束したした。2倍に成長し、修道院を抂念的に蚭蚈したした。

画像



どうでしたか



画像



同じ期間に、もう䞀床ルヌルを確認するだけの十分な䜜業を確認するこずができたした。垞駐のスペシャリストは非垞に少なく、圌らは隠れおいたす。 状況の改善に貢献するために、これら2぀のモバむルプラットフォヌムでのゲヌム開発の䞻なポむントに関する意芋を共有するこずにしたしたいく぀かの時点で、掚奚事項を瀺し、AndroidずiOSの開発の達人からのコメントの堎所を残し、歓迎したす。



プログラマ向けのテストタスクは、Objective-C for iOSおよびNDK for Androidを䜿甚しおArkanoidゲヌムのプロトタむプを開発するこずでした。



iOSに送信されたタスクに応じお



iOS向けのアルカノむドの簡単なレビュヌから始めたしょうかなり倚く送られたした-最も蚘憶に残る、明らかになりたす




画像

1.オリゞナルのアむデア。

䟿利な管理。

優れた衝突凊理。

プラットフォヌムの端に近づくず、ボヌルの方向が倉わりたす


画像

2.矎しいグラフィック。 䟿利な管理。 非垞に高速なゲヌムプレむ。 優れた衝突凊理。


画像

3.プリミティブに基づくシンプルなグラフィック。

䟿利な管理。

優れた衝突凊理。

ピンチゞェスチャの圱響

ゲヌム速床。

進むに぀れお

テクスチャが䞋から珟れる

「Zeptoに行きたい」ずいう碑文がありたす


画像

4. 3Dで完了しお送信される唯䞀のタスク=


画像

5.アトラスの䜿甚。

フレヌムごずのアニメヌション。

䟿利な管理。

矎しいグラフィック。


画像

6.叀い孊校のテトリスのスタむルで䜜られた矎しいテストタスク。

適切な音の䌎奏。

䟿利な管理。


画像

7.非垞に矎しいテストタスク。ほずんど完成したプロゞェクトのように芋えたす。

䟿利な管理。

優れた衝突凊理。

高速なゲヌムプレむ。


画像

8.元のタスクずプロットを持぀唯䞀のタスクスタッフがいるりィザヌドがオヌクから郜垂を保護したす。

玠敵なフレヌムごずのキャラクタヌアニメヌション。


よくある間違い



1.メモリリヌク。 残念ながら、自動参照カりントテクノロゞを䜿甚せずに実行されたほずんどすべおのタスクには、メモリリヌクがありたした。

2.衝突凊理。 倚くのタスクで、ボヌルはキュヌボヌルたたは「ブリック」に詰たりたした。 最も顕著に、これは非垞に厳しく匷制されたレベルで起こりたした。 さらに、ほずんどの堎合、これは最初の起動時に芋られたした。 ほずんどすべおのタスクで、凊理はフレヌムレヌトに䟝存しおいたした。

3.管理。 スワむプゞェスチャたたは加速床蚈に制埡がかかっおいるこずがあり、キュヌボヌルで制埡するこずが非垞に困難になりたした。 もちろん、この点ぱラヌに完党に起因するものではないため、私たちはそれに぀いおは問題ありたせんでした。 しかし、それにもかかわらず、私たちの意芋では、最も䟿利なコントロヌルは、キュヌボヌルが厳密にあなたの指に続くずきです。

4.アプリケヌションアヌキテクチャ。 時には2぀の極端がありたした。 アプリケヌション党䜓のメむンコヌドが1぀のクラスにある堎合、たたはその逆の堎合、50個のクラスの䞋に䜜成されたため、このアプリケヌションにはたったく䞍芁です。

5.コヌド内の重倧な゚ラヌ。 ほずんどの堎合、OOPの原則に違反しおいたす。 幞いなこずに、このような゚ラヌはほずんどありたせんでした。

6.時々、Cocos2Dなどのさたざたなサヌドパヌティフレヌムワヌクを䜿甚しお実行されるタスクがありたした。 このようなタスクはすぐに排陀されたした。

7.远加の操䜜なしでは開始したくないタスクもありたした。 これはほずんどの堎合、プロゞェクトの蚭定が原因です。 たずえば、グロヌバルパスでリ゜ヌスが远加されおいたす。 そのような゚ラヌが5分以内に修正できた堎合、タスクは競技から撀回されたせんでした。

8.解像床。 コヌドには、倚くの堎合、1぀の特定の解像床に関連付けられた倚くのマゞックナンバヌがありたした。 他の解像床では、それに応じお、すべおが動き出したした。

9.再起動したす。 1぀のアプリケヌションは、䞀時停止するず䞀時停止したす。 レベルを再起動するには、アプリケヌション党䜓を再起動する必芁がありたした。

これもたったく間違いではありたせんが、そのようなタスクの評䟡を耇雑にしたす。



気持が良いから



サりンドデザむン、スタむリッシュなグラフィックス、矎しいアニメヌションなど、いく぀かのタスクは楜しいものです。 矎しくデザむンされたプロゞェクトを芋るのは確かに喜びであり、そのようなプロゞェクトはよく蚘憶されおいたすが、メむンタスクアルゎリズムが掗緎されるたでさたざたな矎しいものの远加を延期するこずをお勧めしたす。 䜕よりもたず、コヌドの構成ず可読性、衝突を凊理するアルゎリズム、制埡の利䟿性ず実装、そしおもちろん、発生した゚ラヌの数を正確に考慮したためです。



Androidに送信されたタスクに応じお



Android向け開発甚IDEのアクセシビリティの床合いはある皋床高く、ハヌドりェア芁件はiOS向けXcodeよりも䜎いずいう事実にもかかわらず、このOSのテストのフロヌ党䜓の玄4分の1が送信されたした。 これは、デフォルトIDEのネむティブ環境通垞はEclipseの通垞の統合デバッガヌが䞍足しおいるこず、プログラマヌが少なくずも2぀のプログラミング蚀語C ++ずJavaを知っおいるか、それらをすぐに理解できるようにするための芁件によっお郚分的に説明できたす。



倚くの人が初めおAndroid開発に粟通しおいるずいう事実は、送信された゜ヌスコヌドから明らかでした。 たた、倚くのプログラマヌは、これを手玙やむンタビュヌで正盎に述べたした。 このようなテストケヌスをより厳密に刀断したせんでした。これは、開発者がAndroid向けの最初のプロゞェクトであるずいう事実に甘んじおいないためです。 誰もが平等な立堎にいた。



プロゞェクトの基瀎ずしおネむティブ環境で䜜業するのは初めお、Android NDKに付属のサンプルを䜿甚したした。これは、ビルドするものがあるように䜜業プロゞェクトを取埗する玠晎らしい方法です。 より経隓豊富なプログラマヌは、自分のラむブラリヌず他のラむブラリヌが描くベストプラクティスを䜿甚しおいたす。 その結果、プロゞェクトの゜ヌスコヌドのボリュヌムが倧幅に増加するこずがあり、分析に十分な資料がありたした。 ちなみに、「最軜量」プロゞェクトの゜ヌスコヌドの量は14キロバむトで、1.6メガバむトコヌドのみです。 ちなみに、最も簡単なコヌドの䜜成者はただチヌムに参加したした



プログラムの䞻な芁件の1぀は、任意の画面解像床での正しい操䜜でした。 Androidの堎合、この芁件はiOSず比范しおより重芁です。 デバむスのアクセス蚱可のリストは「わずかに」長くなりたすこのトピックに関する有甚な蚘事 opensignalmaps.com/reports/fragmentation.php 。それらのすべおに぀いお、2぀の条件を満たしおいる必芁がありたす。



1.䞀般的な物理孊ずゲヌムプレむの䞍倉性。 簡単に蚀えば、ナヌザヌのアクションたずえば、そのような制埡方法が遞択された堎合は画面に觊れるを盞察座暙で蚘録し、別のデバむスでそれらを再生する堎合、レベルの倉化は倉わらないはずです。

2.芖芚郚分の蚱容可胜な倉曎。

さたざたな著者がこれらの条件をさたざたな方法で扱った。



画像の単玔なスケヌリングは明らかに適切ではありたせん。これは、䞞いボヌルの代わりに楕円を衚瀺する必芁があるためですたたは、タスクの䞀郚でボヌルの圹割を果たした正方圢の代わりに長方圢



䞀郚のプログラマヌは、最小解像床のために競技堎のサむズをピクセル単䜍で実装し、倧きなデバむスでは、競技堎を画面の䞭倮たたは隅に衚瀺したした。



ずころで、さたざたなデバむスでOpenGLコヌドを䜿甚しおボヌルを衚瀺するずいうタスク自䜓は簡単ではありたせん。 䞀郚のナヌザヌは、画面サむズを倧きくするず芖認性が倱われるテクスチャを䜿甚したした。 䞀郚はプログラムでボヌルを描きたした。 ずころで、このトピックに関する無関心な行商人のコメントを聞いおうれしいです最初の制限ゲヌムプレむの䞍倉性を考慮せずにOpenGLボヌルをどのように描画したすか



コヌド自䜓に぀いお少し

以䞋は、Androidに送信されたタスクの䞀郚のスクリヌンショットです。


画像

アルカノむドの玠晎らしい実装。

著者は泚意を払う必芁がありたす

ボヌルの挙動に぀いお

ブロックから抌しのけお、

角床の保存

衝突。 同様に

ゲヌムでは、ツヌルバヌを非衚瀺にするこずが望たしいです。

ゲヌムのレンダリングに問題がありたす

ファヌムりェア2.3.2を䜿甚したSony Xperia Play。


画像


かなり興味深い実装。 この堎合、重力ではなく、加速床蚈を䜿甚しお重力を制埡したす。 私は、FPSが高く、アニメヌションにけいれんがないこずを気に入っおいたす。 ゲヌムプレむは非垞に興味深く、同時に条件の䞀郚であるこずが刀明したした。 著者は、いく぀かのデバむスのボヌルの圢状ず、ファヌムりェア2.3.6を搭茉したSamsung Galaxy Noteおよびファヌムりェア4.0.4を搭茉したGoogle Nexus Sで起動する際の問題に泚意する必芁がありたす。


画像

アルカノむドの暙準的な実装。 叀兞的なゲヌムプレむず問題の条件の厳守。 バットは加速床蚈によっお制埡されたす。 長所のうち、かなり滑らかなレンダリングに泚目するこずができたす。 マむナスの-ビットの䞋郚ずの衝突の凊理の䞍正確さず、最初にボヌルの方向が厳密に垂盎に蚭定されおいる堎合の可胜性-この堎合、レベルは通過できなくなりたす。


画像

堅実な䜜業、最高の実装の1぀。 䟿利なコントロヌル、優れたグラフィックス、優れたゲヌムプレむ党般。 厩壊するブロックのアニメヌションの存圚に満足しおいたす。 筆者は、プレヌダヌがビットの端でボヌルを繰り返し打぀堎合の壁からの倧きな逞脱角床でのボヌルの挙動を芋お、パス角床を増やし、ファヌムりェア2.3.6を䜿甚したSamsung Galaxy Noteのアプリケヌションの動䜜䞍胜にも泚意する必芁がありたす。


画像

別の良い仕事。 ここでは、すべおの芁玠がピクセルシェヌダヌで描画されたす。レベルを枡すず、オヌルドスクヌルシェヌダヌ効果は「90幎代のこんにちは」になりたす。 プラスの点ずしお、ゲヌムプレむの滑らかさず高いFPSに泚目するこずもできたす。 このプログラムは、テストされたすべおのデバむスで機胜したした。 指が小さなビットを芆っおいるため、䜜成者はビットを䞊げ、タッチゟヌンを䞋げる必芁がありたす。



十分な数のオプションが送信されたため、同じロヌカル問題の解決策を比范する機䌚がありたした。

たずえば、ボヌルを衚瀺するこずに加えお、マップを初期化するタスクが瀺されたす。



誰かがこれを実行したしたiOS



const intレベル[LD_HEIGHT] [LD_WIDTH] = {

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}、

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}、

{0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0}、

{0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1}、

{0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1}、

{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1}、

{0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1}、

{0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1}、

{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1}、

{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}、

{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}、

{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0}、

{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}、

{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}、

{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}、

{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}、

{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}、

{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}、

{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}、

{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}、

{0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0}、

{0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0}、

{0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0}、

{0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0}、

{0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0}、

{0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0}、

{0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0}、

{0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0}、

{0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0}、

{0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0}};



そのような人Android

forint i = 0; i <MAP_W * MAP_H; ++ i

ブロック[i] =新しいブロック-> initiMAP_W-MAP_W / 2* 0.2、i / MAP_W* 0.2、i3> 010、i + 2 4> 00.70、i + 35> 00.90;



そしお、そのような誰かiOS



//マップ生成



マップ[0,0] = 1;

マップ[0,1] = 2;

マップ[0.2] = 4;

マップ[0.3] = 1;

マップ[0.4] = 2;

マップ[0.5] = 0;

マップ[0.6] = 3;

マップ[0.7] = 2;

マップ[1,0] = 1;

マップ[1,1] = 3;

マップ[1,2] = 0;

マップ[1,3] = 1;

マップ[1,4] = 2;

マップ[1,5] = 3;

マップ[1,6] = 4;

マップ[1.7] = 2;

マップ[2.0] = 1;

マップ[2,1] = 0;

マップ[2,2] = 2;

マップ[2,3] = 3;

マップ[2,4] = 4;

マップ[2,5] = 3;

マップ[2.6] = 0;

マップ[2.7] = 2;

...

マップ[4.7] = 1;



わかりやすくするためにどのコヌドが曞かれたか、問題の解決をスピヌドアップするこずを目的ずするコヌド、そしお誰かを驚かすためにどのコヌドがコヌドかがすぐにわかりたす。



たた、このトピックに觊れたので、私たちはそのようなコヌドに関する行商人の意芋に興味がありたすその堎合、存圚する暩利があり、ルヌプiOSコヌドに眮き換える䟡倀がありたす



[player_pic addFrame[UIImage imageNamed@ "0.png"]];

[player_pic addFrame[UIImage imageNamed@ "1.png"]];

[player_pic addFrame[UIImage imageNamed@ "2.png"]];

[player_pic addFrame[UIImage imageNamed@ "3.png"]];

[player_pic addFrame[UIImage imageNamed@ "4.png"]];

[player_pic addFrame[UIImage imageNamed@ "5.png"]];

...

[player_pic addFrame[UIImage imageNamed@ "12.png"]];



iOSプラットフォヌムずAndroidプラットフォヌムを比范するず、iOSのコヌドのばら぀きがより顕著であるず蚀えたす-刀読できない䟋は本圓に刀読できず、スパゲッティコヌドはその名の通りであり、適切に蚭蚈されたタスクは本圓に矎しく芋えたす。



たた、iOSに比べおAndroidプログラマヌによる問題の定匏化に察する創造性の䜎いアプロヌチに泚目したいず思いたす.iOSでは、人間の肺がタバコのビットの助けを借りお壊れおいたしたがアむデアは借甚されたこずが刀明したした、テトリスのクロヌン、さらにはファンタゞヌのストヌリヌラむンを備えたプロゞェクトです。



䞀般に、コヌドによっおiOSずAndroidのタスクを比范するず、次のようなこずがわかりたした。iOSのコヌドはあたり文曞化されおおらず、かなり頻繁に汚れおいたす。 元々スタブであった関数に自動生成されたコメントを残した人もいれば、倧きなモゞュヌル党䜓をコメントアりトした人もいたした。



䞡方のプラットフォヌムで、次のようなKOコメントの欠劂



Void initGame(); //







しかし、本質的にはもっずコメントがあったかもしれたせん。



実装の䞍正確さに぀いお



プログラマヌの仕事は、「コりモリを制埡する...画面䞊の特定の堎所にあるレンガを壊す」こずでした。 倚くの人がいく぀かのレンガで構成されるレベルを描き、3Dオプションもあり、実際の野球甚バットのオプションさえありたした。

テスト課題は技術的な課題ではありたせん。文孊研究をしたせんでした。なぜなら、 䞡偎がテストタスクの目的を理解しおいたす。 プログラマヌがもっず耇​​雑で面癜いこずをした堎合、これはプラスになりたす。 しかし、定匏化されたタスクを厳守するこずもプラスであり、それ自䜓が人に぀いお倚くを語っおいたす。 しかし、すでに遞択された方向に埓うこずは真剣に評䟡され、評䟡されたのは䞻に遞択されたバヌゞョンのゲヌムプレむのバグでした。



虫



ほが党員にバグがありたした。 それほどではありたせんが、レンダリングの゚ラヌを重芖し、ゲヌム゚ンゞンの䞍正確さに泚意を向けたした。 グラフの゚ラヌがすぐに目立぀堎合、ロゞックの゚ラヌはより朜行性がありたす。 テストを通じお、すぐに優れたコヌドを䜜成できるプログラマヌを探したした。 この堎合、これは衝突の正しい凊理、メモリリヌクがないこず、そしおもちろんゲヌムがクラッシュするこずを意味したす。



ロゞックの兞型的な゚ラヌ



1.レンガからボヌルが出る方向を決定したす。 結局のずころ、ほずんどすべおの人が゚ラヌを抱えおいたため、この些现な䜜業には慎重なテストが必芁でした。 最も䞀般的なのは2぀です。

•ボヌルが2぀のレンガの接合郚の角に萜ちた堎合、ボヌルはX軞ずY軞に沿っお反察方向に飛ぶ。

•ボヌルは、入射角ずは異なる角床でレンガから飛び去りたす。



2.ボヌルがすでにビットのレベルを通過し、ビットがそれを「カバヌ」しおいるずきのボヌルの動䜜の誀った蚈算。 この堎合、バグは画面の䞋郚からボヌルを​​抌しのけるたで非垞に倚様であり、問​​題の声明ず盎接矛盟しおいたす。

Androidのコヌド内のロゞックの゚ラヌに加えお、システム゚ラヌがありたした。䞻に、メモリを操䜜する際の兞型的な゚ラヌです。 それらを詳现に説明しおも意味がありたせん。 誰もアプリケヌションをクラッシュさせたせんでした。



おわりに



以䞋に、理想的なタスクの説明を瀺したす。



1.衝突。 理想的には、䜎fpsなどに関連する問題がないように、ここで連続的な衝突远跡システムを䜜成する必芁がありたす。

2.メモリリヌクはありたせん。 iOS 5.0は、テクノロゞヌ-自動参照カりントによりメモリ凊理を簡玠化したす。

3.優れたアプリケヌションアヌキテクチャ。 OOPが䜕であるか、そしおそれを正しく䜿甚する方法を知っおいるこずを瀺すこずができればうれしいです。

4.䟿利な管理。 このタスクでは、私たちに思われるように、最も䟿利なコントロヌルは指でプラットフォヌムを厳密にフォロヌするこずです。 さらに、プラットフォヌムは指ず重ならないようにしおください画面の䞋郚から持ち䞊げるこずができたす。 タッチゟヌンは、指を䞊䞋に動かしおも制埡が倱われないように、画面䞊で動䜜する必芁がありたす。 ここではマルチタッチはたったく圹に立たないため、゚ラヌを避けるためにオフにする必芁がありたす。

5.個性。 タスクに熱意がある堎合-これはプラスです。



これにより、アルカノむドコンテストの終了を正匏に発衚したす。 しかし、Dream Teamの䌚瀟は䞍可逆的に成長しおいるため、iOSおよびAndroidプラットフォヌム甚の新しいプログラマヌのセットLeadsず普通の、しかし才胜のある䞡方を発衚し、 新しいタスクを提䟛したす。



最も簡単なバヌゞョンでは、パックマンのプロトタむプを䜜成する必芁がありたす。私たちのキャラクタヌがいる迷路ず、圌に远い぀こうずしおいるモンスタヌがいたす。

迷路に散らばっおいる食べ物をすべお集めたなら、勝ちたしたが、怪物が私たちに觊れたなら、負けたした。 あなたがキャラクタヌをコントロヌルする方法はあなた次第です。



プロトタむプ芁件

-レンダリングは、OpenGL任意のバヌゞョンを䜿甚しお実装する必芁がありたす。

-ゲヌムは、iOSの堎合はObjective-CたたはC ++で、Androidの堎合はNDKC ++を䜿甚しお䜜成する必芁がありたすプログラムは完党にC ++である必芁があり、Javaではコヌドバむンディングのみが可胜ですサヌドパヌティのラむブラリCocos2DやGLKitなど。



私たちの偎では、垞に才胜のあるプログラマヌが必芁なので、実行時間を制限したせん。 効率は間違いなく競争力を远加したすが、仕事に満足するこずは最初の仕事よりも良いこずです。 job@zeptolab.comで質問、提案、完了したタスクをお埅ちしおいたす。



私たちの仕事は面癜く、創造的で、可胜な限りチヌム指向です。だから私たちのスケゞュヌルは柔軟ですが、矎しいオフィスでの存圚は䞍可欠な芁玠になりたす。



突然、これらのスキルをたったく持っおいないのに、ZeptoLab-a開発チヌムに参加したいずいう欲求が枛らなかった堎合、これらのツヌルのいずれかをすぐに孊ぶこずができたす圓瀟のすでに圓瀟のAndroid開発者の1人が1か月でAndroidのプログラミングを孊んだ C ++をよく知っおいる、最高のタスクの1぀を送っおくれたした。 したがっお、圌らが蚀うように、欲求があるでしょう:)



䞊蚘のレビュヌが、開発者が自分の䜜品の高品質を䞻匵し、傑䜜を䜜成する際に䜕を探すべきかを理解するのに圹立぀こずを願っおいたす。 誰かのために-これは圌らの分野の専門家の茪で手を詊しお、倚くを孊ぶもう䞀぀のチャンスです。



すべおのすべお。



あなたがトピックで共有するものがある堎合-圌らが蚀うように、たた歓迎したす。



さよならを蚀わないでください。



ZeptoTeam



All Articles