13の抹茶です @mokha_trogy
これはrogy Advent Calendar 2015の13日目の記事です。


ゲームを作るならC++一択だと思っていませんか? 
まぁでもC++はいいやつだよ。 
他の選択肢もあるよ、ってことでGoJavaScriptの2つを紹介します。という感じの記事です。
Javaもいいやつだよ。

Goはcgoというものがあって、Cのコードを利用できます。OpenGLOpenALバインディングが有志によって作られています。

JSならWebGLWebAudioAPIが扱えるのでゲームを作れます。

わーい。

おしまい。

現在Go でゲームを作ろうとしている途中なので、バリバリ書けるわけじゃないんですが、ゲーム制作という視点で良さそうだと思ったことを書いていきます。 

TL;DR

↑この見出し文使ってみたかった

長くなるので、グローバル理工人なので、最初にまとめを書くと、

C++嫌ーでもパフォーマンスは欲しい → Go  
並行処理したい → Go  
Webでサッと公開したい → JS  
ライブラリでサクッと書きたい → JS  

どちらの言語も実はサーバーを書くのにも強いので、
ネット経由でマルチ対戦できるゲームを作りたければクライアント側と言語が統一できて良いです. 

Go

ライブドアブログの見出しがh3以外ゴミなのでなんとかしろ👊

どんな言語

- コンパイラ言語(C/C++みたいに実行可能形式にコンパイルできる)
- 強い静的型付け
- オーバーロード,クラス,継承,ジェネリクス,ポインタ演算がないシンプルな言語
- 型推論
- ガベージコレクション
- Goroutineによる並行処理
- パッケージ
- クロスコンパイル

公式日本語訳ページにこんなのが有ります →  C++プログラマ向けGo講座
 
標準でパッケージマネージャーが付いてくるので、gitのインストールも必要. あとgccも (cygwinのやつはダメらしい)
Windowsでも特につまる所はないと思う. 

開発環境

多くのIDEがプラグインで対応. IntelliJ IDEA, LiteIDE, Eclipse, NetBeansなど.  
VisualStudioCodeやAtom, SublimeTextなどのエディターもプラグインあり.  

基本的に補完が利いて、保存時にgofmtやgolintが走ってくれれば何でもいい感じがある.
(Goをインストールすると自動整形ツールとかLintが標準で入ってくる)

特徴


Goroutineは普通のスレッドより軽いので、気にせずもりもり書いていいっぽい
AIなどの時間のかかる処理で使えそう
クラスはないけど、インターフェースで何とかなると思う
ジェネリクスもないけどリフレクションで何とかなるっぽい

ゲーム制作視点少なくない?

ライブラリ

新しい言語なので、ライブラリがまだ充実してない印象.  

パッと見Azul3Dが結構進んでそう.  
2D描画も調べるとちょいちょいある.

rogyではOpenGL直書きが流行りなので、Let's低レイヤーしよう  
最新の4.xまで対応 : go-gl/gl
GLESとかWebGLへの対応もしてるので2.xまでのやつ :
goxjs/gl
(glfw3バインディングもあるので、合わせて使う)
go-gl/glでクロスコンパイルできないので誰か助けて.  

未使用変数があるとコンパイルエラーになるなど、厳しいところがある.

$GOPATH/src以下にプロジェクトを作ってコードを書くのが流儀っぽい.
コーディングルールがかっちりしてるのはいいこと. (特に複数人での開発では) 
Goのドキュメント 

JavaScript

どんな言語

 スクリプト言語
- 動的型付け
- プロトタイプベース 
- 非同期
- GC

 そもそもjsってHTMLをもにょもにょするやつじゃん!どうやってゲーム作るの!  
 HTML5のCanvas要素で描画することが出来ます.
Canvas APIでもいいですが、WebGLのほうが基本的にパフォーマンスはいいです.  
ゲームプログラミング自体ではDOM操作のようなWebフロントエンドの知識はそれほどいらないけど、必要な場面はやっぱりある.

ちなみにRPGツクールMVはjs製らしいですよ!

特徴

文法的に特に紹介したいことがなかった  

ブラウザで動くので、Web上に公開すればすぐ遊んでもらえる
スマートフォン対応もやればできる
electronを使えばデスクトップアプリとして動かすことも可能

ブラウザでWebページ操作のために動くという特徴上、ファイル読み書きとかモジュールがまだ整っていない
ファイル読み書きはセキュリティ上ダメだったりする
ゲーム制作では結構つらいところ
セーブデータとかはLocalStorageかサーバー立てて送信ぐらいかなぁという感じ

Web界隈の資産は膨大にあるので、モジュール読み込みなどはRequireJSBrowserifyで解決できたりします.
 

AltJS

 クラスがない  
 型欲しいにゃん...

 js特有の気持ち悪い書き方はしたくないにゃ

そんな問題を解決すべく、変換するとJavaScriptになる言語というのがあって、
AltJSと呼ばれている.   js界隈ではこの変換をトランスパイルって言ってるのをよく見かける.  

有名なのは以下 
- CoffeeScript: ruby, pythonっぽい糖衣構文, クラス
- TypeScript: 型注釈, 型推論, ジェネリクス, クラス

JavaScriptをあまり良く知らないままAltJSを使って詰まる部分もあると思うので、ある程度慣れたら移行するのがいいかなぁと思います。

小さいプログラムなら生jsで、大きめになるならAltJS使ったほうがいい気がする
 

開発環境

エディタはなんでもいい.
ブラウザはChromeのDeveloperToolsがめっちゃ便利 (F12押すと出てくるやつ)

gruntやgulpなどのビルドツールを使うと、いろいろ自動化できて楽 (自動化はロマン)
AltJSを変換してbrowserifyで1つのファイルにまとめてコード圧縮して...みたいなことができる.
このあたりは別記事で詳しく書きたい.
 

ライブラリ

ゲームエンジンだと、最近出たphina.jsとか、有名なenchant.jsなど.  
描画だけなら、2Dはpixi.js, 3Dはthree.js.  
他にもp5.jsとかCreateJSとか、とにかくいっぱいある.  (ここがやっぱり強み)
(threejsはexampleも豊富なのでおすすめです)
threejsというライブラリを使った3D描画が以下のプログラムで実現できます.
 

ブラウザ間の互換性とかが面倒だったりする.
IEでその機能つかえません!とか
正直ChromeとFirefoxだけサポートすればいいと思う

スクリプト言語なので、パフォーマンスが...というのもある
最近jsエンジンも頑張ってるので、割りと動く.
WebWorkerAPIというのもあるので気になる方は調べてみては 

 おしまい