• R/O
  • SSH
  • HTTPS

hyakutyping: コミット


コミットメタ情報

リビジョン397 (tree)
日時2010-05-02 21:12:09
作者satofumi

ログメッセージ

和歌の漢字などを修正

変更サマリ

差分

--- trunk/cpp_lua/typing_data_test.lua (revision 396)
+++ trunk/cpp_lua/typing_data_test.lua (revision 397)
@@ -29,7 +29,13 @@
2929 typing_data_add("D", 150)
3030 typing_data_lf(100, 150)
3131
32+typing_data_set_waka_id(3)
33+typing_data_add_string("123", 100)
34+typing_data_add("4", 150)
35+typing_data_lf(100, 150)
3236
37+
38+
3339 -- 平均値の取得
3440 start_sec, end_sec, miss_types = typing_data_average()
3541 print("start_sec: " .. string.format("%.2f", start_sec))
--- trunk/cpp_lua/scripts/db_local.lua (revision 396)
+++ trunk/cpp_lua/scripts/db_local.lua (revision 397)
@@ -4,12 +4,12 @@
44 -- $Id$
55
66 -- \todo 効率的な SQL の書き方を検討する
7+-- \todo API を見直す
78
89 require("lsqlite3")
910
1011
1112 local DB_Name = "savedata/local.mysql3"
12-
1313 local db_ = nil
1414
1515
@@ -16,8 +16,8 @@
1616 -- テーブルを初期化
1717 function db_local_create_table()
1818 return db_:exec[[
19- CREATE TABLE history (datetime, start_msec, type_speed, miss_types);
20- CREATE TABLE start_delay (waka_id, datetime, start_msec);
19+ CREATE TABLE history (datetime, start_sec, end_sec, miss_types);
20+ CREATE TABLE start_delay (waka_id, datetime, start_sec);
2121 ]]
2222 end
2323
@@ -25,7 +25,7 @@
2525 -- テーブルに初期データを格納
2626 function db_local_initialize_table()
2727
28- -- 最大の入力遅延を、1 時間で初期化する
28+ -- 最大の入力遅延を、1 時間(最大値)で初期化する
2929 db_:exec("BEGIN TRANSACTION")
3030 for i = 1, 100 do
3131 local insert_stmt =
@@ -67,14 +67,14 @@
6767
6868
6969 -- 和歌の入力情報を登録
70-function db_local_register_waka(waka_id, start_msec)
70+function db_local_register_waka(waka_id, start_sec)
7171 if db_ == nil then
7272 return
7373 end
7474
7575 local update_stmt =
76- db_:prepare("UPDATE start_delay SET datetime = datetime('now'), start_msec = ? WHERE waka_id = ?")
77- update_stmt:bind_values(start_msec, waka_id)
76+ db_:prepare("UPDATE start_delay SET datetime = datetime('now'), start_sec = ? WHERE waka_id = ?")
77+ update_stmt:bind_values(start_sec, waka_id)
7878 update_stmt:step()
7979 update_stmt:reset()
8080 end
@@ -81,62 +81,50 @@
8181
8282
8383 -- タイピング履歴の情報を登録
84-function db_local_register_history(start_msec, type_speed, miss_types)
84+function db_local_register_history(start_sec, end_sec, miss_types)
8585 if db_ == nil then
8686 return
8787 end
8888
8989 db_:exec[[
90- INSERT INTO history VALUES (datetime('now'), start_msec, type_speed, miss_types);
90+ INSERT INTO history VALUES (datetime('now'), start_sec, end_sec, miss_types);
9191 ]]
92+ local insert_stmt =
93+ db_:prepare("INSERT INTO history VALUES (datetime('now'), ?, ?, ?)")
94+ insert_stmt:bind_values(start_sec, end_sec, miss_types)
95+ insert_stmt:step()
96+ insert_stmt:reset()
9297 end
9398
9499
95--- nth 番目に入力開始が遅い和歌を取得
96-function db_local_slowest_waka(nth)
100+-- 入力の開始時間が遅い順に和歌 ID を取得
101+function db_local_slow_waka(nth)
97102 if db_ == nil then
98103 return
99104 end
100105
101- local sql = "SELECT waka_id FROM start_delay ORDER BY start_msec DESC LIMIT " .. nth
102- local i = 1
106+ local waka_id = {}
107+ local sql = "SELECT waka_id FROM start_delay ORDER BY start_sec DESC LIMIT " .. nth
103108 for row in db_:nrows(sql) do
104- if i == nth then
105- return row.waka_id
106- end
107- i = i + 1
109+ table.insert(waka_id, row.waka_id)
108110 end
109111
110- -- エラー字にも有効な値を返して動作を保証する
111- return 1
112+ return waka_id
112113 end
113114
114115
115--- 指定した和歌の入力開始が何番目に遅いかを取得
116-function db_local_slow_order(waka_id)
116+-- n 件のタイピング履歴を取得
117+function db_local_history(nth)
117118 if db_ == nil then
118119 return
119120 end
120121
121- local sql = "SELECT waka_id FROM start_delay ORDER BY start_msec DESC"
122- local nth = 1
122+ local data = {}
123+ local sql = "SELECT start_sec, end_sec, miss_types FROM history ORDER BY datetime LIMIT " .. nth
123124 for row in db_:nrows(sql) do
124- if waka_id == row.waka_id then
125- return nth
126- end
127- nth = nth + 1
125+ table.insert(data, {start_sec = row.start_sec,
126+ end_sec = row.end_sec,
127+ miss_types = row.miss_types})
128128 end
129-
130- -- エラー字にも有効な値を返して動作を保証する
131- return 1
129+ return data
132130 end
133-
134-
135--- n 件のタイピング履歴を取得
136-function db_local_hisoty(nth)
137- if db_ == nil then
138- return
139- end
140-
141- -- !!!
142-end
--- trunk/cpp_lua/scripts/startup.lua (revision 396)
+++ trunk/cpp_lua/scripts/startup.lua (revision 397)
@@ -4,6 +4,7 @@
44 -- $Id$
55 --
66 -- \todo 画像、フォントのリソースが読み込めないときは、エラーログを表示して終了するようにする
7+-- \todo 和歌の練習数をここで宣言する
78
89 require("strict")
910 require("common")
@@ -116,6 +117,9 @@
116117 -- ガベージコレクションを停止
117118 collectgarbage("stop")
118119
120+ -- 乱数を初期化
121+ math.randomseed(os.time())
122+
119123 -- スクリーン設定を反映
120124 screen_ = Screen()
121125 if (not screen_:isFullscreen()) and is_fullscreen_ then
--- trunk/cpp_lua/scripts/typing_data.lua (revision 396)
+++ trunk/cpp_lua/scripts/typing_data.lua (revision 397)
@@ -24,6 +24,8 @@
2424 function typing_data_clear(mode)
2525 data_ = { {} }
2626 waka_id_ = {}
27+ start_sec_ = {}
28+ end_sec_ = {}
2729 size_ = 0
2830 mode = mode
2931 end
@@ -41,6 +43,15 @@
4143 end
4244
4345
46+-- タイプ文字列の追加
47+function typing_data_add_string(input, timestamp)
48+ for i = 1, #input do
49+ table.insert(data_[size_ + 1],
50+ {key = input:sub(i, i), timestamp = timestamp})
51+ end
52+end
53+
54+
4455 -- 1首の入力完了
4556 function typing_data_lf(start_sec, end_sec)
4657 table.insert(start_sec_, start_sec)
@@ -88,6 +99,19 @@
8899 end
89100
90101
102+-- 入力の開始時間を返す
103+function typing_data_start_sec()
104+ local data = {}
105+ for k, v in pairs(start_sec_) do
106+ local id = waka_id_[k]
107+ local start_sec = start_sec_[k]
108+ table.insert(data, {id = id, start_sec = start_sec})
109+ end
110+
111+ return data
112+end
113+
114+
91115 -- 記録情報を文字列に変換
92116 function typing_data_to_string()
93117
--- trunk/cpp_lua/scripts/shimonoku_typing.lua (revision 396)
+++ trunk/cpp_lua/scripts/shimonoku_typing.lua (revision 397)
@@ -7,6 +7,7 @@
77
88 require("display_waka")
99 require("waka_handler")
10+require("typing_data")
1011 require("display_result_practice")
1112
1213
@@ -25,6 +26,7 @@
2526 local input_ku_ = 0
2627 local display_percent_ = 0
2728 local stop_watch_ = nil
29+local start_sec_ = 0.0
2830 local converted_text_ = ""
2931 local input_completed_ = false
3032
@@ -63,6 +65,7 @@
6365 text_input_:clear()
6466 display_percent_ = 0
6567 if waka_index_ == 0 then
68+ typing_data_clear(TypingData_Shimonoku)
6669 stop_watch_ = StopWatch()
6770
6871 -- 音楽の再生を開始
@@ -72,6 +75,7 @@
7275 -- 入力処理の開始
7376 stop_watch_:stop()
7477 stop_watch_:start()
78+ start_sec_ = 0.0
7579 waka_index_ = waka_index_ + 1
7680 input_ku_ = 0
7781 converted_text_ = ""
@@ -83,6 +87,7 @@
8387 else
8488 waka_id_ = waka_id_array_[waka_index_]
8589 input_completed_ = false
90+ typing_data_set_waka_id(waka_id_)
8691 end
8792 end
8893 end
@@ -97,8 +102,8 @@
97102 -- 和歌の入力中
98103 display_percent_ = 100.0 * stop_watch_:ticks() / YomiageSecond
99104
100- if false then
101- --if not input_completed_ then
105+ --if false then
106+ if not input_completed_ then
102107 -- 和歌の入力が完了していない
103108 -- !!! debug
104109 local view_ku = display_waka(waka_id_, display_percent_)
@@ -107,7 +112,12 @@
107112
108113 -- 入力文字列の変換
109114 -- !!! 関数化して、他のタイピングモードでも使う
110- converted_text_ = converted_text_ .. text_input_:text()
115+ if input_ku_ == 0 and #converted_text_ == 0 then
116+ start_sec_ = stop_watch_:ticks()
117+ end
118+ local input = text_input_:text()
119+ typing_data_add_string(input, stop_watch_:ticks())
120+ converted_text_ = converted_text_ .. input
111121 text_input_:clear()
112122 converted_text_ = convertToJp(converted_text_, is_roman_)
113123 if bs_event_:isActive() then
@@ -114,6 +124,8 @@
114124 local utf8_text = Utf8(converted_text_)
115125 utf8_text:pop_back()
116126 converted_text_ = utf8_text:toStdString()
127+
128+ typing_data_add(TypingData_BS, stop_watch_:ticks())
117129 end
118130 local utf8_text = Utf8(converted_text_)
119131 if utf8_text:size() > 10 then
@@ -133,6 +145,8 @@
133145 end
134146
135147 if enter_event_:isActive() then
148+ typing_data_add(TypingData_Enter, stop_watch_:ticks())
149+
136150 -- 入力文字列の評価
137151 if waka_handler_input_completed(waka_id_, input_ku_,
138152 converted_text_) then
@@ -144,6 +158,8 @@
144158 -- 首の入力が完了
145159 input_ku_ = 0
146160 input_completed_ = true
161+ typing_data_lf(start_sec_ / 1000.0,
162+ stop_watch_:ticks() / 1000.0)
147163
148164 -- 入力フォームを消す
149165 display_waka_remove_inputs()
@@ -164,9 +180,7 @@
164180 shimonoku_typing_clearState()
165181
166182 -- 結果の表示
167- -- !!! 結果を計算して適切な値を登録する
168- display_result_practice_set_result(1.0, 2.0, 3.0)
169-
183+ display_result_practice_set_result(typing_data_average())
170184 state:stateMachine():changeState(display_result_practice)
171185 end
172186
@@ -175,6 +189,7 @@
175189 -- 入力文字があるときの ESC では、入力文字をクリアするだけにする
176190 if #converted_text_ > 0 then
177191 converted_text_ = ""
192+ typing_data_add(TypingData_ESC, stop_watch_:ticks())
178193 else
179194 require("practice_menu")
180195 state:stateMachine():changeState(practice_menu)
--- trunk/cpp_lua/scripts/display_waka.lua (revision 396)
+++ trunk/cpp_lua/scripts/display_waka.lua (revision 397)
@@ -211,7 +211,7 @@
211211
212212 local x_offset = screen_:rect().w - waka_yomibito_label_:rect().w
213213 waka_yomibito_label_:setPosition(Point(x_offset - WakaDrawSize,
214- WakaDrawHeight * 7 + OffsetY))
214+ WakaDrawHeight * 7 + OffsetY * 2))
215215 end
216216
217217 if percent >= 0 then
--- trunk/cpp_lua/scripts/waka_data.lua (revision 396)
+++ trunk/cpp_lua/scripts/waka_data.lua (revision 397)
@@ -209,7 +209,7 @@
209209 "わが衣手は", "露にぬれつつ",},
210210 {"春過ぎて", "夏来にけらし", "白妙の",
211211 "衣ほすてふ", "あまのかぐ山",},
212- {"あし曳の", "山どりの尾の", "しだりをの",
212+ {"あし引きの", "山どりの尾の", "しだりをの",
213213 "ながながし夜を", "独りかもねむ",},
214214 {"田子のうらに", "うち出でてみれば", "白妙の",
215215 "ふじの高ねに", "雪はふりつつ",},
@@ -225,7 +225,7 @@
225225 "我身世にふる", "ながめせしまに",},
226226 {"これや此", "ゆくも帰るも", "別れては",
227227 "しるもしらぬも", "あふ坂の関",},
228- {"わたの原", "八十島かけて", "漕ぎ出でぬと",
228+ {"わたの原", "八十島かけて", "漕出でぬと",
229229 "人にはつげよ", "あまの釣舟",},
230230 {"天つかぜ", "雲の通路", "吹きとぢよ",
231231 "をとめのすがた", "しばしとどめむ",},
@@ -233,7 +233,7 @@
233233 "こひぞつもりて", "淵となりぬる",},
234234 {"みちのくの", "忍ぶもぢずり", "たれゆゑに",
235235 "乱れ初めにし", "我ならなくに",},
236- {"君がため", "春の野に出でて", "わかなつむ",
236+ {"君がため", "春ののに出でて", "わかなつむ",
237237 "我衣手に", "雪はふりつつ",},
238238 {"立ち別れ", "いなばの山の", "みねに生ふる",
239239 "松としきかば", "今帰り来む",},
@@ -255,7 +255,7 @@
255255 "紅葉のにしき", "神のまにまに",},
256256 {"名にしおはば", "相坂山の", "さねかづら",
257257 "人にしられで", "くるよしもがな",},
258- {"をぐらやま", "みねのもみぢ葉", "心あらば",
258+ {"小倉山", "みねのもみぢ葉", "心あらば",
259259 "今一度の", "みゆきまたなむ",},
260260 {"みかの原", "わきてながるる", "いづみ川",
261261 "いつみきとてか", "恋しかるらむ",},
@@ -417,7 +417,7 @@
417417 {"たごのうらに", "うちいでてみれば", "しろたへの",
418418 "ふじのたかねに", "ゆきはふりつつ",},
419419 {"おくやまに", "もみぢふみわけ", "なくしかの",
420- "こえきくときぞ", "あきはかなしき",},
420+ "こゑきくときぞ", "あきはかなしき",},
421421 {"かささぎの", "わたせるはしに", "おくしもの",
422422 "しろきをみれば", "よぞふけにける",},
423423 {"あまのはら", "ふりさけみれば", "かすがなる",
--- trunk/cpp_lua/scripts/display_result_practice.lua (revision 396)
+++ trunk/cpp_lua/scripts/display_result_practice.lua (revision 397)
@@ -3,7 +3,9 @@
33 -- Satofumi KAMIMURA
44 -- $Id$
55
6+require("db_local")
67
8+
79 -- state: 結果の表示 (練習用)
810 display_result_practice = {}
911
@@ -113,6 +115,23 @@
113115 -- !!! - "「入力の開始時間」の最高記録を更新しました!"
114116 -- !!! など
115117
118+ -- 結果を記録する前に画面を描画してしまう
119+ redraw()
120+
121+ -- 結果の記録
122+ if db_local_connect() then
123+ local start_sec_data = typing_data_start_sec()
124+ for k, data in pairs(start_sec_data) do
125+ db_local_register_waka(data.id, data.start_sec)
126+ end
127+ db_local_register_history(typing_data_average())
128+ db_local_disconnect()
129+ end
130+ if false then
131+ -- クライアント ID があれば、データをサーバに登録する
132+ -- !!!
133+ end
134+
116135 -- ENTER の入力待ちへ
117136 require("wait_enter")
118137 state:stateMachine():changeState(wait_enter)
--- trunk/cpp_lua/scripts/practice_menu.lua (revision 396)
+++ trunk/cpp_lua/scripts/practice_menu.lua (revision 397)
@@ -18,9 +18,10 @@
1818
1919
2020 function practice_menu_set_waka()
21- -- 入力開始が最も遅い和歌を 1 つ含まれるようにする
21+ -- 入力開始が最も遅い和歌が 1 つ含まれるようにする
2222 -- !!! 残りを 乱数で配置後、ID の並びをシャッフルする
2323 -- !!! waka_handler の関数で処理する
24+ --waka_id_array_ = waka_handler_shuffle(waka_handler_practice_waka(6))
2425 --waka_id_array_ = { 1, 2, 3, 4, 5, 6 }
2526 --waka_id_array_ = { 1, 2 }
2627 waka_id_array_ = { 1 }
@@ -28,9 +29,8 @@
2829
2930
3031 function practice_menu_set_waka_weak()
31- -- 入力開始が遅い順に ID を格納し、シャッフルする
32- -- !!!
33- waka_id_array_ = { 1, 2, 3, 4, 5, 6 }
32+ -- 入力開始が遅い順に和歌 ID を格納し、シャッフルする
33+ waka_id_array_ = waka_handler_shuffle(waka_handler_slow_waka(5))
3434 end
3535
3636
@@ -38,7 +38,7 @@
3838 -- 決まり字毎に ID を格納し、シャッフルする
3939 -- !!!
4040 -- !!! どの決まり字を練習するかで、和歌の数は増減する
41- waka_id_array_ = { 1, 2, 3, 4, 5, 6 }
41+ waka_id_array_ = { 1, 2, 3, 4, 5 }
4242 end
4343
4444
--- trunk/cpp_lua/scripts/waka_handler.lua (revision 396)
+++ trunk/cpp_lua/scripts/waka_handler.lua (revision 397)
@@ -4,6 +4,7 @@
44 -- $Id$
55
66 require("waka_data")
7+require("db_local")
78
89
910 -- 入力された文字列が、和歌の文字列と一致しているかを返す
@@ -69,4 +70,58 @@
6970 local miss_detected = (left_actual:size() ~= match_size)
7071
7172 return roman_text, miss_detected
72-end
\ No newline at end of file
73+end
74+
75+
76+-- 練習用の和歌 ID を返す
77+function waka_handler_practice_waka(nth)
78+ -- 入力開始が最も遅い和歌が 1 つ含まれるようにする
79+ -- !!!
80+
81+ -- !!! 最も遅い和歌を 1 番目に配置し、
82+ -- !!! ランダムに4つ選ぶ
83+
84+-- if db_local_connect() then
85+-- id_array = db_local_slow_waka(1)
86+-- db_local_disconnect()
87+ -- else
88+
89+-- for i = 1, 100 do
90+-- table.insert(id_array, i)
91+-- end
92+
93+ return {1, 2, 3, 4, 5}
94+end
95+
96+
97+-- 入力開始が遅い順に和歌 ID を返す
98+function waka_handler_slow_waka(nth)
99+
100+ local id_array
101+
102+ if db_local_connect() then
103+ id_array = db_local_slow_waka(nth)
104+ db_local_disconnect()
105+ else
106+ -- DB に接続できない場合は、乱数で選ぶ
107+ id_array = waka_handler_practice_waka(nth)
108+ end
109+
110+ return id_array
111+end
112+
113+
114+-- 和歌 ID をシャッフルする
115+function waka_handler_shuffle(waka_id_array)
116+ local id_array = {}
117+ local size = #waka_id_array
118+
119+ for i = 1, size do
120+ local select_id = math.ceil(math.random() * size)
121+ table.insert(id_array, waka_id_array[select_id])
122+ waka_id_array[select_id] = waka_id_array[size]
123+ size = size - 1
124+ end
125+
126+ return id_array
127+end
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
--- trunk/cpp_lua/db_local_test.lua (revision 396)
+++ trunk/cpp_lua/db_local_test.lua (revision 397)
@@ -14,18 +14,21 @@
1414 db_local_register_waka(2, 90);
1515 db_local_register_waka(3, 120);
1616 db_local_register_waka(4, 130);
17--- !!! history データも登録する
1817
18+db_local_register_history(2.0, 5.0, 0)
19+db_local_register_history(2.0, 6.0, 1)
20+
21+
1922 -- データを取得
20-for order = 97, 100 do
21- print("fast waka: " .. order .. ", " .. db_local_slowest_waka(order))
23+local data = ""
24+for k, v in pairs(db_local_slow_waka(5)) do
25+ data = data .. v .. ", "
2226 end
23-print("")
27+print(data)
2428
25-for id = 1, 4 do
26- print("slow order: " .. db_local_slow_order(id))
29+local data = db_local_history(5)
30+for k, v in pairs(db_local_history(5)) do
31+ print(v.start_sec .. ", " .. v.end_sec .. ", " .. v.miss_types)
2732 end
2833
29--- !!! history データも表示する
30-
3134 db_local_disconnect()
\ No newline at end of file
旧リポジトリブラウザで表示