Top > OOobbs3 > 27

** [[OOobbs3/27]] [#i8a6fd59]
-''サマリ'': 落ち物ゲー
-''環境'': Calc
-''状態'': 投稿
-''投稿者'': [[はにゃ?]]
-''投稿日'': 2010-10-05 (火) 02:04:34
*** 質問 [#j1f183d4]
Calc のマクロで速度を向上させる目的で試しに落ち物ゲーを作成してみました。面倒なので更新しません・・・と書きましたが、音を付けてみました。

- &ref(T3.ods);

-- 右キー: 右移動
-- 左キー: 左移動
-- 下キー: 下へ移動
-- D キー: 右回転
-- A キー: 左回転
-- Esc キー: 終了

セルの背景色で色分けしていますが、直接色をセルに設定しているのではなく、条件付き書式で色を変更しています。マクロで条件付き書式を設定するといくつでも設定できるため、複数のスタイルで色を切り替えることができます。
セルの値を setDataArray メソッドで設定するのは比較的動作が早いので、色が多い場合には有利かもしれません。

下記の設定で動作速度向上を目指しています。
 oDoc = ThisComponent
 oDoc.disableSetModified() ' 変更ステータスの変更を不可に
 oDoc.enableAutomaticCalculation(False) ' 自動計算無効
 oDoc.IsAdjustHeightEnabled = False ' セルの高さ自動調整を無効、ステータスバーの更新表示を抑制
 oDoc.IsUndoEnabled = False ' やり直しを無効に、ほとんど効果なし?

IsAdjustHeightEnabled を False に設定すると、背景色設定時の速度が向上します、スタイルでの適用でも効果あり。値を設定するような操作には効果がありません。
効果のありそうな項目は以下のものです。
- 並べかえ
- フィル
- リンク更新
- セルの結合
- スタイル適用
- 文字変換
- セルの内容の消去
- オプションの変更
- コピー/貼り付け
- setDataArray/setFormulaArray

効果音の再生は [[OOoBasic/Generic/MultiMedia]] 参照。
*** バグ [#g18dbff2]
- T を最上部で回転させようとするとエラーになることがある
- J を右端で、同上

GetSystemTicks について。

- Windows 環境では GetTickCount 関数で、システムが起動してからの経過時間を msec で取得、unsigned long 型に変換してから返します。49 日程度でオーバーフロー。
- Windows と OS2 以外の環境では time.h の gettimeofday 関数を利用して時刻を取得、usec に変換した後に fmod 関数 で unsigned long の最大値で割った余りを返します。
- Windows と OS2 以外の環境では time.h の gettimeofday 関数を利用して時刻を取得、msec に変換した後に fmod 関数 で unsigned long の最大値で割った余りを返します。

OOo Basic には unsigned long 型はなく、GetSystemTicks 関数の帰り値は Long 型で定義されているので、どちらの場合にも long 型の範囲を超えるとオーバーフローして負の値の範囲になります。受け取る変数の型が問題ではなく、先に long に変換されているので・・・。

コレを埋めるには・・・。
*** 回答 [#j80ac8f8]
- DrawNextBoard 関数の一行目でランタイムエラーが発生するのは環境の問題でしょうか? -- 七篠 &new{2010-10-09 (Sat) 21:52:03};
- それよりも GetSystemTicks の関係上動かなく・・・。Windows 上では問題なく動作しますが、Sound テーマがなくてエラーになりますね。 -- はにゃ? &new{2010-10-10 (日) 17:19:44};
- ギャラリ関連を修正したものをおいておきました。DrawNextBoard は一行しか内容がありませんが、その中で利用している setDataArray 関数がランタイムエラーを吐くのは、セル範囲のサイズと設定するデータの配列のサイズが異なるときです。私の環境では問題なく動きます。WinXP OOo 3.2.1、Linux OOo 3.2.1。-- はにゃ? &new{2010-10-10 (日) 18:46:19};
- 読み取り専用で開いて実行するとランタイムエラーになりますね。 -- はにゃ? &new{2010-10-10 (日) 19:06:28};
- T3動きました。 L字ブロックを左端で回転させたら「110:9: 定義された範囲外のインデックス。」というメッセージボックスがでました。 -- 七篠 &new{2010-10-10 (Sun) 21:13:55};

#comment
*** 感想,コメント,メモ [#h2b5d49b]

#comment

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes