laimen version 0.81 公開

laimen の version 0.81 を公開しました。

変更点はたくさんあるのですが、「ウィンドウの形状変更」や「ゲーム画面の変更(スコアなどを表示)」や「スコア画面の追加」や「スコア画面からのリプレイ再生」などが大きいんじゃないかと思います。得点の計算方式などが変わっているので、0.5のlaimen.iniは引き継がない方がいいと思います。

Download laimen-0.81.zip

急にスクリーンショットがとりたくなった

急にスクリーンショットがとりたくなったので、「デスクトップ(or最前面のウィンドウ)のスクリーンショットを取り、yyyymmdd_hhmmss.bmp の形式で保存するプログラム」を組んだ。

とったものを見たいわけではないのでとりっぱなし。PrintScreenに割り当ててもいいかなと思ったけど、不便になりそうなのでやめた。そういえば bitmap 操作はこれがはじめて。

俺ルール 「変数」

  1. スコープが小さくなるようにすべき
  2. 1→必要になったところで宣言すべき
  3. 複数の目的に使わないようにすべき
  4. 3→必要なら複数用意すべき
  5. 3→命名に注意すべき(使いたくならないような変数名に)

思いついた分だけ。

論理演算子

C言語では、論理演算子を使用する際に、被演算数の評価順序が左から右に固定されている。そして、その評価の途中で式の結果が確定した場合は、残りの評価は行われない。わかりにくいので例を示すと以下のようになる。

#include <stdio.h>
int f1(void){printf("f1\n"); return 0;}
int f2(void){printf("f2\n"); return 1;}
int main(void)
{
  if ( f1() && f2() ) {  // ここが説明の部分です。
    printf("true\n");
  } else {
    printf("false\n");
  }
  return 0;
}

このプログラムの結果は以下のようになる。

f1
false

f1() が偽(0)を返すとその時点で式の結果が偽で確定してしまうので、そのあと( f2() )は評価されません

この動作について「右側も評価する方が自然なんじゃないの。最適化の結果でこういう動作になるなら別だけど」という話を聞いて、どうなんだろうと思った。

プログラミング言語C第2版(2.12 優先度と評価順序)では「Cでは演算子の被演算数に対する評価順序は指定していない。(例外は, &&, ||, ?: と ','である。)」と書いてあった。C言語的にはごく自然な動作のようです。

私の記憶が正しければ、JavaでもPerlでも同じ動作だったと思うのだけど、右側まで評価されても安全に実行できるよう書いたほうがいいのかもしれない。

INI ファイルについての覚書

行頭の空白は無視する

行頭の空白は無視する。よって、次の三つの例は同じ。

    [Main]
IconMode=1

[Main]
IconMode=1

[Main]
  IconMode=1

以下、行頭の空白を削除したものとして書く。

セクション名の書き方

行頭が [ なら、次の文字から改行、または ] までをセクション名とする。セクション名は大文字小文字を区別しない。よって、次の四つの例は同じ。

[Main
IconMode=2

[Main]
IconMode=2

[main
IconMode=2

[mAin]
IconMode=2

セクション名のある行は、セクション名以降を無視する。

セクション名のある行は、セクション名以降を無視する。次の三つの例はどれも同じ。

[Main]
IconMode=1

[Main] [Main2]
IconMode=1

[Main] UseCenter=0
IconMode=1

キー名やコメントについてはまだ確認していないので、また次回。