自分のスキルでご飯食べられるといいなぁ

というわけで、これ(http://headlines.yahoo.co.jp/hl?a=20100404-00000003-zdn_ep-sci)に挑戦してみました。
実時間は3時間くらいかかったけど、合間に別のことやったりしたから実際は1時間半くらい。
簡単にソースの解説を置いておくと、

  • yaku構造体に面子を木構造で入れていって、最後に木を解体しながら出力してる感じ
    • 本当は構造体の名前はyakuじゃなくてmentsuにすべきだったけど、コーディング終わってから気づいた
  • 333345みたいな牌のときに、(333)(345)と(345)(333)と二通り出ないように、刻子と頭は前の面子の最初の要素と異なっているか確認するようにした
    • (33)(33)とか(33)[33]とかありえないから考えなくていいし。
  • 七対子って、同じ牌4子は成立しないらしいね。プログラム終わってから気づいたから直してないけど
  • "atamable"(頭にすることが出来るか)って変数名が頭悪そうな感じでちょっと気に入ってる
  • 九蓮宝燈ってちゃんと役の形になってたんだね……

実行結果とソースを下のほうにぺたり。
//あと、待ちを出力するプログラム、って当たり牌を表示するプログラムのことだろjk……。

続きを読む

エイプリルフール(事後報告)

来年まで公開しないでおいて、来年のエイプリルフールのネタとして使おうかどうか迷ってたらこんなにゆっくりしてしまったよ!
身内向けにエイプリルフールなプログラムを作ったので、一般公開。前日に6時間ほどで作ったものなので、完成度低いです。経緯としては、

前に友人とウィンドウをブロックに見立てたテトリスの話をしたことを、エイプリルフールのネタとして作ることを思いつく
↓
BGMとして、Windowsの効果音を使用したコロブチカに挑戦するも、あきらめる。計画凍結(3/26くらい)
↓
ちょっと暇だったので、突発的に製作開始。BGMなし(3/31 18時くらい)
↓
ちょっと遅刻しつつ完成(4/1 1時くらい)

こういう感じです。本当なら次に落ちてくるブロックや、スコア表示もする予定だったけど……。短時間での突貫作業なので、ソースが大変なことになっててもう見返したくないです。
バイナリはこちらスクリーンショットこんなかんじ
今年は諸事情によりだいぶ暇になるので、今度こそ何かしらゲーム作りたいです。

もはや休みにすら更新しない(略

気がついたら夏休み終わって大学始まったよ!

この夏休みを思い返すと、Vistaの再インストールぐらいしかやったことを思い出せない。あとサークルのちょこっとしたものを修正したくらいか。

これからは大学始まるし、ちゃんと有意義に時間を過ごさなくては。なんて明日1限から授業がある予定なのにこんな時間まで起きてる夏休み感覚が抜けていない自分が言ってみる。

prxモジュールを作ってAPIをフックしたい(4)

前回からかなり時間がたってるから、過去の記事を読み返していろいろ思い出すと、フックする予定の関数が内部でsyscall呼んでるせいでジャンプ先がわからなくて、フック出来ねーよ!ってことだった。syscallで発生した例外でジャンプする先がわからなくて諦めたわけだけど、"PSP Exception Vector"とか入れてググってたら、こんなページが出てきた(yet another PlayStationPortable Documentation)。このドキュメントのCOP0のところを読んでると、COP0のコントロールレジスタにsyscallの例外ベクトルの位置があるらしい。MIPSのドキュメントを読んでもそんなこと書いてなかったので、たぶんPSPのCPU独自の設計なんだろう。というか、このレジスタ書きかえれば例外ベクトルの位置変わるんじゃね、とかいろいろ思ったけど自分で例外処理するのも大変そうなので、別の方法を探すことにする。
syscallされた実際の関数がどう処理されるのか、ってことが知りたくていろいろ漁ってると、PS2DEVにこんなドキュメントが置いてあった(http://ps2dev.org/psp/Tutorials/PSP_Modules,_Exports,_Imports_and_Patches)。PSPのモジュールの作り方や、モジュールがどう配置されてるか、どうやってパッチを当てるか、みたいな事が英語で書いてあるらしい。がんばって読んで、わかったことにしとこう……。

休みにしか更新しない疑惑

前回更新が夏休みの時の、優先席の記事ってどれだけ書いてないんだよ……。
気がついたらサークルの春合宿も終わり、もう春休みも半分ほど終わってしまった。ちゃんと休み中にやることを考えておかないと。当面の目標は、RemoteJoyみたいな感じでUSB経由でPSPの音を出すプラグインを作ること。せっかく予約して買ったのに、音が出ないアイマスなんてアイマスじゃないからなぁ……。

縦横比を固定したままウィンドウ(Form)を拡大縮小したい

タイトル通り、縦横比を保ったまま、.NETのFormのサイズを変更したかった。で、FormのResizeイベントのドキュメントを見てみると、Formを正方形に保つサンプルが載ってた。それを参考に、FormのClientSizeを4:3に保つコードを書いてみた。

const double fixedRate = (double)4 / 3;
private void Form1_Resize(object sender, EventArgs e) {
    ClientSize = new Size((int)(fixedRate * ClientSize.Height + 0.5),ClientSize.Height);
}

これだけで4:3に固定されたよ!やったね!と言いたい所だけど、これだけだとまずい。まず、サイズが変わるたびにちらつく。ついでに、角とか辺とかでサイズ変更すると挙動が若干怪しい。まぁ、挙動はちゃんと書けばどうにかなるような気はするが、SuspendLayoutとか入れたりしたけどちらつきはどうにもならなかった。

続きを読む

合宿から帰ってきた

3日ほど合宿に行ってきた。今までは4日間だったんだけど、さすがに人数が多すぎるので今年からは前半、後半と分ける事になった。向こうでは人狼とかのアナログゲームやったり、いろいろ。
前半後半に分けたといってもまだ人数は多いので、寝る場所は十分に確保されてなかったりするので、少し寝不足だったから、帰ってきてから少しうつらうつらしてたらネットが繋がらなくなった。常時接続前提のいまどきにダイヤルアップしていろいろ調べたりしたけど、ルータを5、6回くらい再起動したらなぜか繋がった。不思議だ。
合宿行ってる間に録りためたものを見ないと。