C系言語とRubyを比較
こんばんは、スペードです。
テスト真っ只中ですが、2014年度 2014年度ANCTGCCアドベントカレンダー - anctgcc’s diary 二日目担当となりました。
僕は、最近Ruby on Railsを勉強しており、特にRubyの文法が面白いと思ったので、普段使っているC系言語(今回はC++を例に挙げます)と比較しながら紹介しようと思いました。
Rubyとは
Rubyは、日本で開発されたオブジェクト指向スクリプト言語です。
最近は、Ruby on RailsというWebアプリケーションフレームワークが流行っていて、それに伴い、Rubyが書かれることも多くなりました。
Rubyの文法
変数
C++の場合は
int num = 10; string str = "hoge";
これがRubyの場合は次のようになります。
num = 10 str = "hoge"
最大の違いは型名が明示されてるかされてないかや、セミコロンの有無ですが、これはスクリプト言語との違いであってRubyとC系言語の比較にはならないので、ここではスルーします。
どちらも変数と呼ばれますが、意味がかなり違います。
上の場合のC系言語の変数はデータ型と呼ばれ、オブジェクトのコピーを格納している、いわば箱みたいなものです。
一方、Rubyの変数は、どこかにあるオブジェクトを指しています。変数が名札となってオブジェクトを指していると考えれば分かりやすいかもしれません。また、上の例では、numは数値オブジェクト、strは文字列オブジェクトと呼ばれたりします。
if文
C++の場合は
string str(""); if(str.empty()){ puts("true"); else puts("false"); }
これがRubyの場合は次のようになります。
str = "" puts "true" if str.empty? puts "false" unless str.empty?
C++の方の説明はいらないと思います。
Rubyは上のように後置if文やunless文(条件が偽なら真)を使うことができます。(もちろん前置if文も使うことができます。)
また、C系言語は0はfalseですが、Rubyだとtrueになります。Rubyでfalseになるのは一般的にfalseとnil(C系言語でいうNULLみたいなもの)だけです。
まとめ
二つしか例を出せませんでしたが、Rubyの文法に面白いものはたくさんあります。
これを機会にRubyに少しでも興味がもっていただけるとうれしいです。
おまけ
ゲーム創作研究部なのでゲームプログラミングに関することも書いておくとすれば、RubyのゲームライブラリにDXRubyというものがあります。
少ししかさわったことがありませんが、比較的簡単にゲームを作れる印象でした。
明日(12/3)のアドベントカレンダーの担当はリュー君に任せることにします。プロそうなこと書いてくれると思うので乞うご期待ですね。
ゲームランチャーの実装のはなし
こんばんは! YuZakuroです。
今日はテスト初日でした。そして2014年度ANCTGCCアドベントカレンダー初日でもあります。
何について書こうかテスト中に考えたところ、ランチャーについて書くことにしました。
ランチャーとは?
明石高専祭に来ていただいた方はご存知かと思いますが、ANCTGCCでは毎年高専祭でゲームを展示しており、その際ゲームだけではなく、ゲームを起動するためのランチャーを制作しています。
ちなみに、ここ数年は担当者が毎年新しいランチャーを作成しています。当然ゲーム制作も並行して行っているため結構大変です。
実装
先述の通り、ここ数年は毎年実装方法が違うので、2014年度、つまり今年度の高専祭で展示したランチャーに焦点を絞って、実装方法を説明していきたいと思います。
使用言語・ライブラリなど
C# + WPF4.5 + Modern UI for WPF + YamlDotNet
部内の非プログラマからは比較的評判の良かった今年のランチャーですが、プログラマには手抜き実装であることはバレていたようです。
UI部分はほぼModern UI for WPFのデフォルトです。テーマカラーを変更する機能もサンプルにあるものをそのまま流用しています。
ロゴ
ランチャーの右上部分にANCTGCCのロゴアイコンがありますが、これもModern UIの機能を使用しています。
ロゴはmini-languageで書きます。Blendを使って書くこともできますが、諸事情により直接入力しました。ロゴの定義部分を抜粋します。
LogoData="F1 M -1.05,-1 H1 V-0.9 H-1 Z M -1,-1.05 V1 H-0.9 V-1 Z M -1.05,1 H1.05 V0.9 H-1 Z M 1,-1.05 V1.05 H0.9 V-1 Z M -0.80,-0.75 H0.75 V-0.65 H-0.75 Z M -0.75,-0.8 V0.75 H-0.65 V-0.75 Z M -0.8,0.75 H0.80 V0.65 H-0.75 Z M 0.75,-0.8 V-0.2 H0.70 V-0.75 Z M 0.75,0.8 V0.2 H0.70 V0.75 Z M -0.55,-0.5 H0.5 V-0.4 H-0.5 Z M -0.5,-0.55 V0.5 H-0.4 V-0.5 Z M -0.55,0.5 H0.55 V0.4 H-0.5 Z M 0.5,-0.55 V-0.2 H0.4 V-0.5 Z M 0.5,0.55 V0.2 H0.4 V0.5 Z M -0.25,-0.25 H0.25 V0.25 H-0.25 V-0.25 Z M 0.75,0.2 H0.25 V0.1 H0.75 Z M 0.9,-0.2 H0.25 V-0.1 H0.9 Z "
自動読み込み
このランチャーの便利な機能として、Gamesディレクトリ内にあるゲームを全て自動で読み込むという機能があります。
実装方法は簡単で、Gamesディレクトリ内を(サブディレクトリも含めて)探索して、Game.ymlというファイルをすべて読み込みます。
このファイルにはゲームの実行ファイルのパスやスクリーンショットのパスなどが書かれているので、その情報を使用してランチャーでゲームの情報を表示したり、起動したりします。
昨年度のランチャーではC#との親和性の観点からxmlが採用されていましたが、今年度は書きやすさを優先してyamlを採用しています。
ゲームごとのページ作成
ランチャーを起動してもらえるとわかりますが、ゲームの一覧が画面左側に表示され、画面右側にはゲームの詳細情報が表示されます。
これもModern UIの機能で、xamlファイルを文字列で指定することによってこのような画面が作成できます。
ただ、この方式ではxamlファイルはコンパイル時に存在していなければならないため、コンパイル時にゲームの一覧を作成できない自動読み込み機能を実現できません。
この時点で、Modern UIを使うことを半ば諦めかけていましたが、ソースコードを読んでみるとどうやらIContentLoaderを実装したクラスを使用することが出来るらしいということが判明。
xamlファイルのuriはキーとして使われるので重複できないため、各ゲームごとに乱数で生成したダミーのuriを割り当てておき、実際に読み込むときには、引数を無視して共通で使用するxamlファイルを返すようにしています。
まとめ
今年度のランチャーはWPFで実装されてるよ!
ほとんどライブラリの機能 or サンプルの流用だよ!
でも時々ちょっと頑張ってるよ!
明日は副部長のスペードくんに任せることにします。最近なにやら色々と勉強しているようなので、期待しましょう!
2014年度ANCTGCCアドベントカレンダー
はじめまして。部長のYuZakuroです。
今年も12月が近づいてきました。12月といえば、そう、アドベントカレンダーですよね!
例年、当部では内部向けにアドベントカレンダー企画を実施していましたが、今年からこのブログで公開することになりました。
分野はゲーム開発に関連するものから、あまり関係のないようなことまで多種多様。プログラマだけでなく、イラストレータやコンポーザの記事にも注目です。
週明け、12/1からはテスト期間中ではありますが、テスト勉強の息抜きに、あるいはテスト勉強を犠牲にして、部員たちが一生懸命書きます。
また、投稿された記事へのリンクをこのページに掲載する予定ですので、ブックマークなどされる方がいらっしゃいましたらこのページにするのが便利かと思います。
初日12/1の記事は、部長のYuZakuro担当です。それ以降は、例年通り記事を書いた人が翌日の担当者を指名する形式で進めていきます。
どんな記事を書いてくれるのか、いまから楽しみですね。
記事リスト
- 12/1 - ゲームランチャーの実装のはなし (YuZakuro)
- 12/2 - C系言語とRubyを比較 (スペード)
- 12/3 - 小学生でもわかる累積和と中学生でもわかるBinary Indexed Tree (リュー)
- 12/4 - プチコンのススメ (rean)
- 12/5 - Raspberry Piで簡単お手軽Linux (クモハ)
- 12/6 - スマホでお手軽お絵かき (クック)
- 12/7 - enchant.jsで簡単ブラウザゲーム開発 (YuZakuro)
- 12/11 - C言語の配列について(超初心者向け) (はぐめた)9日目 (はぐめた)
- 12/11 - ゆるいプログラミング環境 (リュー)
- 12/12 - 便利すぎるC++11 (スペード)
- 12/13 - シングルボードPCのススメ (クモハ)
- 12/14 - TRPG雑記 (ねぎとろ)
- 12/16 - SAIの領域選択の話するよ (雷軌)
- 12/17 - std::arrayを頑張って読もうとした. (N@N)
- 12/18 - Modern C++ Programming (N@N)