カレンダー最新コメント最新記事(03/29)
(11/09)
(06/29)
(02/10)
(09/19) 最新トラックバックプロフィールブログ内検索最古記事アクセス解析忍者アナライズ |
ブログ日記のようなものPAGE | 267 268 269 270 271 272 273 274 275 276 277 | ADMIN | WRITE 2009.08.22 Sat 21:35:44 自力って大変。今日は。
朝はぐったり。 昼からプログラミング。 あ、プログラムより先にグラフィック作らんと・・・(今思い出した) で。プログラミングしてる内容ですが。 自作printfに挑戦中。 いや、DSで文字列表示させるためにプログラム組んでるけど、 変数渡したらのまま表示してくれるって便利じゃね? 「残り○○(数字)」とかで、数を変数に入れててさ。 "残り%d" で表示できるようになったら・・・うん。なんか幸せ。 というわけで。いろいろ調べてみました。 はてさて。printfの特徴といえば・・・ printf( "%d", a ); も printf( "%d%d%d", a, b, c ); もできちゃうこと。引数に制限個数なんかないはず。 どうやら本来のprintfは可変引数のようです。 ・・・なにそれ。 ようはいくらでも変数渡せちゃうわけです。 そんな関数自作できるんかぁ?? なんと。できるようです。 int printf( const char* format, ... ) こんな感じで引数書いて・・・ va_list list; で引数を参照するためのva_list型の変数(list)を用意して・・・ va_start( list, format ); で「今からformatより後ろの引数使います」的な宣言して・・・ va_arg( list, 型名 ) で引数の中を指定した型(intとかdoubleとか)で取り出して・・・ va_end( list ); で「使い終わったよ」的宣言をして終了。 va_arg( list, 型名 )は使うと次の引数から参照するようになるらしくって、 1回目のva_argで1個目の引数、2回目のva_argで2個目の引数ができてしまう。 つまり。 int Ival = va_arg( list, int ); // ←1個目の引数をint型で参照 double Bval = va_arg( list, double ); // ←2個目の引数をdouble型で参照 とかとか。 ただ、これをしようと思ったら #include が必要らしい。これDSでも使えんのかぁ〜? まぁできなかったら諦めるけどね。うむ。 とりあえず現状は文字列を前から参照して、 %がくるとint型で表示して、他の文字はそのまま表示する状態。 そう。intの内容をそのまま表示するようにするのも結構大変なのよね。 だって文字の'0'は0じゃないんだもん。48なんだもん。 困るわぁ。仕方ないけど。でも実はsprintfとかitoa( int )で数字の0を'0'に直して くれたりするらしいんだけど、非標準だってさ。多分使えないなぁ。 ここから他の型も参照できるようにせねば。むむんむん。 PR 2009.08.21 Fri 22:32:27 壁だと思っていた場所に壁はなかったが・・・昨日の続き。
フォントの作成について。 「この際ライブラリとして使えるようなプログラム書いてくれればいいよ」 なんて言われてしまったわけですが。 サンプルをいじってたら表示できてしまった。 ただ厄介なことに、うまく文字解析ができてなくて文字化け文字化け。 こりゃあなんとかせんと使いもんにならん・・・ ということで。 フォント表示というよりひたすら文字列解析。 これがもう厄介すぎる。 1バイト文字と2バイト文字の識別も大変なのに・・・ フォントデータには1バイト文字が含まれてない。 つまり。フォントデータを書き足すか、1バイト文字を対応する 2バイト文字(aならa、1なら1)に置き換えるか、である。 もともとあったフォントデータを使ってるから、書き足し方まではわからない。 かといって、対応させていっても表示できない文字が出てきたら無視するしかない。 無理矢理別の形式でフォントを用意する、といった方法もなくはないけど・・・ そのためだけに新しくファイルをロードしていいものか。 むむむ。 土日の間に悩みますか・・・ 2009.08.20 Thu 22:01:02 といいつつ自滅だったりする無理難題ふっかけられたああぁああああ!!!! 「すみません。フォントってどうやって作るんですか?」 「あ〜・・・ちょっと待ってね」 そう言い残し、自分のパソコンをあさり始める担当の方。 数分後。 「このソースのね・・・ここの部分なんだけどね・・・」 どうやら場限りで文字を表示するプログラムを書いた時期があったらしく、 そのソースを見せて頂いた。さすがその場限り。 文字と関係ない情報まで処理していらっしゃる。 「これを改造すれば表示はできるはずなんやけど・・・」 「この際ライブラリとして使えるようなプログラム書いてくれればいいよ」 「ファイル名をこうしておいてくれればみんな使えるし」 ・・・ということは。 そう。 『今から自分で書くプログラムもその場限りのもの』ではなく、 『次に使えるように使いやすいプログラムで』である。 どういうことなのか。 つまり。 いろんな人に使われるプログラムである、ということだ。 他の人が読めるソースである、ということだ。 ただ何も考えずに『できた』ではいけない。 自分が何をしているのか理解していないと、説明文すら書き足せない。 おかしいなぁ。 通信相手の名前を表示したいだけなのに。 DSに保存できる自分の名前には漢字なんて入ってないのに。 こんなに文字使わないのに。 そんなに多くないから自分でフォントの画像作ろうと思ってたのに。 前に使っていたフォントのデータを使うわけですか・・・ こんな。 こんな。 あぁ。 通信だけでも大変なのに。 死ねる。 でもこれができるようになったら、かなりプログラマっぽい気がする。 どうせインターンなんだ。 成績がつくわけじゃない。お金をもらって働いてるわけじゃない。 本職の方からいろいろ学べるわけだし。 当たって砕け散ればいいよ。ホント。 2009.08.19 Wed 22:03:35 お世話になってます。かなり。今日は。
午前中に昨日作ったリストのデバッグ。 なぜか先頭のdeleteだけが上手くいかないのです。 どうやらポインタの先頭をリストをnewしたクラスが持ってる状態で、 ポインタ先をdeleteするから、クラスがポインタの先頭から参照しようとすると 『変なポインターをdeleteすんじゃねぇよ!!』と表示されてしまうのです。 いや、ガチでこういう表現で表示されます。 会社にこういうノリの方がいらっしゃるようで。 はじめてこれが表示されたとき「ぶううぅぅぅッ!!!」と 吹き出したしてしまったのはいうまでもなく(笑) で、結局直らず。 いや、帰りに解決案思いついたんだけどね。 でもやってみないとわからんか・・・ 今日はライブラリについてわからないことを片っ端から書き出して、 いつも教えて頂いている方に聞きまくってしまった。 なんか表示されるんですけど、これどうなってるんですか? これってどういう意味ですか?? こういうことってできますか??? うんたらかんたら。 3時あたりから7時ぐらいまで質問大会。 お忙しい中申し訳ない・・・ でもまぁ大体のことは聞いたので、また自力研究に勤しむのであります。 不安要素たっぷり。がう。 2009.08.18 Tue 22:09:33 順調ほど怖いものはない昨日。
インターン先でお世話になっている方が。 「大量のスプライトを管理するなら配列よりリスト構造にした方が便利やで」 「リストわかる?ポインタで次のヤツ指してポインタで次のヤツ指して・・・」 と、おっしゃるので。 やってみました。 その言葉だけで。 どういう意味? ようは、自力でリストを作ったわけです。 そりゃあ本来ならその言葉だけじゃわからんのだけども・・・ 「次のヤツを指す・・・?リスト・・・?どっかでやったぞ・・・??」 脳裏をよぎる『NODE(ノード)』という単語。 次のヤツを指して、次のヤツでメソッド実行。 前のヤツを指して、前のヤツでメソッド実行。 条件に当てはまったら、そのノードを消したり呼び出し元に返したり。 そう。講義で近いことをやったことがあるわけで。 あのとき使った言語はJavaだったはず・・・ Cで果たしてできるのか!? 無謀にもやってみた。当たって砕けるつもりで。 えっと。 次に指してるヤツがいる間は、次のヤツのメソッドを実行して、 いなくなったらそれが先頭だから、新しく追加。 新しく作ったヤツは前のヤツを指すように設定しなければ。 条件によって処理を変えるときは・・・ 条件に当てはまらなかったら、次のヤツのメソッドを実行するんだけど、 次のヤツすらいなかったら条件に当てはまるヤツがいないってことだから、 この時点で終了させていいわけで・・・ もし条件に当てはまったら、ソイツを返すなり、ソイツを消すなり・・・ 消すときは前のヤツから見て次のヤツが消えるってことだから、 ちゃんと指してる先を設定し直して・・・ うんたらかんたらうんたらかんたら。 朝から奮闘し始めて、昼飯喰って・・・2時頃。 完成。 リストに追加、できます。 条件を満たしたスプライトを参照、できます。 リストから削除、できます。 おぉ。 妥協せざる負えなくなるか、丸一日かかるかと思いきや、できてしまった。 ちょっとウハる。 そのまま調子こいて画面の切り換えをしてみる。 Lボタンでこうして・・・Rボタンでこうして・・・ いや、これはさすがにできんだろ。無茶感たっぷり。 そう思いながらもコンパイル。 ・・・あ。 一発目のコンパイルで通りやがった。 しかもちゃんとLRで画面切り替わりやがった。 ちょ、ありえん。 妙にスムーズに事が進んで、逆に心配になってしまった一日であった。 |