“RUN” それは魔法の言葉

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

249.HSPでゲームを作ろう:たまねとりっぷ! その22

登録/編集…は、面倒なので後回しww。削除の処理を作る。

削除で行う処理は、基本1つだけ。該当プレイヤーのDBのレコードに対して、Update文でDelFlgを1に変更する。
今までの関連レコード群は、わかる人なら復旧できるように削除せずにそのまま残す。
プレイデータや、設定系のテーブルの情報も、そのまま残すことにする。

サブメニューを選択した直後に、いきなり削除するのは乱暴なので、メッセージを表示して、最終確認を行うようにする。

んで、あとはSQL実行すればおしまいー。ってわけにはいかないのだった…

削除の処理は単純なのだが、いろいろと条件によって追加でやらないといけないことがある。

1つ目は、現在選択されているプレイヤーであるか。
選択中のプレイヤーを削除したら、別の残ったプレイヤーを選択プレイヤーに切り替える処理が必要。

2つ目は、最後のプレイヤーであるか。
最後のプレイヤーだった場合、削除したあとに、新規プレイヤーの「たまね」を作成して、選択プレイヤーにする。

これらを踏まえて作った処理がこちら。

*delUser ;プレイヤー削除
cmdmes="ぷれいやー:"+pname(csrpos)+"をさくじょしました"
delUserID=uid(csrpos) ;削除するユーザID

cuid=0
repeat length(uid):cuid+=uid(cnt):loop
if cuid=delUserID { ;最後の1人を消しているか
  sqlstr="INSERT INTO UserTable (UserName) VALUES ('たまね')"
  sql_q sqlstr
  ;最後にinsertしたユーザIDをゲット
  sqlstr="SELECT * FROM UserTable where rowid=last_insert_rowid()"
  sql_q sqlstr
  UserID=sql_i("ID")
  cmdmes="ぷれいやー:"+pname(csrpos)+"をさくじょ、「たまね」をつくりました"
}

;プレイヤーの削除フラグをUpdate
sqlstr="update UserTable SET DelFlg=1 "
sqlstr=sqlstr+"Where ID="+delUserID
sql_q sqlstr

uid(csrpos)=0:pname(csrpos)="未登録"
if delUserID=UserID {;選択中のプレイヤーなら
  repeat length(uid)
    if uid(cnt)>0 and uid(cnt)!=delUserID {
      UserID=uid(cnt):break
    }
  loop
}
gosub *selUserUpdate_SQL ;選択プレイヤーのDB更新
gosub *make_player_list ;プレイヤー一覧更新

return

ここで、選択中プレイヤーの更新と、プレイヤーの一覧更新は、共通ロジックとしてルーチン化し、呼び出すことにした。
これで、プレイヤーの削除ができるようになった。

さて、最後に残した面倒な奴を作り始めるか…