ラベル D言語 の投稿を表示しています。 すべての投稿を表示
ラベル D言語 の投稿を表示しています。 すべての投稿を表示

2009/03/10

今日のクロックアップ

・シューティング作成

・スクリプトいじり

第2回3時間コンテストということで、「アイテムをとってゲームスピードを上げて、早くクリアすることで得点を荒稼ぎ」というコンセプトの横STGを作ってみた。しかし、まともなシューティングの土台を作るのに1.5時間以上かかって、まともにゲームとして成立しなかった。コンセプト的にもあまり自分の趣味に合わないのでお蔵入り。ランクを能動的に調整できて、それに毛が生えたという程度。

復讐のスクリプトをいじっていた。だいぶいい実装が出来そうになったのだが、最後の壁として型情報が立ちはだかって詰んだ。型の情報を保存する型、というものでもあればよかったのだが見つからない。sizeofやstringofプロパティが取れるのに、型は型ではないというのは、型とはいったい何なのか。Phobosで型情報を触っているモジュールがあり、それを参考にして、テンプレートとaliasとを組み合わせて乗り越えられるか、と思ったが越えられず。stringofプロパティを利用してコンパイル時にコードを生成する、というようなことも考えたのだが、ややこしかったのでやめた。

それで結局妥協して、関数を呼び出すためのラップ関数を一つずつ作って、それへのデリゲートを連想配列に格納する、という方法での実装にした。ラップ関数を作った労力のリターンとして、関数を呼び出すときに引数をどうするのかを意識せずとも使えるようになったので、これで妥協。その実装の進行具合は、構文解析のあたりで機嫌が悪くなっていて、ごく単純な命令しか実行できないという状況。

2009/02/22

今日の複合

・パラボラ視点変更完成

視点を回転させる機能を作り忘れていたのでつけておいた。これで多分視点関係は完成。そろそろ本丸の軌道の演算を実装しないといけない。

復讐を作るのにPythonスクリプトを組み込もうと思ってPythonDを調べている。しかしドキュメントを見たところDのコードをPythonから呼ぶ方法はわかりやすく載っているのだが、PythonコードをDから呼ぶ方法が良くわからない。多分書いてはあるのだろうが例が見当たらないので困っている。

2009/02/12

今日の制御

・ピストンコラージュD言語対応
・パラボラ曲試作
・文字列描画強化
・復讐会話スクリプト試作
昨日日記を書いた後、WindowsAPIをいじったのだからピストンコラージュのDLLのインポートヘッダをD用に書くぐらい簡単ではないかと思ってやってみた。以前やってみようとしたときはLPSTRとかのWindows関係の型を見て嫌になったのだが、耐性が付いて無事に書けて実際に動かすことにも成功。

更に昨晩深夜、眠れなかったので妄想をしていたら曲のような物が浮かんできたので打ち込んでみた。頭の中にある短いフレーズを実際に鳴らすというだけで苦労したので、やはり向いていないのだと改めて思った。昔習った音楽理論もすっかり頭から抜け落ちているし。

今日の作業はここから。
物理ゲームはどうにもモチベーションが湧かないので久しぶりに復讐をいじっていた。
まずは前々から作ろうと思っていたが放置されていた文字列描画の強化。改行のある文字列を簡単に扱えるようにした。その際にフォント周りも一緒にいじっていたら、書き間違えて文字サイズが小さくなるというバグを作ってしまった。文字描画には地雷があるというような話を聞いていたせいで、バグの原因がそれにあると思い込んで大変な目にあった。
それが済んだ後本題であった会話スクリプトの実装を開始。文法を決めて、それを読み込む部分と、読み込んだ文字列をとりあえず描画する機能を作成。蘇生の文章管理の方法がかなり酷く、シナリオを書くのから遠ざかる一因にまでなっているので、その二の舞にならないように力を入れている。

D1.040がリリースされていた。MacOSXについに対応したらしいが、Macは使ったことがない。

2009/02/11

今日のフォント

・蘇生情報追加

・システムフォント読み込み作成

ウェブサイトを更新。蘇生の情報を書き足しておいた。

ゲームを配布するにあたって、わざわざフォントを配布するのは容量が大きすぎて面倒なのでシステムフォントを読み込む機能をライブラリに追加した。DでWindowsAPIを使うのは初めてだったが、extern(Windows)のあとに関数宣言を書くだけでいけた。見づらいように感じたが妥協する。

2009/01/17

今日の記録

・Re:Actionシステム作り

・復讐入力周り

・絵作成

Re:Actionを何か進めないといけないと思ってとりあえず難しいことを考えずに作れるシステム周りを作成。タイトル画面とゲーム画面の接続を関数ポインタとかを使って作って、タイトル画面を動かさないといけないという話を聞いたので文字通り動かした。このとき、自作ベクトルクラスのバグに気が付いたので修正した。正月記念のやつのバグの原因もこれだった。

 

それで飽きたので次は復讐をいじった。だがこっちはこっちでマップ周りがひと段落して次にどこに手をつけるか迷ったので、入力を整理した。で、何を思ったかリプレイを作り始めた。

そのときにキー入力を格納した静的配列を参照渡しとして引数にしようとしたのだが駄目だといわれた。だからといって動的配列に変換して参照渡しすることもできず、結局静的配列の中身を一度動的配列にコピーして、その動的配列を参照渡しして、結果を再び元の静的配列に戻すという面倒なことになった。ポインタを使えばいけるのかもしれないがD言語でわざわざポインタを使うのも嫌。何かいい解決法はないのだろうか。

 

それと、蘇生の5面ボスと復讐のボスの絵を描いた。5面ボスでは絵の輪郭線をつけるかどうか悩んでいる。4面のボスの絵には輪郭線をつけたのだが、それはとぐろを巻いているという特殊な理由があったから。

復讐のボスの絵のほうは以前描いたものの修正。身軽なイメージで書くべく努力しているのだが、どうもうまく描けない。

2009/01/15

今日の統一

・イベント管理方法改良
眠くて新しく何かをしようという意思が起きなかったので、考えておいたイベント管理方法の変更を実装しておいた。マップチップとイベントを分離して、別のマップチップでも同じイベントのデータを参照できるように。これでフラグ操作が楽になる。

2009/01/12

今日の編集

・イベントエディタ完成

・マップ移動作成

イベントエディタを完成させた。開発にEntice Designerを使っていたのだが、手書きでコードを書いてやるのもなかなか。Dfl使っていて、イベントを入れるのにやや手間がかかって、一度にたくさんコントロールを入れると入れ間違いや、入れ忘れが出てきて混乱。順番を考えずに一度にやるのが悪かった。

手書きでやることが多い分、融通が利いて使っているうちにわかってくるのがいい点かもしれない。

イベントエディタができたので、早速本来の目的であったマップ間の移動を作った。想定していたよりもソースが汚くなったので要改善。

一段落したので今度こそ物理ゲームを進めるべき。

2009/01/11

今日の設計

・イベントエディタ製作中

相変わらず。wxWidgetsならばSDLやOpenGLと一緒に使うための情報がいろいろあったので、昨日の失敗にめげずに何度も試してみた。公式な情報と同じ手順でやったり燃してみたのだが、結局ことごとく同じエラーで通らずついに断念。

原因として考えられるのは、D1.0系列だからか、Vistaだからか、D以外の環境が入っていてそれが影響しているのか、TangoではなくPhobosを使っているからなのか。

で、結局Dflを使って製作を継続中。だいぶ使い方がわかってきて、APIリファレンスも発見したので調子が乗ってきた。でも結構時間がかかっている。

 

今日の日記は試しにWindows Live Writerで投稿してみる。

2009/01/10

今日のGUI

・弾幕試作
・復讐イベントエディタ製作中
なんとなく響きだけで三十二層式洗濯機というものを作ってみた。結果は弾の密度が濃すぎてどうにもならなかった無念。でも見た目が結構綺麗なので実用にならないものか。

復讐のイベントエディタを結局Dflを使って作ってみているところ。D専用に作られているだけあってビルドに失敗するようなことはないのだがGUIエディタの機能が十分とはいえないので結構手書きしている。まぁ、それほど複雑なことをやるわけでもないので問題はなさそう。

このごろは弾幕書いたり復讐のシステム考えて実装したりするのが楽しいのだが、そのせいで物理ゲーム製作に手をつけられない。

2009/01/09

今日の発狂

・隠しボス弾幕完成
もはやめちゃくちゃに。最終的には三層式洗濯機などという意味不明なものまで出している。最も最初の洗濯機の時点ですでに殺されるので大丈夫。避けることを考えて作らない弾幕というのは、もはや爽快感がある。

復讐のイベントエディタを作ろうと思ってwxWidgetを調べ始めた。それでサンプルを動かしてみようとしたのだがリンカがうまく行かない。ファイルが多いのでその問題を解決するのも大変。

2008/12/22

今日の箱

・ゲーム作成
http://masa128.okitsune.com/のGameの「猫~」。3時間で作成した1分パズルゲーム。公開するのにいろいろライセンスがややこしくていやになった。結局この形でいいのかどうか。使うライブラリ数もう少し絞ったほうが楽かもしれない。DLLも何か作るために数メガ配布するのは大変なのでDLLやライセンスをパックとして別に配るべきだと思った。

蘇生は中ボスの弾幕を3つ考えた。でも箱猫で何か疲れたので実装していない。ボス戦も同じく。

今日はノルマを完全に達成していない。休日でないと作業をするのは大変だと実感。明日はボスと中ボス両方の完成がノルマ。

D言語でC++のクラスライブラリを使えると世界が大きく広がると思うのだが、どれだけ大変なのかがやはり問題だと思う。

2008/12/19

今日の整備

・引越し大方完了
・D講座完成
新ウェブサイトへの引越しがひとまず完了。もともと内容なんてほとんどなかったから楽だった。これからは内容の増強をしていくことになる。
D言語講座も書き終えた。開発環境の組み方とDLLの使い方に絞って書いて、後は他のところを参照してくださいという形。校正し次第公開予定。

今日はノルマを達成。だがプログラムはまったく書いていない。明日のノルマは蘇生の弾幕2つ作成。弾幕は思い浮かべば作れるが浮かばないとどうにもならないのでノルマを作りにくい。弾幕が浮かばなかった場合は全方位STGで敵を出すところまで作りたい。

2008/12/18

今日の再引越し

・移転先変更
・D関連情報まとめ中
fc2について、いろいろと調べたところフレーム周りの問題があってユーザーにかなり叩かれていて、fc2でフレームを使うのを断念。そこで、今度はninjaに登録して作ったのがhttp://masa128.okitsune.com/
こっちは問題があまり発生していないそうだが広告は付く。こちらで何か問題が起きなければninjaを使っていくことにする。

D講座執筆中。書いていてどこまで書くのがいいのかわからなくなってきている。情報源とサンプルコードが載っていれば十分だろうとは思うが。

それで、今日のノルマとしていたD講座の完成はならなかったわけだが、その代わりに年賀状を作った。ノルマを達成せずに他のことをやるというのはOKなのだろうか、社会主義的に。明日のノルマは今度こそD講座の完成と、ウェブサイトの引越しを完了させる、

2008/12/13

今日の海神

・IDE探し
昨日はZeusがいいといっていたが、今度はPoseidonを見直した。安定版として出ているバージョンを以前入れて、その使えなさで即座に捨てたが、開発中の最新版を試したら全く別物にまで化けていた。
プロジェクト管理機能がそれなりにあって、デバッガが動かせて、入力補完機能も今まで見てきたもので最高の機能になっていた。それでいて起動も早い。且つ日本語に標準対応。コンパイラの設定も結構お手軽。ショートカットキーの編集も自由。さすがDユーザーが作っていることはある。

この頃の自分を少し自己分析。記憶能力と引き換えに計算能力が落ちて、単純な四則演算が遅くなったり三角関数を間違えたりするようになった。思考能力はわずかに上昇している模様。弾避けにおいては、パターン化能力が伸びたが決めボム意外にまともにボムが撃てなくなって気合避けしようという意志が薄れている。総合的に見ると、弾避け能力は大幅に向上している。これが、試験による一時的な変調なのかどうか。弾避け能力向上はありがたいが三角関数との仲たがいはよろしくない。

2008/12/12

今日のゼウス

・開発環境探し
以前目星をつけておいた開発環境を実際に試してみた。結果、宣伝文句から本命と考えていたUNAEditorは起動が遅く、なんだかよくわからなかったのでやめ。それで、新しく試してみたZeus for Windowsというのがなかなかいい感じ。
起動のたびに購入のウィンドウが出てきて鬱陶しいが、メモリ量でごり押し(=常時起動)すれば気にならない。D言語の文法を完全にサポートしていて、デバッガも分かりやすそうな形で使える。Phobosの内容のオートコンプリートが出来て、関数の引数とかも表示してくれる。多分同じやり方で自分の書いたコードでも出来る。まだプロジェクト管理の周辺の設定が出来ていないが、多分何とかなる。
暫くはこれを使っていようと思う。

それと、GUIの開発環境のEntice Designer+DFL がなかなか興味深い。まだ使っていないがWxSmithよりもお手軽そう。もっとも最近ではそういったフォームアプリケーションをほとんど作っていないからあまり使う機会はない。

2008/12/09

今日の加算

・レーザーグラフィックあれこれ
・D言語IDE模索
毎日更新がそろそろきつくなってきた今日この頃。
思うところがあったのでレーザーのグラフィックの描画方法を変えてみた。加算合成にして、明るさを感じられるようになったと思う。
それと、D言語関係のことを一回まとめようと思っていて、IDEについて少し調べなおしてみた。主に入力補完機能周り。手始めに既に入れてあるPoseidonを動かしてみた。どうやら同じファイル内の関数の補完は出来るようだがimportしているファイルの関数までは無理のよう。あと、ショートカットキーの設定が自由なようであまり自由ではなかった。結論としてCode::Blocksのほうが使いやすそう。
他にも暇が出来たら試したい。

3Dの飛行機系のSTGを作りたいと少し思ったがあまり興味を広げすぎると収拾がつかなくなるので止めておく。

2008/11/26

今日の見本

・弾幕+D+SDL+OpenGLサンプル作成中
講座を書くので、3本の講座を纏めて一つのサンプルプログラムで済まそうという魂胆。分かりやすさと多彩な文法の紹介との両立が難しめ。
foreach文は、intの配列なんかを扱う場合、foreach(i;number)という形で書いていたのだが、この書き方だとiに数値を代入してもnumberの方に反映されないということに気がついた。正しくはforeach(ref i;number)と書かないといけない。クラスは元々参照渡しなので大丈夫。for文をポインタでまわすのと同じように考えて使っていたら思わぬミスを生む。

2008/11/23

今日の縮小

・縮小機製作中
前見つけたものでは透過色を思い通りに処理できなさそうだったので自作することにした。ピクセルの色を取得するのが意外と大変だった。二次元配列を一次元のポインタにするのがややこしい。
あとはテンプレートの文法を見てみたり。ただゲームを作るぶんには使わないと思う。

2008/11/09

今日の二次元

・マップファイル読み書き作成
まずはマップ機能から作るということで、マップファイルの読み書きを作成した。ファイルを開くときの設定を間違えていて30分詰まり、動的配列の長さをのばした後クラスのコンストラクタを呼び忘れて1時間詰まった。
SDLを使いながらメニューバーなどのGUI環境の使い方を知らないのでエディット画面以外をCUIで作っている。WxWidgetでも勉強するのがいいかも。
D言語、というよりPhobosの関数を使ってCUIアプリケーションを作るときに引っかかった点があったので一つ。
文字列を読むときなどにC言語で言うscanf関数としてPhobosのreadln関数を使っているのだが、同じように使うと、readlnでは読み込んだ一行に改行文字(Windowsでは\n)が含まれている。これで得た文字列をそのまま使うと上手く行かないので、文字列(char[]型)の最後の一文字を消してから使わないといけない。

300×100の二次元配列というと軽く感じるが実際には3万ある。3万ものオブジェクトをGCに管理させると突然動きが止まったりしそうで怖いので、自力でメモリ管理している。あとこの配列をファイルに書き出すとintegerの配列でも100KBぐらいに届く。二次元恐ろしや。

イベントの管理にSQLiteを使ってみようと思い、データベースを作ってみているが使い方が良く分からない。OpenOffice Baseも試したが分からない。データベースの基礎ぐらいは勉強しておかないといけないらしい。

2008/11/03

今日のトンネル

・デバッガ使用成功
・Re:Action進行
Code::BlocksでのDdbgの使用に成功。デバッガを指定するところに、ddbg.exeではなくもう一つのバッチファイルの方を指定すると使えるようになる。その際、ファイルを選択するダイアログではExeファイルしか指定できないようになっていて、ファイル名を手書きで指定するのがミソ。使ってみた感じ、Descentから使ったときよりも使いやすく感じたが、何故かSDLの初期化が異様に遅くなる。

乱数を使いたかったので、ドキュメントを参考にしてやったら何故か未定義と出る。良く見れば使っているDMDのバージョンが1.0系列で、使おうと思っていた乱数の機能はDMD2.0系列からのサポートだった。そこで、2.0を入れてコンパイルして、最初に文字列がconstであることに引っかかった。これはキャストを使って解決したが、今度はOpenGLのリンクでずっと文句を言い続けた。インポートヘッダを書き直したり、インポートライブラリを作り直したりしてリンクが通ったと思えば、変数を使うと変なタイミングで例外が出て、OpenGLの関数を使うと確実に落ちる。
色々試したが上手く行かなかったので諦めて1.0の乱数を使っている。マルチスレッドを使わない限りは大きな問題が発生することはないそうなので妥協。1.0に戻すとき、ライブラリファイルを変えたまま戻し忘れていたせいでOpenGLの機嫌を損ねてその原因の究明にも時間がかかった。

なんだかんだあってD1.0でRe:Actionの開発を進行。仕様書を書いて仕様を固め、その実装に入った。現在敵を沢山出して動かすまで。ランダムの関数の戻り値がuintだったことで微妙に詰まったり。
ゲームの救済システムにトンネル効果が登場予定となった。トンネル効果が意味を持つスケールよりも明らかに大きすぎるのだが、トンネル効果と呼ぶのが一番しっくり来る。
Re:Actionの完成目標は今月20日に設定。