“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

154.HSPでゲームを作ろう:培養臼Ex その1

データベースを使用する目途も付いたので、培養臼 エクストラバージョン(培養臼Ex)の作成に取り掛かることにした。
まずは、ハイスコアランキングの作成からスタート。

データベース周りは、SQLiteのテストのエントリーで書いた通り。
coro3.hatenablog.jp
coro3.hatenablog.jp

少し変更したのは、デフォルトのランキングをInsertする部分。
たった10レコードをInsertするだけなので、トランザクション処理は不要と思っていたが、異様に遅いw
ということで、トランザクション処理することにした。

トランザクションとは、データベースに変更を加える命令、Insert、Update、Deleteをまとめて実行して、確定(もしくは破棄)する処理のこと。
本来は、複数テーブルのレコードの整合性を保つためだったり、処理をキャンセルしたときに、不要なデータを登録しないようにするためのもの。

データベース、プログラム言語によって、書き方や実行の仕方が違うが、スクレレでは、Insert文をループで実行する前後に、おまじないのSQLsql_q命令で実行するだけ。
こんな感じ。

;初期ランキングデータ作成
sql_q "BEGIN TRANSACTION"
repeat 10
  sqlstr="INSERT INTO scorelist (score,score_name,stage,rec_date) VALUES ("+str(10000*(cnt+1))+",'CR3','"+str(cnt+1)+"',datetime('now','localtime'))"
  sql_q sqlstr
loop
;コンフィグ初期値
sql_q "INSERT INTO config (clearstage,fullscr,bgmvol,sevol) VALUES (0,0,50,50)"
sql_q "COMMIT TRANSACTION"

BEGIN TRANSACTIONは、ここからひとまとまりの処理が始まるよという宣言。
Insert文などを実行したら、最後に、COMMIT TRANSACTIONを実行する。
COMMIT(コミット)が、データベースに行った処理を、確定させること。問題があったり、キャンセルしたければ、ロールバックという命令があり、実行するとそれまでのデータベースへの変更をなかったことにできる。

このコミット処理が時間かかるのね。トランザクションをやらなければ、1つのSQL文を実行するたびに自動的にコミットされている。
だから、処理するレコード数が多くなると、いちいちコミットしているから遅くなる。
ただ、自分の過去の経験では、10レコードぐらいの連続Insertぐらいでは、そんなに差がなかったので要らないと思っていたけど、そんなに処理が速くないということが分かったのも収穫かな。

初期設定は以上。次は、実際のランキング作成に移る。