<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>ゲーム開発</title><link>http://blogs.wankuma.com/myugaru/category/1693.aspx</link><description>ゲーム開発</description><managingEditor>myugaru (myugaru@wankuma.com)</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>XNAさえ出来れば</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/26/129787.aspx</link><pubDate>Wed, 26 Mar 2008 13:31:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/26/129787.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/129787.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/26/129787.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/129787.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/129787.aspx</trackback:ping><description>&lt;P&gt;そうなんです！XNAがうちのPCで動けば、そもそもこんなに悩むこともなかったんです。&lt;/P&gt;
&lt;P&gt;いやひょっとしたらわんくま同盟に加盟もしてなかったかもしれません（＾＾；；；&lt;/P&gt;
&lt;P&gt;12月くらいにDirectXやってて1月にふいにXNAを発見したのです。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1月4日&lt;/P&gt;
&lt;P&gt;&lt;A href="http://d.hatena.ne.jp/myugaru/20080104"&gt;http://d.hatena.ne.jp/myugaru/20080104&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;「今日から少しずつXNAについて勉強して行こうと考えている。・・・」&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;でも&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://d.hatena.ne.jp/myugaru/20080106"&gt;http://d.hatena.ne.jp/myugaru/20080106&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;「どうもノートPCではこのXNAが簡単には動作しないのだ。」&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;/EM&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;となりまして&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://d.hatena.ne.jp/myugaru/20080111"&gt;http://d.hatena.ne.jp/myugaru/20080111&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;「結論：5年越しのノートPCじゃ無理」&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;なのであります。&lt;/P&gt;
&lt;P&gt;先日NyaRuRuさんとコメントで話をさせていただいたときに判明したのですが&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/16/127910.aspx"&gt;http://blogs.wankuma.com/myugaru/archive/2008/03/16/127910.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;以下わたしのコメントより&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;「P.S.先に書いたとおりIntel82852の問題は私は自分でDirectXで今もテストプログラムを書いていますがずっと発生してました。リファレンスモードなどに変えたら発生しないというのも気付いていました。友人にプログラムを試してもらうと私のノートより輪郭が鮮明だというのも気付いていました。もとをただせばうちでXNAが動かないというのも含め全部チップのせいだろうと認識していました。また改めてこの件についての奮闘記は書かせてもらいたいと思っています。 」&lt;BR&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;たぶん5年前のPCにはドライバー的にあんまり高級（高度？）な処理をできるような仕組みが備わって無いようです。あるいは備わってるんだけど既にサポート外になっててドライバーが更新されて無いのかどっちかのようなのです。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;・・・ということで私にはXNAは現在無理なのであります(T-T)&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/129787.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>DirectXは無理でした</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/26/129774.aspx</link><pubDate>Wed, 26 Mar 2008 12:32:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/26/129774.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/129774.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/26/129774.aspx#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/129774.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/129774.aspx</trackback:ping><description>&lt;P&gt;ブログをはじめるにあたって、&lt;/P&gt;
&lt;P&gt;DirectXとゲームと画像処理の３つを柱に勉強とかしようと思っていた。&lt;/P&gt;
&lt;P&gt;でも、&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;●ギブアップから始まる物語&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;実はDirectXのお勉強を&lt;STRONG&gt;早くもギブアップいたしました；；&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;せっかくNyaRuRuさんともお近づきになれた（と勝手に思ってますが）のに自分が情けないですが・・・。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;myugaruの最終ステータス：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Direct3D：2DTextureを2Dスプライトに貼り付けて描画できる。背景をSuefaceに読み込んで表示できる。ビューポートを使って描画範囲を制御できる。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;DirectSound：Waveが読み込める。同時に複数鳴らせる。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;DirectInput：キーボード入力とジョイスティック入力を判定できる。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;たぶん、これらを組み合わせたらゲームは作れるんだと思う。&lt;/P&gt;
&lt;P&gt;でも例えば&lt;STRONG&gt;「背景に流星群」&lt;/STRONG&gt;とか言われると詰まる。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;ドットを表示する方法が私のステータスでは厳しい。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;私のステータスで考えられる手段はSurfaceにColorFillとかいう矩形塗りつぶしメソッド。&lt;/P&gt;
&lt;P&gt;試しに１&amp;#215;１の矩形塗りつぶしで流星群を表現してみた・・・&lt;/P&gt;
&lt;P align=center&gt;&lt;STRONG&gt;&lt;FONT color=#006400 size=6&gt;GDI+のドットルーチンより遅いOTL&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;まず思ったのは、きっとたぶんバックバッファをメモリに取っておいていきなりbyte配列アクセスで色を設定してフロントバッファと交換する、みたいなのが出来るんでしょう。&lt;/P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;●しかし、もうギブアップです&lt;/P&gt;&lt;/FONT&gt;&lt;/STRONG&gt;
&lt;P&gt;前にも何回も書いてますがGoogle先生に聞けば何とかなるんです。確かに。&lt;/P&gt;
&lt;P&gt;でもモチベーションがだんたん持たなくなってきました。&lt;/P&gt;
&lt;P&gt;こんなところで詰まってたら本当の目的に進めません。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;●禁断の箱を開く&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;１２月くらいからDirectXで結構がんばったよ。自分。&lt;/P&gt;
&lt;P&gt;・・・もういいよね。&lt;/P&gt;
&lt;P&gt;そして、知ってたけど敢えて見ないようにしていた禁断の箱を開けます。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://gamdev.org/"&gt;http://gamdev.org/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;ここに紹介されているライブラリ群に答えがあります。&lt;/P&gt;
&lt;P&gt;たとえば&lt;/P&gt;
&lt;P&gt;Luna &lt;A href="http://luna.sumomo.ne.jp/"&gt;http://luna.sumomo.ne.jp/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;とか結構気楽に使えます。&lt;/P&gt;
&lt;P&gt;気楽と言えば、やねうらおさんの偉大なライブラリの方がずっと安心して身を委ねられそう。&lt;/P&gt;
&lt;P&gt;YaneuraoGameSDK.NET &lt;A href="http://yanesdkdotnet.sourceforge.jp/"&gt;http://yanesdkdotnet.sourceforge.jp/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;IDEの開発するのが目的だからマルチプラットフォーム付きライブラリだとちょっと重いかな・・・。&lt;/P&gt;
&lt;P&gt;ゲームが作りたいだけならもっともっと簡単な逃げ道もありますよん。&lt;/P&gt;
&lt;P&gt;・HSP＋hspdx.dll&lt;/P&gt;
&lt;P&gt;とか。さすがにここまで逃げるのだけは踏ん張りたいところ。（もはやC#でも.NETでもなくなってるし＾＾；；；）&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;●今後の作業手順&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;・・・などと。うだうだ想像してても始まりません。&lt;/P&gt;
&lt;P&gt;まず、ほとんどがC++向けなんよねー。なので、&lt;/P&gt;
&lt;P&gt;１．とりあえず片っ端から簡単なC++アプリを作ってみる。&lt;/P&gt;
&lt;P&gt;２．それをC#移植してみる。&lt;/P&gt;
&lt;P&gt;３．手間と時間の計測&lt;/P&gt;
&lt;P&gt;うん。ちょっとだけ楽しくなってきた（笑&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;（ブログのサブタイトル変えなきゃ・・・何にしよう；；）&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/129774.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>私が作ろうとしてるのって</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/12/127336.aspx</link><pubDate>Wed, 12 Mar 2008 08:37:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/12/127336.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/127336.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/12/127336.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/127336.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/127336.aspx</trackback:ping><description>&lt;P&gt;最近何となく分かってきたのですが、&lt;/P&gt;
&lt;P&gt;私は某A●CIIから昔発売されていた幻のツクールシリーズ&lt;/P&gt;
&lt;P&gt;「シューティングツクール」（※&lt;A class=l onmousedown="return clk('http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%84%E3%82%AF%E3%83%BC%E3%83%AB','','','res','3','&amp;amp;sig2=WH3u4I33xV7XA78Uyq62Yg')" href="http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%84%E3%82%AF%E3%83%BC%E3%83%AB" target=_blank&gt;&lt;FONT color=#551a8b&gt;&lt;B&gt;シューティングツクール&lt;/B&gt; - Wikipedia&lt;/FONT&gt;&lt;/A&gt;）&lt;/P&gt;
&lt;P&gt;を作ろうとしているような気がしてきました。&lt;/P&gt;
&lt;P&gt;これはすごいですよ。ある種の３階層アプリです。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;●描画エンジン・・・今はDirectX。それもいまだとManaged DirectXのSpriteしか使えません。３Dになったらお手上げです。そのうちXNAにするかもですがそっちも全然知りません。既に私は時代遅れ人間です・・・。&lt;/P&gt;
&lt;P&gt;●ライブラリ・・・今のところGUI無し。とりあえずGUI無しで何か作品作ったらだんだんGUIが出来てくる気がする。（作るのは私ですが）&lt;/P&gt;
&lt;P&gt;●ビジネスロジック・・・いわゆるこれがゲームデザイン部分ですが。私ははっきりいってその方面の才能とかありません。絵も音楽もできません。なのでここは誰か有志を募ろうかなとか思っています。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ってことでやっぱり私の居場所はライブラリしかなさそう。&lt;/P&gt;
&lt;P&gt;身の振り方はとりあえずライブラリが出来たら考えよう（笑&lt;/P&gt;
&lt;P&gt;＃ひょっとしたらライブラリも、やねうらおさんの偉大なライブラリに置き換えができるかも知れない。&lt;/P&gt;
&lt;P&gt;＃ってことは私の居場所はビジネスロジックを組み立てるIDE（GUI）デザインだけになるのか？&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;あれこんなのがあったのかあ。私は世間のことを何も知らない人です。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://pc11.2ch.net/test/read.cgi/gamedev/1192682311/" target=_blank&gt;&lt;FONT size=2&gt;シューティングツクールXPを待ち続けるスレ Part5&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;じゃあ目標はここで晒されるってのがいいですかね？ｗ&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/127336.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>コルーチンのyieldはDoEventsです</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/11/127239.aspx</link><pubDate>Tue, 11 Mar 2008 14:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/11/127239.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/127239.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/11/127239.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/127239.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/127239.aspx</trackback:ping><description>&lt;P&gt;前エントリー：&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/10/127092.aspx"&gt;http://blogs.wankuma.com/myugaru/archive/2008/03/10/127092.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;siokoshouさんのコメントを拝見しまして私の説明力・説得力の無さを痛感しました。&lt;BR&gt;ちょっと悔しいので今日は別の切り口で説明のリベンジをしたいと思います。&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;（また失敗に終わる予感もしますが・・・）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;話はWindowsプログラミングです。&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;ボタン１をクリックすると画面の中央に&lt;BR&gt;「ボタン１が押されました」&lt;BR&gt;という文字が0.5秒間隔で点滅し、&lt;BR&gt;ボタン２を押すとそれが消える&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;と仮定してください。&lt;/P&gt;
&lt;P&gt;以下のようにプログラムを作ったとします。&lt;/P&gt;&lt;PRE&gt;ボタン１クリック()
{
　while (ボタン２フラグ == OFF) {
　　while (0.5秒間)
　　　「ボタン１が押されました」表示
　　while (0.5秒間)
　　　//何もしない
　}
}
　
ボタン２クリック()
{
　ボタン２フラグ = ON
}&lt;/PRE&gt;
&lt;P&gt;一見仕様は満たされています。しかし上のプログラムは上手く動作しません。&lt;BR&gt;ボタン１をクリックしてしまうと画面が真っ白になってしまうことでしょう。&lt;BR&gt;誰でも一度くらいは経験があるフリーズという状態です。&lt;BR&gt;タスクの切替が考慮されていないために起こる現象です。&lt;/P&gt;
&lt;P&gt;改良したボタン１クリックが次のプログラムです。&lt;/P&gt;&lt;PRE&gt;ボタン１クリック()
{
　while (ボタン２フラグ == OFF) {
　　while (0.5秒間) {
　　　「ボタン１が押されました」表示
　　　DoEvents();
　　}
　　while (0.5秒間) {
　　　DoEvents();
　　}
　}
}&lt;/PRE&gt;
&lt;P&gt;DoEventsはここではWindowsへ制御を渡す役割をする関数と思ってください。&lt;BR&gt;・・・長く説明すると馬鹿にしてるとお叱りを受けますからここでやめます（苦笑&lt;/P&gt;
&lt;P&gt;コルーチンで同じことを考えましょう。&lt;BR&gt;ボタン１クリックは次のように書けます。&lt;/P&gt;&lt;PRE&gt;ボタン１クリック()
{
　while (ボタン２フラグ == OFF) {
　　while (0.5秒間) {
　　　「ボタン１が押されました」表示
　　　yield return 適当;
　　}
　　while (0.5秒間) {
　　　yield return 適当;
　　}
　}
}&lt;/PRE&gt;
&lt;P&gt;コルーチンのyieldは状態をレジュームしメインループに制御を戻します。&lt;BR&gt;次回の呼び出し時はyieldの次から再開されます。&lt;BR&gt;DoEventsと全く同じですね。&lt;FONT color=#ff0000&gt;ここは大丈夫ですよね？&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;さてまたWindowsへ戻ります。&lt;BR&gt;このボタン１クリックを呼び出しているのはWindowsならばWinProcに当ります。&lt;BR&gt;そこにメインループが書かれています。&lt;/P&gt;&lt;PRE&gt;WinProc()
{
　while (true) {
　　switch (イベント) {
　　　case ボタン１:
　　　　ボタン１クリック();
　　　　break;
　　　case ボタン２：
　　　　ボタン２クリック();
　　　　break;
　　}
　}
}&lt;/PRE&gt;
&lt;P&gt;上のコードには実は隠された処理が多く存在しています。&lt;BR&gt;たとえばDoEventでの処理中断再開の機構が見えません。&lt;BR&gt;しかしここで全て書くにはあまりに膨大です。&lt;BR&gt;それにWindowsも一般的になってきたので省略します。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;余談ですが。昔々&lt;STRIKE&gt;Windows98がまだ健在だった時代。&lt;/STRIKE&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;今も健在だとお叱り受けますね＾＾；；&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;自分の会社が初めて業務でWindowsを扱うことになった頃に上のような処理で、&lt;BR&gt;「ボタン１の処理中にどうしてボタン２へ飛んでいけるのか」&lt;BR&gt;を何日も何日も何日もかけて上司に説明した事を思い出しています（笑&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;話を戻します。私が実装を予定しているゲームメインはこうなります。&lt;BR&gt;WinProcでは隠されていたと説明した部分もここでは露見します。&lt;/P&gt;&lt;PRE&gt;GameLoop()
{
　IEnumerator ボタン１タスク = ボタン１クリック();
　IEnumerator ボタン２タスク = ボタン２クリック();
　List &lt;IENUMERATOR&gt;タスクリスト
　タスクリスト.Add(ボタン１タスク)
　タスクリスト.Add(ボタン２タスク)
　while (true) {
　　　&lt;FONT color=#a52a2a&gt;foreach (タスク in タスクリスト)&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;（★１）&lt;/FONT&gt;
　　　　if (!タスク.MoveNext()) {
　　　　　//終了したタスクを除外
　　　　　タスクリスト.Remove(タスク)
　　　　}
　　}
　}
}&lt;/PRE&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;★１：（15:40追記）実際には私の独自実装をほどこしたLinkedListを用います。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;説明の本質から外れるので便宜上foreachを用いましたが現実のC#言語のforeachはノードを削除することはできません。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;削除を考慮した独自のLinkedList拡張→&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/06/126581.aspx"&gt;http://blogs.wankuma.com/myugaru/archive/2008/03/06/126581.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Windowsでの実装とコルーチンでの実装をご覧いただきました。&lt;BR&gt;両者は&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;「処理を一旦中断し別タスクへ処理のチャンスを渡す」&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;という全く同じ基本思想で成り立っています。&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;●では再度お尋ねします。コルーチンのyieldは何を返すのでしょうか？&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;コルーチンのyieldが返す値についてもう一度だけ考えてみてほしいと思います。&lt;BR&gt;列挙のyieldではありません。コルーチンのyieldです。&lt;/P&gt;
&lt;P&gt;WindowsのDoEventsととらえてこれを再考するといかがでしょうか？&lt;BR&gt;例題を見てもらうと両者の位置付けは全く同一です。&lt;BR&gt;果たして&lt;STRONG&gt;DoEventsは何を返すべき&lt;/STRONG&gt;でしょう？&lt;FONT color=#ff0000&gt;&lt;STRONG&gt;ボタン１クリックの返値ではありませんよ。&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR&gt;yield returnがCurrentを返すと考えると上記での&lt;STRONG&gt;DoEventsにとってのCurrentに該当するもの&lt;/STRONG&gt;は一体なんなのでしょうか？&lt;BR&gt;ボタン１の所属する・・この場合はFormになるのでしょうか？&lt;BR&gt;そうでなければ何であれば適当ですか？&lt;/P&gt;
&lt;P&gt;またコルーチンを列挙とどうしてもとらえたいという方にはボタン１クリック()というハンドラーを列挙と捕らえることにどういう意味があるかを再考いただければと思います。&lt;/P&gt;
&lt;P&gt;前エントリーから私の意見は&lt;STRONG&gt;「コルーチンのyieldの返値は無意味であり不要である」&lt;/STRONG&gt;です。&lt;BR&gt;DoEventsだって返値は現実にありませんものね。&lt;/P&gt;
&lt;P&gt;お時間ありましたら再度皆さんのご感想などいただけたらうれしく思います。&lt;/P&gt;
&lt;P&gt;ここまで読んでお付き合いくださった方に感謝いたします。ありがとうございます。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/127239.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>C#のyieldに対する誤解と私の見解</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/10/127092.aspx</link><pubDate>Mon, 10 Mar 2008 20:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/10/127092.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/127092.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/10/127092.aspx#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/127092.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/127092.aspx</trackback:ping><description>&lt;P&gt;コルーチンの話を進める上でどうしてもC#のyieldを理解してもらわなくてはいけません。&lt;/P&gt;
&lt;P&gt;凪瀬さんも少し誤解されているように感じました。&lt;/P&gt;
&lt;P&gt;ここで少し解説したいと思います。&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;STRONG&gt;&lt;FONT size=4&gt;●実は何も返してないyield return&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;ご存じなければ驚くかもしれませんが&lt;FONT color=#ff0000&gt;yield returnは正確には何も返していません&lt;/FONT&gt;。&lt;BR&gt;まずMoveNextの返値ではありません。&lt;BR&gt;MoveNextの返値はMoveNextの成功可否をboolで返します。&lt;BR&gt;つまり列挙が継続可能かを返します。&lt;BR&gt;ではyield returnは何を返しているかというと、&lt;BR&gt;IEnumeratorインターフェースのCurrentプロパティの内容を更新しています。&lt;BR&gt;&lt;FONT color=#ff0000&gt;言語構文上returnという単語を用いているだけなのです。&lt;/FONT&gt;&lt;BR&gt;なので「何か返している」という誤解が生じているように思います。 
&lt;P&gt;&lt;/P&gt;&lt;PRE class=syntax-highlight&gt;&lt;SPAN class=synStatement&gt;using&lt;/SPAN&gt; System;
&lt;SPAN class=synStatement&gt;using&lt;/SPAN&gt; System.Collections;
&lt;SPAN class=synType&gt;namespace&lt;/SPAN&gt; CoRoutine
{
    &lt;SPAN class=synType&gt;static&lt;/SPAN&gt; &lt;SPAN class=synType&gt;class&lt;/SPAN&gt; Program
    {
        [STAThread]
        &lt;SPAN class=synType&gt;static&lt;/SPAN&gt; &lt;SPAN class=synType&gt;void&lt;/SPAN&gt; Main(string[] args)
        {
            IEnumerator e = TaskA();
            &lt;SPAN class=synStatement&gt;for&lt;/SPAN&gt; (&lt;SPAN class=synType&gt;int&lt;/SPAN&gt; i = &lt;SPAN class=synConstant&gt;0&lt;/SPAN&gt;; i &lt; &lt;SPAN class=synConstant&gt;10&lt;/SPAN&gt;; i++) {
                &lt;SPAN class=synType&gt;bool&lt;/SPAN&gt; b = e.MoveNext();
                Console.WriteLine(e.Current);
            }
        }
        &lt;SPAN class=synType&gt;static&lt;/SPAN&gt; IEnumerator TaskA()
        {
            &lt;SPAN class=synStatement&gt;while&lt;/SPAN&gt; (&lt;SPAN class=synConstant&gt;true&lt;/SPAN&gt;) {
                &lt;SPAN class=synStatement&gt;for&lt;/SPAN&gt; (&lt;SPAN class=synType&gt;int&lt;/SPAN&gt; i = &lt;SPAN class=synConstant&gt;1&lt;/SPAN&gt;; i &lt;= &lt;SPAN class=synConstant&gt;3&lt;/SPAN&gt;; i++) {
                    yield &lt;SPAN class=synStatement&gt;return&lt;/SPAN&gt; i;
                }
            }
        }
    }
}
&lt;/PRE&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080310_2.png"&gt; 
&lt;P&gt;&lt;BR&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;
&lt;HR id=null&gt;
●Currentで表現できる状態変化&lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;具体的なゲームの話をしましょう。&lt;BR&gt;「男の子がまばたきしている」&lt;BR&gt;ことを考えます。&lt;BR&gt;Boyには状態を変化させるUpdateメソッドと&lt;BR&gt;現状を画面へ表示するRenderメソッドがあります。 &lt;PRE&gt;Boy boy = new Boy();
while (boy.生きている間)
{
    boy.Update();
    boy.Render();
}&lt;/PRE&gt;
&lt;P&gt;Updateメソッドの実装は次のようになるでしょう。&lt;BR&gt;３項演算を使えばもっとシンプル化も可能です。&lt;/P&gt;&lt;PRE&gt;void Update()
{
    if (this.eye == CLOSE)
       this.eye = OPEN;
    else
       this.eye = CLOSE;
}&lt;/PRE&gt;
&lt;P&gt;ここでは目というプロパティに値を代入することで&lt;BR&gt;状態変化を表現しています。&lt;BR&gt;これはyield構文を使うとこのように書けるでしょう。&lt;/P&gt;&lt;PRE&gt;class Boy
{
    IEnumerator enumerator;
    public Boy()
    {
        enumerator = GetEnumerator();
    }
    void Update()
    {
        enumerator.MoveNext();
        eye = enumerator.Current;
    }
    IEnumerator GetEnumerator()
    {
        while (true) {
            yield return OPEN;
            yield return CLOSE;
        }
    }
}&lt;/PRE&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;STRONG&gt;&lt;FONT size=4&gt;●Currentでは表現できないケース&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;さて別の実装を考えます。&lt;BR&gt;「女の子が携帯メールを打ちながら笑いながら歩いている」&lt;BR&gt;ことを考えます&lt;BR&gt;GirlはBoyと同じく状態を変化させるUpdateメソッドと&lt;BR&gt;現状を画面へ表示するRenderメソッドがあります。&lt;BR&gt;メインループはBoyと同じなので省略します。&lt;BR&gt;yieldを使わない場合、今回のUpdateメソッドはこのように&lt;BR&gt;なっているとします。&lt;/P&gt;&lt;PRE&gt;void Update()
{
    // メール内容を追加する
    string s = GetNextMailSentence();
    this.phone.Add(s);
    // 歩く
    MoveStep();
}&lt;/PRE&gt;
&lt;P&gt;状態変化はすべてメソッドによって実装されています。&lt;BR&gt;この場合、反論はあるかも知れませんが私はyieldの実装はこのようにするのを理想と考えています。&lt;/P&gt;&lt;PRE&gt;class Girl
{
    IEnumerator enumerator;
    public Girl()
    {
        enumerator = GetEnumerator();
    }
    void Update()
    {
        enumerator.MoveNext();
    }
    IEnumerator GetEnumerator()
    {
        while (true) {
            // メール内容を追加する
            string s = GetNextMailSentence();
            this.phone.Add(s);
            // 歩く
            MoveStep();
            yield return 0;
        }
    }
}&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;
●私の見解&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;状態変化が１つのプロパティの代入による場合、&lt;BR&gt;yield returnの返値としてそれを表現することができます。&lt;BR&gt;しかし現実には&lt;BR&gt;・複数のプロパティによって表現された状態&lt;BR&gt;・代入で表現できない状態変化&lt;BR&gt;などは多くありますので一般論的にみるとyield returnによる一つの値の上書きには意味を持たせる必然性は全くないと私は考えます。&lt;/P&gt;
&lt;P&gt;むしろyieldを思想として列挙を考えていない別言語のyieldになぞらえて使用しているのである、という意思表示のためにもコルーチンとしてのyieldは無意味な値を返すべきだと考えます。&lt;BR&gt;それはコルーチン向けの言語で返値が存在していない理由の一つだとこじつけられそうにも思います。&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/127092.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>コルーチンはマイクロスレッドでありファイバーである</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/10/127059.aspx</link><pubDate>Mon, 10 Mar 2008 17:09:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/10/127059.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/127059.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/10/127059.aspx#Feedback</comments><slash:comments>297</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/127059.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/127059.aspx</trackback:ping><description>&lt;P&gt;（前エントリー：&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/10/127005.aspx"&gt;http://blogs.wankuma.com/myugaru/archive/2008/03/10/127005.aspx&lt;/A&gt;）&lt;/P&gt;
&lt;P&gt;前エントリーのコルーチンという概念は様々な人が独立して発見しているようです。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;（人間って素晴らしいですね！）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;なので色々な単語で表現されているようです。&lt;/P&gt;
&lt;P&gt;そのなかでも&lt;STRONG&gt;マイクロスレッド&lt;/STRONG&gt;や&lt;STRONG&gt;ファイバー&lt;/STRONG&gt;が有名みたいです。&lt;/P&gt;
&lt;P&gt;（あと今回は&lt;STRIKE&gt;面倒なので&lt;/STRIKE&gt;言及してませんがtry～catch構文とか&lt;BR&gt;C言語のlongjump()とか古いBASICのON ERRORからのRESUMEなんかでも&lt;BR&gt;同一概念を表現する手段としてひょっとしたら使い道がありそうです。）&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;/FONT&gt;?&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;●&lt;/FONT&gt;まずマイクロスレッドの紹介です。全くコルーチンと同じ内容です。&lt;/P&gt;
&lt;P&gt;前エントリーで凪瀬さんが返値を使っていないのがキショクワルイとの指摘でしたが、&lt;/P&gt;
&lt;P&gt;このマイクロスレッドの参照ＵＲＬにかかれている例をみてもらうと返値を使っていないという&lt;/P&gt;
&lt;P&gt;例にもなっています。そして&lt;FONT color=#ff0000&gt;&lt;STRONG&gt;とても完成度が高いドキュメント&lt;/STRONG&gt;&lt;/FONT&gt;です。（ゲームも完成度は相当高いです）&lt;/P&gt;
&lt;P&gt;＃この仕様はさっそくそのまま模倣させてもらおうかとｗｗ&lt;/P&gt;
&lt;P&gt;&lt;A href="http://f27.aaa.livedoor.jp/~thdmhul/pukiwiki/pukiwiki.php?%A5%DE%A5%A4%A5%AF%A5%ED%A5%B9%A5%EC%A5%C3%A5%C9%B9%D6%BA%C2"&gt;マイクロスレッド講座 - 弾幕風Wiki&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.geocities.co.jp/SiliconValley-Oakland/9951/products/th_dnh.html"&gt;東方弾幕風 - と～ほ～GC&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;●&lt;/FONT&gt;つぎにファイバーの紹介です。&lt;/P&gt;
&lt;P&gt;と思ったのですがゲーム的な説明ページを見つけられませんでした。&lt;/P&gt;
&lt;P&gt;ファイバーというのはRuby言語にそのものずばりのクラスが存在しています。&lt;/P&gt;
&lt;P&gt;ここは、&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;&lt;FONT color=#ff0000&gt;Ruby言語にお詳しい方にエントリーを書いていただいて&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;トラックバック&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;いただけるととても嬉しいです（タリキホンガンといいますｗｗ）&lt;/P&gt;
&lt;P&gt;&lt;A href="http://doc.loveruby.net/refm/api/view/class/Fiber"&gt;class Fiber - Rubyリファレンスマニュアル刷新計画&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#008000&gt;17:50追記&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#008000&gt;シャノンさんよりWIN32APIにCreateFiber()なるものがあるとのご指摘をいただきました。&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#008000&gt;なのでこちらについてもお詳しい方からのトラバを（ｒｙ&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#008000&gt;シャノンさん、ありがとうございました。&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/127059.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>コルーチンと運命の出会い</title><link>http://blogs.wankuma.com/myugaru/archive/2008/03/10/127005.aspx</link><pubDate>Mon, 10 Mar 2008 11:34:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/03/10/127005.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/127005.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/03/10/127005.aspx#Feedback</comments><slash:comments>363</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/127005.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/127005.aspx</trackback:ping><description>&lt;P&gt;ああ、とうとう出会ってしまいました。たぶんちょっとゲームに詳しい人ならば「myugaruはいつこれに気付くのだろう？」とか思っていたのではないでしょうか？&lt;/P&gt;
&lt;P&gt;かれこれ３ヶ月くらいかかってやっと出会いました。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=5&gt;コ　ル　ー　チ　ン&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;今かなり笑われてる気がするけど気にせず感動に浸っておきます。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff size=5&gt;なんて素敵なコルーチン。&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;おかげで私が考えていた「ややこしいタスクシステム構想」はほとんど０に帰しましたｗ&lt;/P&gt;
&lt;P&gt;じゃあこっから真面目にコルーチンについて語ります。&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;&lt;A href="http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3"&gt;コルーチン - Wikipedia&lt;/A&gt; 
&lt;P&gt;この構造をゲーム関連の情報集めをしている際に見つけた。&lt;BR&gt;なるほどこれは確かにすごい発想だと思う。&lt;BR&gt;そしてC#のyieldは正にこの機能を実現するためにあると思った。&lt;BR&gt;色々やってみると２つの利点が見えた。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;
第１の利点．ゲームでのタスクシステムに利用できる&lt;/FONT&gt;&lt;/STRONG&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;もちろん一番はっきりとした利点はこれである。&lt;BR&gt;簡単に説明すると例えば並列動作する２つのゲームタスクを考える。&lt;BR&gt;タスクＡは３つの状態を繰り返しタスクＢは２つの状態を繰り返すと仮定する。&lt;BR&gt;実際には足踏みをするキャラだったり煙突から上がる煙だったりするかも知れない。&lt;BR&gt;コルーチンによる驚異的明瞭コードはこうなる。&lt;/P&gt;&lt;PRE class=syntax-highlight&gt;&lt;SPAN class=synStatement&gt;using&lt;/SPAN&gt; System;
&lt;SPAN class=synStatement&gt;using&lt;/SPAN&gt; System.Collections;
    
&lt;SPAN class=synType&gt;namespace&lt;/SPAN&gt; CoRoutine
{
    &lt;SPAN class=synType&gt;static&lt;/SPAN&gt; &lt;SPAN class=synType&gt;class&lt;/SPAN&gt; Program
    {
        &lt;SPAN class=synType&gt;static&lt;/SPAN&gt; &lt;SPAN class=synType&gt;int&lt;/SPAN&gt; stateA, stateB;
    
        [STAThread]
        &lt;SPAN class=synType&gt;static&lt;/SPAN&gt; &lt;SPAN class=synType&gt;void&lt;/SPAN&gt; Main(string[] args)
        {
            var a = TaskA();
            var b = TaskB();
            &lt;SPAN class=synStatement&gt;for&lt;/SPAN&gt; (&lt;SPAN class=synType&gt;int&lt;/SPAN&gt; i = &lt;SPAN class=synConstant&gt;0&lt;/SPAN&gt;; i &lt; &lt;SPAN class=synConstant&gt;10&lt;/SPAN&gt;; i++) {
                a.MoveNext();
                b.MoveNext();
                Console.WriteLine(&lt;SPAN class=synConstant&gt;"A{0} B{1}"&lt;/SPAN&gt;, stateA, stateB);
            }
            Console.ReadLine();
        }
    
        &lt;SPAN class=synType&gt;static&lt;/SPAN&gt; IEnumerator TaskA()
        {
            &lt;SPAN class=synStatement&gt;while&lt;/SPAN&gt; (&lt;SPAN class=synConstant&gt;true&lt;/SPAN&gt;) {
                &lt;SPAN class=synStatement&gt;for&lt;/SPAN&gt; (stateA = &lt;SPAN class=synConstant&gt;1&lt;/SPAN&gt;; stateA &lt;= &lt;SPAN class=synConstant&gt;3&lt;/SPAN&gt;; stateA++) {
                    yield &lt;SPAN class=synStatement&gt;return&lt;/SPAN&gt; &lt;SPAN class=synConstant&gt;0&lt;/SPAN&gt;;
                }
            }
        }
    
        &lt;SPAN class=synType&gt;static&lt;/SPAN&gt; IEnumerator TaskB()
        {
            &lt;SPAN class=synStatement&gt;while&lt;/SPAN&gt; (&lt;SPAN class=synConstant&gt;true&lt;/SPAN&gt;) {
                &lt;SPAN class=synStatement&gt;for&lt;/SPAN&gt; (stateB = &lt;SPAN class=synConstant&gt;1&lt;/SPAN&gt;; stateB &lt;= &lt;SPAN class=synConstant&gt;2&lt;/SPAN&gt;; stateB++) {
                    yield &lt;SPAN class=synStatement&gt;return&lt;/SPAN&gt; &lt;SPAN class=synConstant&gt;0&lt;/SPAN&gt;;
                }
            }
        }
    }
}
&lt;/PRE&gt;&lt;IMG src="http://myugaru.wankuma.com/image/20080310_1.png"&gt; 
&lt;P&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;
&lt;HR id=null&gt;
第２の利点．リバースエンジニアリングを阻止できる&lt;/FONT&gt;&lt;/STRONG&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;先日リバースエンジニアリングの話題を出した。&lt;BR&gt;&lt;A href="http://blogs.wankuma.com/myugaru/archive/2008/03/06/126503.aspx"&gt;http://blogs.wankuma.com/myugaru/archive/2008/03/06/126503.aspx&lt;/A&gt;&lt;BR&gt;内容は私が他人のプログラムを解析する話になっていたが、&lt;BR&gt;これが逆に&lt;FONT color=#800080&gt;私のプログラムを誰かに解析されるって事になると、&lt;BR&gt;ずいぶんと勝手な言い分だけどあまり嬉しくはない。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;だがここで朗報はyieldによるコルーチンは少なくとも&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;現バージョンのReflectorでは元のソースに復元が出来ない&lt;/STRONG&gt;&lt;/FONT&gt;のだ。&lt;/P&gt;
&lt;P&gt;更に好都合なのは&lt;STRONG&gt;&lt;FONT color=#0000ff size=4&gt;コルーチンにこそゲームの核となるビジネスロジックの大半が記述される&lt;/FONT&gt;&lt;/STRONG&gt;のである。&lt;/P&gt;
&lt;P&gt;試しに上のソースをReflectorにかけてみた。結果は上のたったあれだけのソースがgotoの応酬でとんでもない事になっている。&lt;FONT color=#ff0000&gt;（応酬ってほど多くは無かったね＾＾；；）&lt;/FONT&gt;興味のある方はリンク先をご覧いただきたい。&lt;/P&gt;
&lt;P&gt;上のソースのReflectorの出力結果→&lt;A href="http://myugaru.wankuma.com/20080310CoRoutine.txt"&gt;http://myugaru.wankuma.com/20080310CoRoutine.txt&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#ff0000&gt;?Ｐ．Ｓ．もしyield returnに対応したリバースエンジニアツールをご存知ならご一報くださいね＾＾；；；&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/127005.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>ボトムアップで行こう～</title><link>http://blogs.wankuma.com/myugaru/archive/2008/02/13/123034.aspx</link><pubDate>Wed, 13 Feb 2008 16:52:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/02/13/123034.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/123034.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/02/13/123034.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/123034.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/123034.aspx</trackback:ping><description>&lt;P&gt;ゲームってのは真剣に作るとOS作りに匹敵する作業がある。あと今の世の中、もう一から素人でもゲームが作れるようなスクリプト形式のゲーム作成ツールが多くあるのも知っている。それでも敢えて私は今から一からゲームを作ってみようかなって思っている。きっかけとなった出来事がいくつかあるので思いつくまま書いてみよう。&lt;/P&gt;
&lt;P&gt;出来事１．組み込みで小さいOS作りに参加したことがある。その頃の私はなぜいまさら一からOSを組み立てる必要があるのか？とかなり気乗りしないままに参加した。しかし参加して本当によかったと今では思っている。WindowsのAPIバイブルとかかなり簡単に読めるくらいにOSそのものの理解が増えたからだ。さらに先日、知り合いから数年の歳月を経てそのOSの派生が某社のカーナビゲーションに組み込まれているのを聞いた。なんだか自分はほとんど無関係といえるくらいの端っこのPGなのだがかなり嬉しかった。&lt;/P&gt;
&lt;P&gt;出来事２．最近ゲームセンターに行かなくなった。それまで実は私はかなりのゲーム好きで一週間のうち３日以上はゲームセンターに居るような人間だった。それがどうしてゲームセンターから離れてしまったかというと友人がこなくなってきたからである。みんな大人になったんだなあって最初は思っていたが、どうもそれだけではない何かがあるような気がしている。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://headlines.yahoo.co.jp/hl?a=20080208-00000001-sh_mon-bus_all" target=_blank&gt;ゲームセンターが次々と閉鎖する裏にWiiの躍進&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;まあこの人のWiiが全ての悪という感じの意見はちょっとこじつけ過ぎると思ったが、実際問題としてゲーセン人口がどういうわけか減っており、その結果私のような飯よりゲームが好きだった人間もいつのまにか足が遠のいている。&lt;/P&gt;
&lt;P&gt;出来事３．C#が楽しすぎる。この言語が１０年前の&lt;STRIKE&gt;V&lt;/STRIKE&gt;C言語バリバリで仕事をしていた私の前に出現していたらなあ。そしてなぜだかMicrosoft様はC#でゲームを作れと言っている。XNAがどうしてVBではなくてC#なのかは私のような凡人にはわからないが・・、とりあえずC#はがんばればゲームにとても相性のよい言語らしいという理解でOKでしょうか？＞Microsoft様。&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;とまあ。色々とほかにも小さい事件もあったりして私はゲームを作ろうとしているわけである（よくわからないですね＾＾；；；）&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;ということで早速何か始めるのだが。初めに私は何をやるにしても次の二者択一から始めている。&lt;/P&gt;
&lt;P&gt;１．トップダウンで行く～&lt;/P&gt;
&lt;P&gt;２．ボトムアップで行く～&lt;/P&gt;
&lt;P&gt;やっぱゲームってのは自分にとっては未知数部分が多いのでしっかりしたライブラリやらフレームワークやらをくみ上げて挑んだほうが後で泣かなくて済みそうな気配がするのだ（弱気。そんなわけでボトムアップで行く～ことにした。まずは頻繁に発生しそうでライブラリ化したいところをちょこっと列挙してみようかなあ。&lt;/P&gt;
&lt;P&gt;・テクスチャからスプライトを切り出して描画するところ&lt;/P&gt;
&lt;P&gt;・ゲーム中で使われるオブジェクト（敵とか弾とか自機とか）の管理&lt;/P&gt;
&lt;P&gt;・画面の全オブジェクトを更新→全オブジェクトを描画→全オブジェクトを(ryって繰り返すところ&lt;/P&gt;
&lt;P&gt;・画面の現在の状況に応じたイベント処理をするところ&lt;/P&gt;
&lt;P&gt;書いてたら本当にゲーム作りってのはOSなんだなあって分かる。ちょっと怖いけどあせらず気長にがんばろう。&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;ということで今日は一行もC#書かずでした＾＾；；&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/123034.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>myugaru (myugaru@wankuma.com)</dc:creator><title>C#とManaged DirectX</title><link>http://blogs.wankuma.com/myugaru/archive/2008/02/11/122733.aspx</link><pubDate>Mon, 11 Feb 2008 23:09:00 GMT</pubDate><guid>http://blogs.wankuma.com/myugaru/archive/2008/02/11/122733.aspx</guid><wfw:comment>http://blogs.wankuma.com/myugaru/comments/122733.aspx</wfw:comment><comments>http://blogs.wankuma.com/myugaru/archive/2008/02/11/122733.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/myugaru/comments/commentRss/122733.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/myugaru/services/trackbacks/122733.aspx</trackback:ping><description>&lt;P&gt;世の中はC#とXNAなんだろうけど、うちのしょぼいノートPCではそもそもXNAが要求しているピクセルシェーダ２．０うんぬんを満たしていない。かといって無理やりソフトエミュレートなモードでXNAを実行すると・・・とてもじゃないがゲームどころのスピードが出ない。&lt;/P&gt;
&lt;P&gt;仕方ないので、すでに開発が途絶えているとの悲しいうわさのManagedDirectXでがんばってみようと思う。&lt;/P&gt;
&lt;P&gt;といってもRPGみたいな系はとてもじゃないが気力が持ちそうに無いので、なんかカードゲームっぽいのとかシューティングっぽいのは作れそうなのでそのへんを目指そうかなあ。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/myugaru/aggbug/122733.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>