ColobotおよびCeebot

世界には、限られた人たちだけがアクセスできる閉じた社会が常にありました。 そこにたどり着くには、何か変わったものが必要でした。 たとえば、 Bentleyに乗ったり、 Behikeを吸ったりします



しかし、私は入場券がお金ではなく知識である社会について話しています。 はい、はい、あなたはそれを信じませんが、私はプログラマーの話をしています。



結局のところ、私たちだけが数日間アルゴリズムを改善することができ、プロジェクトアーキテクチャの設計と改善、理解できないUMLダイアグラムと奇妙なスキームの描画に限りなく取り組むことができます。 しかし、もう1つのタイプの活動があります。それは、入門者向けの一種の閉鎖クラブで、1000時間以上を台無しにし、参加者のプロ意識を天国に高めました。 私はプログラマー向けのゲームについて話している。



それらの膨大な数があり、各ゲームは独自の方法で面白く、それぞれ独自のアーキテクチャ、独自のAPIを持っています 。 それらすべてを個別のメモでカバーすることはできないため、さまざまなゲームに関する一連のメモを開始することにしました。



PS プログラマ向けのオープンブログゲームを作成しました。







コロボット



 Colobot








ゲームは2001年8月20日にリリースされ、当時非常に高品質であった3Dグラフィックスが実装されました。 まず、ゲームは子供向けに作成されました。 しかし、子供の鉄道の場合のように、大人はもちろんほとんどの人がそれをプレイします。



ゲーム開発者は、すべての敵、限られたリソース、そしてもちろん機会を、私たちに全世界に提供します。 基礎として、建物、ロボットの構築、および不吉な計画の実施に必要な戦略ゲームですでに証明されているリソースのメカニズムが選択されました。 しかし、もちろん、リソースはすぐに使い果たされており、常にマイニングする必要があります。



CBOTプログラミング言語



ゲーム内のすべてのプログラミングは特定のCBOT言語で行われ、C ++またはJavaの構文に非常に似ています。 言語自体は非常に強力であり、ほぼすべての空想を実現できます。



(組み込み型を使用して)変数を宣言し、for、while、doループを使用して、関数だけでなくクラスやオブジェクトも作成できます。



ロボットと外界との接続はすべて、他のオブジェクトとの相互作用に基づいており、その中には非常に多くのオブジェクトがあります。 また、距離、近くのオブジェクト、エンジン制御、その他の些細なことを計算するための既製の機能が提供されているため、主なアイデアに集中することができます。



コードはボットごとに直接記述されます。 同じボットに対して複数の異なるプログラムを作成し、必要なコードを適切なタイミングで実行することもできます。



ゲームには、コードをステップごとに実行し、すぐに結果を観察できる、非常に単純なデバッガー( debugger )が含まれています。















私にとっては、コードエディターが最も便利ではなかったことに注意してください。 そして、ドキュメントは常に最初にリセットされていますが、定期的に落ち着いた状態から抜け出しました。





Colo IDE








本格的なゲームに進む前に、あなたは若い戦闘機コースを受講し、そこで簡単なパズルを解くことができます。 同様の問題を見てみましょう。















ロボットがすべての青いプラスを通り抜けるように、ロボット用のプログラムを作成する必要があります。 各ターン間の距離は20メートルです。



たとえば、関数move(12)は、ロボットに12メートルの走行を丁寧に要求します。 そして、回転(90)関数は90度回転します。



ロボット用のプログラムは次のようになります。



  1. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  2. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  3. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  4. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  5. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  6. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  7. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  8. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  9. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  10. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  11. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }



  12. // , // . extern void object ::Solution( ) { move( 20 ); // 1 turn( 90 ); move( 20 ); // 2 turn(- 90 ); move( 20 ); // 3 turn(- 90 ); move( 20 ); // ! }







お気づきかもしれませんが、ロボットカーの背面には緑色のシリンダーがあります。 これは当社のリソースの1つです。 ロボットの移動中に、エネルギーが徐々に減少し、その結果、ロボットが失速する可能性があります。 その後、それを復活させる唯一の方法は、バッテリーを交換することです。



ローカリゼーション





プログラミングを学びたい子供にとって、英語は大きな障壁になる可能性があります。



すでに廃止された会社であるファーガスのおかげで、ロシア語のすばらしい翻訳があります。 私が読んだ翻訳は素晴らしかったです。



すべてのドキュメントは完全に翻訳されており、コメントはありませんでした。















使いやすさ



ゲームの使いやすさは、両足を引き締めています。 何が何であるかを理解するために約40分を費やしました。 リソースとは何か、それらを取得する方法、そしてそれらから既製のロボットを取得する方法は、偶然に学びました。



初心者にとって、ほとんどのポイントは理解できないように見えますが、さらに悪いことに、彼らは彼にゲームを永遠にやめさせることができます。 最初はそうしましたが、戻ってもう一度やり直しました。



一般的な印象





単純なミッションからより複雑なミッションに移行し、言語のさまざまな側面を常に学習することで、プレイヤーはプログラミングを学ぶだけでなく、アルゴリズム化の基礎も学びます。



シンプルなミッションですでに退屈になったら、ゲームの主要部分に移りましょう。 たとえば、未知の惑星に立ち退き、そこに再構築し(ロボットの助けを借りて、または宇宙飛行士を手動で制御して)、いくつかのタスクを完了する必要があります。 たとえば、すべてのアリを殺します。



自動化の可能性は本当に無限であることに注意してください。 新しい建物の建設、新しいロボット(飛行や毛虫など)、鉱物の検索、エネルギー生産、充電、領土の保護、その他の細部を自動化できます。 開発者は、不必要な詳細から非常に便利な抽象化を提供してくれたため、特定の目標の達成に集中できます。



Colobotに優れたドキュメントが組み込まれていることに気付かないことは不可能です。多くのオープンソースプロジェクトがうらやましいでしょう。 すべてが単純に描かれ、不必要な詳細なしに、使用例が示されています。 すべてのドキュメントはリンクされているため、それをナビゲートすることは非常に便利です。



しかし、ゲームにはコードの長さに迷惑な制限があります-1つのプログラムにつき20,000文字以下です。 開発者がこれを行った理由は明らかではありません。



公式サイトでは、既成プログラムのかなり大きなアーカイブも見つけることができます。 すでに作成されたプログラムを使用し、それらを改善して、サイトに送り返します。 OpenSourceの大義に貢献するために、少なくとも何らかの形ですでに始めてください!



シーボット





教育機関向けのColobotのバージョンがあることは言うまでもありません。 Ceebotは非常に自信を持って開発を進めており、さまざまなトレーニング資料が公開されている独自のWebサイトhttp://ceebot.orgを取得しました。















教育機関向けのバージョンには、はるかに多くの機能、さまざまなタスクとミッションが含まれています。 学生向けの特別なノートブックさえあります。



サッカーの試合ロボットレースのプログラミングとは何ですか。















使い慣れたプログラマーとの戦いに参加したいですか? 問題ありません、 アリーナモードが利用可能です! 実際にプログラムを改善する方法を知っていることを証明してください!















また、Colobotのプログラミングプロセスを説明するyoutube.comで見つけた短いビデオをチェックアウトすることもできます。



youtube.com/watch?v=RlyKxjKXQcY



公式Webサイトでは、ゲームのデモ版をダウンロードして確認できます。



そして、このゲームをおなじみの男の子(女の子?)に推薦することを忘れないでください-突然、これは将来のプログラミングの天才です!



あなたが私の記事に興味があるなら、habrahabrのリリース前にそれらを読むことを可能にするハックがあります: 私のブログ 、まあ、またはtwitterを購読してください



頑張って



All Articles