タイトル画面とゴール画面を作りました。
タイトル画面はこんな感じです。
芸は無いですが、SDLでは文字の表示やテキストの表示はあまり楽ではないので、それなりに苦労しました。
ゴール画面はこんな感じです。
ゴールに到達すると、マップが拡大表示され、GOAL!という文字が表示されるようにしました。この画像では分かりませんが、GOAL!という文字は回転しながら表示されます。3Dエンジンを使うと、表示させるまでが多少大変ですが、表示させてしまえば回転拡大も簡単で良いですね。
しかし、この画像を良く見ると分かりますが、マップチップの間に緑の線が見えています。この緑はデバッグ用の背景色です。こうして表示を拡大すると、チップの間になぜか隙間ができてしまいます。3Dエンジンを使うと、こうしたドット単位の表示がなかなか意図した通りにならないです。難しいものですね。
「Subversionにおけるcommit時のRSS生成テスト」にて紹介したRSS Feed生成スクリプトを公開します。
svn co http://www.sutosoft.com/svn/sandbox/tools/commit-rss commit-rss
WIN32環境では動作しています。 他の環境でどのようになるかは不明です。
Subversionにおいて、commitしたときにRSS Feedを生成するようなスクリプトを書き、試しにsandboxリポジトリ(http://www.sutosoft.com/room/svn/sandbox)で使ってみました。
RSS FeedのURLは以下の通りです。
http://www.sutosoft.com/svn_rss/sandbox.rdf
RSS Feedが変化する様子を見たい方は何か適当にcommitして下さい。
誰でも自由にcommitできるリポジトリは、このような方法によりチェックしておかないとちょっと怖いですね。
と言っても、RSSは、リアルタイムに情報を通知してくれるものでもないので、こうしてチェックしても多少は怖いです。でも変なものがcommitされれば1日以内に気が付くと思うので、何もしないよりはマシでしょう。
Heimdallr 1.10alpha1をリリースします。
安定版ではありません。
安定版はHeimdallr 1.09です。
大きな追加点や変更点はありません。細かい機能の追加やバグ修正を行ったのみです。
今日はアクセス数が増えそうな気がするので、今後しばらくのメイントピックにする予定のSdlSandboxを紹介します。
SdlSandboxは、C++とSDL(Simple DirectMedia Layer)とOpenGLを使って開発中のミニゲームです。
目指すは、「ゲーム開発初心者が、ゲームの動作を学ぶためのサンプル」です。
「SdlSandbox」という名前は、「SDL」を使ってみようと思い立った人が自由にあれこれ試せる「Sandbox」になれば良いな、と思って名付けました。
以下のような特徴を持ったゲームにしようと思っています。
これまでの紹介文でどんなゲームであるかまったく触れていないことから察せられたかもしれませんが、大したものではないです。
一応スクリーンショットが撮れる所まではできていますので、公開します。こんな感じのゲームです。
(クリックすると実物大のスクリーンショットが表示されます)
こんな感じの迷路の中を上下左右のキーを使って移動してゴールにたどり着けばクリア。それだけです。シンプルですね。
どんな感じのものかすぐに試してみたい人のために、Windows環境で動作する実行ファイルを用意しました。まだゴールできないのでゲームとしての形にはなっていません。 迷路の右下まで到達したら自分でクリアー!と叫んでALT+F4を押して終了して下さい。
SdlSandbox開発を通して、私はこんなことを学んでみたいです。
長文を最後まで読んで頂きありがとうございました。
SdlSandboxのSubversionリポジトリは、既に http://www.sutosoft.com/svn/SdlSandbox で公開しています。
必要なライブラリや、ビルド手順などは追々解説していきたいと思いますが、既に全ソースコードにはアクセスできるので、チャレンジャーの方はご自由にどうぞ。
恐ろしいことに誰でもCommitできるようになっていますので、改変の方もご自由にどうぞ。
最近、SDL(Simple DirectMedia Layer)とOpenGLとを組み合わせて使ってみています。結構面白いです。
SDLはゲーム向けの比較的シンプルなライブラリで、Linux、MacOS、Win32などで動作します。
主機能はウィンドウ表示、2Dグラフィックス描画、キーボードやジョイスティックなどの入力検出、音出力などです。
どのOS向けライブラリでも同じAPIが提供されていますので、これを使えば、それぞれのOSに移植可能なゲームを作ることができる、らしいです。でもって、SDLは、OpenGLと連携するための機能も提供しています。
OpenGLは、とても有名なライブラリなので私が紹介するまでもないですが、
主機能は3Dグラフィックス描画で、これもさまざまなOSで動作し、どのOS向けライブラリでも同じAPIが提供されています。
SDLとOpenGLを組み合わせれば、2Dゲームや3Dゲームを作るための機能が全て揃います。そして、どちらも移植性が高いので、
うまくやればマルチプラットフォーム(OS)で動作するゲームが作れるわけです。
SDLとOpenGLの両方が使えるプログラミング言語の方ですが、これも山のようにあるらしく、
C、C++、Java、C#、Ruby、Python、D、など、様々な言語で使えるようです。
ということは、SDLとOpenGLの組み合わせは、マルチプラットフォームでマルチランゲージな2D/3Dゲーム開発環境であるわけです。
こういうのって他にはないですよね。
私としても、C++を使ってマルチプラットフォームで動作するゲームが作れるというのはちょっと惹かれるものがあります。
どんな感じなのか、何かミニゲームでも作って確かめてみたいと思います。
以下のURLに練習用のSubversionリポジトリを作成しました。
http://www.sutosoft.com/svn/sandbox
誰でもCommitできます。Subversionの練習用としてご自由にお使い下さい。
私も他の人がCommitしたとき、ログにどのような情報が残るか知りたいです。
「Subversionの使い心地」の続きです。
Subversionを使い始めて1ヶ月経ち、今まで使用していたVisualSourceSafeとの違いがまたいくつか見つかりました。
Subversionはドキュメントが充実している。特に公式ドキュメントの日本語訳である「Subversion によるバージョン管理」が素晴しいです。Apache経由でSubversionリポジトリにアクセスするための設定方法など、ちょっと複雑なことも詳しく書いてあったため、簡単に設定することができまいた。VisualSourceSafeはドキュメントが少ないのでそれと比べるととてもありがたいです。
細かいアクセス制御ができる。これはSubversionというよりも、ApacheやWebDAVに関することだと思います。
例として、私が管理している3つのリポジトリのアクセス制御について説明します。
Visual Studio.NET 2003のアドインであるAnkhSVNが成熟していない。利用していて時々「あれ、使い難いな」と感じるときがあります。具体的には以下の通り。
細かいことをあれこれ挙げましたが、前回の最後の結論である、Subversion > VisualSourceSafeという評価は揺るぎません。いやーいいですねSubversion。
また、何か感じることがあったら書いてみたいと思います。
boostライブラリというC++のライブラリがあります。有名なライブラリなので説明は省略します。
このライブラリに含まれるクラスのうち、shared_ptrやarrayなど大半のクラスは、ヘッダファイルをインクルードするだけで使えるのですが、filesystemやdate_timeを使うときは、boostライブラリをビルドしてライブラリファイルを作成し、それをリンクする必要があります。
本記事では、Visual C++.NET 2003向けのライブラリファイルを作成する方法を説明します。
最初に参考にしたページを紹介します。
「Install & Build : インストールと構築」
Visual C++ 6.0やBorland C++ Compiler 5.5.1をご利用の方はこのページだけで十分でしょう。
しかし、Visual C++.NET 2003向けのやり方は詳しく書いていないので、ここで紹介します。
なお、boostライブラリのバージョンは1.32.0であることを前提とします。
まず、「SourceForge.net」より、boost-jam-3.1.11-1-ntx86.zipをダウンロードし、展開します。
展開するとbjam.exeというファイルができるはずですので、これをboostインストールフォルダ(project-root.jamがあるフォルダ)にコピーします。
次に、以下のようなbuild.batファイルをboostインストールフォルダに作成します。
call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" call bjam "-sTOOLS=vc-7_1" "-sBUILD=debug release <runtime-link>static/dynamic <threading>single/multi"
1行目はVisual C++.NET 2003インストールフォルダに合わせて変更して下さい。
次に、build.batを実行します。
ビルドが始まりますのでしばらく待ちましょう。環境にもよりますが10分以上かかります。
ビルドが完了すると、boostインストールフォルダにbinというフォルダが作成されます。
binフォルダをファイル名「*.lib」で検索しましょう。作成されたlibファイル一覧が表示されます。
boostインストールフォルダにlibというフォルダを作成し、作成されたlibファイルを全てそこへコピーします。
最後に、Visual C++.NET 2003を起動し、
ツール→オプション→プロジェクト→ディレクトリを表示するプロジェクト→ライブラリ ファイルを選択し、
boostインストールフォルダ\libを追加します。
以上で完了です。
(追記)
「letsboost::ビルド」にVisual C++.NET 2003(VC7.1)でのビルド方法が載ってました。たぶんこちらが正式な方法だと思います。
毎月恒例のカウンタートラックバックです。
7月中にHeimdallrを紹介して頂いた方々に対し、トラックバックを送ると共にお礼を込めてコメントなどを書かせて頂きたいと思います。
久しぶりにみるHeimdallrのスクリーンショット 縦型スクリーンに8個のビュー。スキンは全て透明スキン。使いこなしてますね。
残念ながら、7/19には別のRSSリーダーに切り替えてしまった模様です。
その理由は、「何かあるたびに止まっていたという真実が発覚。」ということだそうです。
うーむバグですかね。動作確認はそれなりに行っているつもりですが、まだ時々こういうことがあるのも事実。
動作不能バグはそれだけでユーザを失うのでなんとか解消したいところです。
6月のランキングではHeimdallrは16位でしたが、7月は17位になっています。昔はもうちょっと高かったのですが、 ずるずる落ちています。難しいものですね。
トラックバックの送り方がわからなかったのでとりあえずリンクだけしておきます。
はまる人にははまる自動学習機能。もうちょっと強化してみてもいいかもしれませんね。
RSSリーダーは、普段いくつかのサイトを巡回している方には便利なツールだと思います。 今は様々なRSSリーダーがありますので、いくつか試して自分にBESTなツールを探してみて下さい。
近所を林を散歩しているときに見つけた格好良い蜘蛛たちを紹介します。
蜘蛛が苦手な方は見ない方が良いです。
たぶん、ジョロウグモ(雌)。
巣は30cm四方くらいか。あまり大きくなかったです。黄色の虎模様が綺麗ですね。
でもたぶんこんな蜘蛛が目の前に突然落ちてきたら飛びのいてしまうでしょう。
これがジョロウグモ(雄)。たぶん。
雌と同じ巣にいました。体長は5mmくらいでしょうか。まだ若そうです。
体積比だと雌の数十分の一しかないと思います。小さいですね。
雄は、油断すると雌に食べられてしまうらしいです。ですので、雄は雌に隙があるときに交尾するべく突撃するのだとか。なんというか命がけの恋ですな。
ジョロウグモの近くにいた蜘蛛。これもジョロウグモかと思いましたが、模様が若干違いますので、たぶんナガコガネグモ(雌)だと思います。
しばらく見ていましたが、特に動きませんでした。巣を張らないで何してるんでしょう。ジョロウグモに狩場を乗っ取られてさてどうしようかと考え中なのでしょうか。それとも逆にどうやって狩場を乗っ取ろうか計画中なのか。あるいは散歩中に一休みしているだけか。さてはて。
なんにせよ、蜘蛛が多いことは自然が豊かなことを示しています。
このまま維持して欲しいですね。
「feed meter の OPML」によると、少し前から実験的にfeed meter 人気度ランキングのOPMLが配信されているようです。
feed meterの人気度ランキングは、大体RSSを配信しているサイトの人気度ランキングと同じだと思います。
ですので、例えばトップ50サイトのOPMLには、世の中の人気がある(RSSを配信している)サイトの上位50サイトが記述されているわけです。
これと、Heimdallrを組み合わせると、面白いアプリケーションができあがります。
組み合わせ方は簡単です。feed meterのOPMLへのリンクをHeimdallrのビューにドラッグ&ドロップするだけです。これでおしまい。
Heimdallrは、OPMLファイルを登録すると、そこに記述されている全てのRSS Feedを取得してまとめて表示します。
この際、自動学習機能が働きますので、ユーザ好みの記事が優先的に表示されます。ということは、これにより、世の中の人気があるサイトから、ユーザ好みの記事を自動的にリストアップしてくれることができるわけです。
こんなことができるRSSリーダーはHeimdallrだけだと思います。
しばらく実際に試してみましたが、結構興味深い記事を見つけ出してくれるように思います。ノイズはありません。なかなかいい感じです。
注意点としては、例えばトップ50サイトのOPMLであれば、本当に50個のRSS Feedを取得してくるので、それなりに重たくなることです。具体的には、最新の情報に更新する時間や、起動時間、終了時間が長くなります。試すときは、マシンスペックと相談することをお勧めします。
以下余談。
Heimdallrに搭載されている、OPMLに登録されている全てのRSS Feedを取得する機能はOPML巡回機能と言います。この機能は、だいぶ昔から搭載されているのですが、今まで上手い使い道が見つからず、死に機能となっていました。使い道が無いので削除しようかとも考えたのですが、もしユーザがこの機能を使っていたら、突然削除してしまうと迷惑をかけてしまいますので、それなりのコストを払いながらメンテナンスを続け、最新バージョンでもこの機能が使えるようにしました。そこで見つけたのがこのfeed meterのOPMLのお話です。一目でこれはOPML巡回機能と組み合わせるとかなり良いのでは?と思いました。実際に組み合わせて使ってみましたがいい感じです。今まで高いコスト(時間)を払いながらメンテナンスを続けてきたかいがありました。feed meterの中の方(Gombeiさん)には感謝です。
さらにどうでも良い話。
私は、常時人気があるサイトよりも、最近人気が出てきたサイトの記事を読んでみたいです。そうした人向けに、最近順位が上がったサイトのOPMLなんかもあると良いのではないかと思います。feed meterの中の方、どうでしょう?(って読んでないかな・・・)
Effective STL―STLを効果的に使いこなす50の鉄則という本を読みましたので紹介をしたいと思います。読んだのはだいぶ前のことですが。
Effective STLは、C++の標準ライブラリの一部であるSTLのテクニックについて書かれた本で、
マニュアルからは簡単には見つからないようなテクニックが満載されてます。
こんな方にお勧めの一冊です。
これを読むと、例えば、
「英文から単語を切り出し、アルファベット順に並べて各単語が何回出現したかをリスト表示する」プログラムが
こんな風に書けるようになります。
int main(int argc, char* argv[]) { typedef std::map<std::string, int> WordMap; WordMap Words; while (std::cin) { std::string Word; std::cin >> Word; Word = std::string(Word.begin(), std::find_if(Word.begin(), Word.end(), std::not1(std::ptr_fun(std::isalpha)))); if (!Word.empty()) { std::transform(Word.begin(), Word.end(), Word.begin(), std::tolower); Words[Word] ++; } } for (WordMap::iterator i = Words.begin(); i != Words.end(); ++i) { std::cout << i->first << "\t" << i->second << std::endl; } return 0; }
このコードが良いものかどうかは分かりません。 しかし、こういったコードが書けるようになると、選択肢が増えます。選択肢が増えるのは、悪いことではないはずです。
なお、このコードを見て、私ならばもっと簡潔に書けるぞ、と思った方は、たぶんもうこの本を読まなくても良いと思います。
最近、Heimdallrのキーワードチャンネルで使うためのRSS検索エンジンを探しています。 RSS検索エンジンというのは結果結果をRSSで出力してくれる検索エンジンのことです。
Heimdallrのキーワードチャンネルで使うには、以下のような検索エンジンが望ましいと思ってます。
様々なRSS検索エンジンについて、上記の観点から調べてみましたので、コメントを書いてみます。
RSS検索エンジンは、たくさんありそうに思えるのですが、なかなか良いのがありません。
Feedbackが停止してしまったので、代替品が1つ欲しいのですが、結局見つかりませんでした。
条件が厳しすぎるのですかね・・・。
他に何か良さそうなRSS検索エンジンをご存知の方は、教えて頂ければ幸いです。
前の記事において、HeimdallrのプラグインのキーワードチャンネルでBlogPoepleの検索エンジンを使うことにしたと書きましたが、やめにしました。
というのも、キーワード「Heimdallr」で検索すると、検索結果の先頭に変なノイズが引っかかるからです。こうした広い範囲を検索する検索エンジンに多少のノイズがあるのは仕方が無いとは思いますが、このノイズはちょっと厄介です。
Heimdallrとはまったく関係の無い記事であることはもちろん、変動するのです。様々な記事が現れます。
私が10分位ひたすら検索しただけで、以下の記事が検索結果の一番先頭に来ることが確認できました。
http://zxz.blog2.fc2.com/blog-entry-88.html「小森美王画像443枚」
http://d.hatena.ne.jp/matsukura/20050801#p2「ななむじか」
http://d.hatena.ne.jp/yukichan1975/20050801#p6「BlogPet」
http://www.socialnetworking.jp/archives/2005/08/rssfeedbringer.html「RSSリーダのニューカマー:FEEDBRINGER"」
http://eq3ret.blogeasy.com/article.view.run?articleID=93393「noticia」
http://blogping2.info/1841/looking-for-arizona-gardening/「Looking for arizona gardening?」
http://d.hatena.ne.jp/magurohead/20050801/p4「[NEWS]日本マクドナルド、アルバイトなどに未払い賃金支給へ」
http://precious-one810.269g.net/article/612893.html「来てね!!!」
どれの記事にも「Heimdallr」という文字列は含まれていないようです。
最初はアダルト系記事が目立ったので宣伝かと思いましたが、普通の記事が現れるときもあるので宣伝ではなさそうな気がします。
キーワード「Subversion」で検索した結果やキーワード「C++」で検索した結果にはそういったノイズは乗っていません。不思議ですね。
なんにせよ、Heimdallrは、初期状態で、キーワードを「Heimdallr」としたキーワードチャンネルが登録されるようになっています。
そのため、キーワードチャンネルがBlogPeopleの検索エンジンを使うと、Heimdallrがこうしたノイズを丁寧に拾ってしまいます。
そうなると、私の意図していない記事を全Heimdallrユーザのデスクトップに垂れ流すことになってしまいます。さすがにこれはまずい。
ということでBlogPeopleの検索エンジンを使うのはやめました。
キーワードが「Heimdallr」以外の場合は、十分に満足できる結果を得られましたので、これはとても残念です。
替わりの検索エンジンは見つかってません。色々探してみましたが、なかなか良いものが見つかりません。どうしましょうかねぇ・・・。
Heimdallrのプラグインであるキーワードチャンネルは、
Feedback、Bulkfeeds、Gooブログ検索の3つの検索エンジンで検索した結果を利用してます。しかし、Feedbackが停止したようですので、替わりにBlogPeopleの検索エンジンを使うことにしました。
候補としては、BlogPeopleの他にも、はてなブックマークの検索エンジンと、blog Watcherがありました。
はてなブックマークの検索エンジンは、以前の記事「ノイズの無い検索サイト」で述べたとおり、検索結果のノイズはとても少ないです。しかし、しばらく使ってみて、どうも技術系の記事が多いのではないか思いました。また、キーワードが旬を外れていると、検索結果は一向に更新されません。キーワードチャンネルの検索結果に偏りを持たせたくなかったというのもありますし、キーワードが旬を外れていても、それについて記事を書く人が居る限りそれを拾いたかったので、残念ながらはてなブックマークを使うのは止めました。
blog Watcherの検索エンジンは、検索範囲がBlogに留まっていない上、偏りもなさそうですので、なかなか良さそうなのですが、Feed Analyzerで見てみるとRSSの形式がおかしいようです。特に日付。これではキーワードチャンネルが日付を読み込むことができません。日付が欠けていると情報の重要さが分かり難い検索結果になるので、残念ながらblogWatcherを使うのも止めました。
BlogPeopleの検索エンジンは、偏りはあまりなさそうですし(それほど長い間使って評価したわけではありませんが)、RSSの形式も正しいようです。
BlogPeopleの中の人も、積極的に検索エンジンを活用して欲しいと言っていますので気兼ねなく使えそうです。
そんなわけでBlogPeopleにしました。