次はプレイした情報の記録と、その閲覧画面を作る。
プレイ情報の記録テーブルは、こんな感じで定義した。
| プライマリキー | ユーザID | プレイ日時 | 訪問国日時 |
| 国ID | 天気コード | 気温 | 湿度 |
| 曇り度合 | 風速 | 風向き | 旗本数 |
| スコア | 削除フラグ |
これをプレイが終了するたびに、INSERT文で、1レコード追加する。
ユーザIDは将来的に複数人の登録ができて、切り替えられるようにするために作成。今は固定で1をセットする。
sqlstr="INSERT INTO PlayDataTable (UserID,PlayDate,LocalDate,CountryID,WeatherCode,AirTemp,Humidity,CloudCover,WindSpeed,WindDir,GetFlagNum,Score,DelFlg) VALUES (" sqlstr=sqlstr+Str(UserID)+"," sqlstr=sqlstr+"datetime('now','localtime')," sqlstr=sqlstr+"'"+LocalTime+"'," sqlstr=sqlstr+Str(CountryID)+"," sqlstr=sqlstr+Str(WeatherCode)+"," sqlstr=sqlstr+Str(AirTemp)+"," sqlstr=sqlstr+Str(Humidity)+"," sqlstr=sqlstr+Str(CloudCover)+"," sqlstr=sqlstr+Str(WindSpeedconv)+"," sqlstr=sqlstr+"'"+WindDirName+"'," sqlstr=sqlstr+Str(flagnum)+"," sqlstr=sqlstr+Str(Score)+"," sqlstr=sqlstr+"0)"
次はプレイデータを閲覧する画面を作る。
以前、「培養臼Ex」で作ったものと、基本は一緒。違うのは件数が増えたら、ページを切り替えて見れるようにするところ。
このあたりは、昔やってたことがあるので、処理自体は簡単。
1ページあたり、10件表示して、最大100件、10ページにする。
SQLは、LIMITとOFFSETを使って、ページングするたびに10件ずつ取得する方法にした。
1回のSQL実行で、100レコードをまとめて取得して、配列変数に全部放りこむことも考えたが、SQLiteの性能とやらを見せてもらうことにしたw
あとは、左右のカーソルキーでページ切換、上下でレコードに移動、そして今回苦労してGoogleマップとにらめっこした成果の、ブラウザを開いて、Googleマップに地図を表示する機能を作った。
*show_recode_paging csrpos=0 ;現在のカーソル位置 if norecord=0 { sqlstr="select *,c.CountryName lCountryName,c.FlagFileName lFileName,c.MapLink lMap,u.UserName lUserName,w.WeatherName lWeatherName " sqlstr=sqlstr+"from PlayDataTable p " sqlstr=sqlstr+"join CountryTable c on p.CountryID=c.ID " sqlstr=sqlstr+"join UserTable u on p.UserID=u.ID " sqlstr=sqlstr+"join WeatherTable w on p.WeatherCode=w.WeatherCode " sqlstr=sqlstr+"Where u.DelFlg=0 and p.DelFlg=0 " sqlstr=sqlstr+"Order by p.id DESC LIMIT 10 OFFSET "+ lpage*10 sql_q sqlstr linec=stat dim l_PDate,linec dim l_LDate,linec dim l_CName,linec dim l_WInfo,linec dim l_WName,linec dim l_FlagNum,linec dim l_Score,linec dim l_MapLink,linec repeat linec lUserName=sql_v("lUserName") l_PDate(cnt)=sql_V("PlayDate") strrep l_PDate(cnt),"-","/" strrep l_PDate(cnt)," ","\n " l_PDate(cnt)=leftstr(l_PDate(cnt),21) l_LDate(cnt)=leftstr(sql_V("LocalDate"),10) l_CName(cnt)=leftstr(sql_V("lCountryName")+" ",32) l_WInfo(cnt)=leftstr(sql_V("lWeatherName")+" ",26)+"\n "+sql_V("AirTemp")+"℃ "+sql_V("WindDir")+" "+sql_V("WindSpeed")+"m/s"+" " l_MapLink(cnt)=sql_V("lMap") l_FlagNum(cnt)=sql_V("GetFlagNum") l_Score(cnt)=sql_V("Score") sql_next loop } *show_record redraw 0 picmes_mode mojix_size*1.5,mojiy_size*1.5 pos 0,0:celput 7 pos 450,10:picmes "ぷれいのきろく" picmes_mode mojix_size,mojiy_size picmes " ぷれいやー:"+lUserName if norecord=0 { picmes_mode mojix_size*0.65,mojiy_size*0.65,,3 pos 32,120 picmes "No. ぷれいしたひ こくめい てんこう とったはた てんすう" color $f6,$b7,$41 boxf 24,149+csrpos*64,1185,149+csrpos*64+42 repeat linec pos 32,150+cnt*64 picmes rightstr(" "+str(cnt+lpage*10+1),3),1 picmes " "+l_PDate(cnt),1 pos 260,150+cnt*64 picmes " "+l_CName(cnt),1 picmes " "+l_WInfo(cnt),1 pos 932,150+cnt*64 picmes " "+rightstr(" "+l_FlagNum(cnt),3)+"本",1 picmes " "+rightstr(" "+l_Score(cnt),6) loop picmes_mode mojix_size,mojiy_size } else { picmes_mode mojix_size*2.0,mojiy_size*2.0 pos 150,400:picmes "まだぷれいしていません" picmes_mode mojix_size,mojiy_size } picmes_mode mojix_size*0.65,mojiy_size*0.65,,3 pos 0,776:picmes"[↑][↓]せんたく [z]ぶらうざでちずひょうじ [←][→]ぺーじきりかえ [ESC]めにゅーにもどる" picmes_mode mojix_size,mojiy_size redraw 1 await 16 Stick key if norecord=0 { if key&1 : lpage-- : rFlg=1 if key&4 : lpage++ : rFlg=1 if key&2 : csrpos-- if key&8 : csrpos++ if key&2048 : exec l_MapLink(csrpos),16 ;ブラウザ起動(GoogleMap表示) } if key&128 { sql_close : goto *game_menu } lpage=limit(lpage,0,lpageMax-1) csrpos=limit(csrpos,0,linec-1) if rFlg=1 { rFlg=0 : goto *show_recode_paging } goto *show_record
こうしてできたのがこれ。



