diff --git a/flask/testapp/static/javascript/beautyVote.js b/flask/testapp/static/javascript/beautyVote.js index 2030232..f66ef00 100644 --- a/flask/testapp/static/javascript/beautyVote.js +++ b/flask/testapp/static/javascript/beautyVote.js @@ -295,7 +295,6 @@ } } - // 集計結果待機中処理 function CheckOthers(){ xhr.open('POST', '/form'); @@ -328,7 +327,7 @@ } } -//最終集計結果(順位表)待機処理 +//最終集計結果(順位表)待機処理,表示 function CheckResult(){ xhr.open('POST', '/form'); xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); @@ -341,21 +340,33 @@ } //順位表を受信 else{ - var form = document.createElement('form'); - form.method = 'POST'; - form.action = '/new'; + var form = document.createElement("form") + form.method = "POST"; + if(language == JPN){ + form.action = "/resultJPN" + } + else{ + form.action = "/resultENG" + } document.body.appendChild(form); form.submit(); + + // 自分の順位の表示用 + var valueToSend = String(player.score) + "pt"; // javascriptから送りたい値 + if(language == JPN){ + window.location.href = "/resultJPN?valueJPN=" + encodeURIComponent(valueToSend); + } + else{ + window.location.href = "/resultENG?valueENG=" + encodeURIComponent(valueToSend); + } } } } } - var xhr = new XMLHttpRequest(); - - -var round = 0; //変更 +var result_xhr= new XMLHttpRequest(); +var round = 10; //変更 var MAX_ROUND = 1; var CHOICE_NUMBER = 5; var max_player = 0; // 最大のplayer数(変更不要) diff --git a/flask/testapp/static/javascript/resultScreen.js b/flask/testapp/static/javascript/resultScreen.js index a0ce4d3..ffdfe49 100644 --- a/flask/testapp/static/javascript/resultScreen.js +++ b/flask/testapp/static/javascript/resultScreen.js @@ -146,57 +146,84 @@ fTextN("ルール1\nルール2\nルール3\nルール4", 480, 950, 200, 50, "white"); } -function showResult(){ - fill("silver"); - setAlp(50); - fRect(50, 50, 855, 100, "black"); - fRect(45, 370, 865, 700, "white"); - - - if(language==JPN){ - fText("結果発表", 480, 100, 80, "white"); - fText("順位", 150, 410, 50, "black"); - fText("ユーザー名", 390, 410, 50, "black"); - fText("スコア", 730, 410, 50, "black"); - fText("結果", 100, 1100, 50, "red"); - } - else{ - fText("RESULT", 480, 100, 80, "white"); - fText("order", 150, 410, 50, "black"); - fText("username", 390, 410, 50, "black"); - fText("score", 730, 410, 50, "black"); - fText("result", 100, 1100, 50, "red"); - } +// function showResult(){ +// if(language==JPN){ +// window.open("showResultJPN.html") +// } +// else if (language==ENG){ +// window.open("showResultENG.html") +// } +// } +// function showResult(){ + +// if(language==JPN){ +// fText("結果発表", 480, 100, 80, "white"); +// fText("順位", 150, 410, 50, "black"); +// fText("ユーザー名", 390, 410, 50, "black"); +// fText("スコア", 730, 410, 50, "black"); +// fText("結果", 100, 1100, 50, "red"); +// } +// else{ +// fText("RESULT", 480, 100, 80, "white"); +// fText("order", 150, 410, 50, "black"); +// fText("username", 390, 410, 50, "black"); +// fText("score", 730, 410, 50, "black"); +// fText("result", 100, 1100, 50, "red"); +// } + + // if(scene == RESULT_SCENE){ + // if(language==JPN){ + // fText(player.name+"さんのスコアは" + player.score + "点です!", 480, 200, 50, "gold"); + // } + // else{ + // fText(player.name+"'s score is " + player.score + "Points!", 480, 200, 50, "gold"); + // } + // let splitOrder = orderTable.split("\n"); + // for (var i = 0; i < splitOrder.length; i++){ + // let arr = splitOrder[i].split(" "); // 空白で文字列を分割 + // if(arr[0]=="1位"){ + // fText(arr[0], 150, 480+60*i, 50, "gold"); + // } + // else if(arr[0]=="2位"){ + // fText(arr[0], 150, 480+60*i, 50, "silver"); + // } + // else if(arr[0]=="3位"){ + // fText(arr[0], 150, 480+60*i, 50, "#8c4841"); + // } + // else{ + // fText((i+1)+"位", 150, 480+60*i, 50, "black"); + // } + // fText(arr[1], 390, 480+60*i, 50, "black"); + // fText(arr[2], 730, 480+60*i, 50, "black"); + // } + // } + // for(var i = 0; i < MAX_ROUND; i ++){ + // fText((i+1), 480 + 50*i, 1100, 50, "black"); + // } + // } - if(scene == RESULT_SCENE){ - if(language==JPN){ - fText(player.name+"さんのスコアは" + player.score + "点です!", 480, 200, 50, "gold"); - } - else{ - fText(player.name+"'s score is " + player.score + "Points!", 480, 200, 50, "gold"); - } - let splitOrder = orderTable.split("\n"); - for (var i = 0; i < splitOrder.length; i++){ - let arr = splitOrder[i].split(" "); // 空白で文字列を分割 - if(arr[0]=="1位"){ - fText(arr[0], 150, 480+60*i, 50, "gold"); - } - else if(arr[0]=="2位"){ - fText(arr[0], 150, 480+60*i, 50, "silver"); - } - else if(arr[0]=="3位"){ - fText(arr[0], 150, 480+60*i, 50, "#8c4841"); - } - else{ - fText((i+1)+"位", 150, 480+60*i, 50, "black"); - } - fText(arr[1], 390, 480+60*i, 50, "black"); - fText(arr[2], 730, 480+60*i, 50, "black"); - } - } - for(var i = 0; i < MAX_ROUND; i ++){ - fText((i+1), 480 + 50*i, 1100, 50, "black"); - } + +function showResult(){ + fill("silver"); + setAlp(50); + fRect(50, 50, 855, 100, "black"); + fRect(45, 370, 865, 700, "white"); + + + if(language==JPN){ + fText("結果発表", 480, 100, 80, "white"); + fText("順位", 150, 410, 50, "black"); + fText("ユーザー名", 390, 410, 50, "black"); + fText("スコア", 730, 410, 50, "black"); + fText("結果", 100, 1100, 50, "red"); + } + else{ + fText("RESULT", 480, 100, 80, "white"); + fText("order", 150, 410, 50, "black"); + fText("username", 390, 410, 50, "black"); + fText("score", 730, 410, 50, "black"); + fText("result", 100, 1100, 50, "red"); + } } function showOtherResult(show_click_round){ diff --git a/flask/testapp/templates/testapp/showResultENG.html b/flask/testapp/templates/testapp/showResultENG.html new file mode 100644 index 0000000..4c40a62 --- /dev/null +++ b/flask/testapp/templates/testapp/showResultENG.html @@ -0,0 +1,86 @@ + + + +美人投票ゲーム + + + + + + + + + + + +
+

BeautyVoteResult

+

Your Score is

+

0pt

+
+ +
+ + + + + + + {% for i in order_table %} + + {% for j in i %} + + {% endfor %} + + {% endfor %} +
orderplayer namescore(pt)
{{j}}
+
+ + + + + + \ No newline at end of file diff --git a/flask/testapp/templates/testapp/showResultJPN.html b/flask/testapp/templates/testapp/showResultJPN.html new file mode 100644 index 0000000..c399031 --- /dev/null +++ b/flask/testapp/templates/testapp/showResultJPN.html @@ -0,0 +1,86 @@ + + + +美人投票ゲーム + + + + + + + + + + + +
+

美人投票ゲーム結果発表

+

あなたのスコアは

+

0pt

+
+ +
+ + + + + + + {% for i in order_table %} + + {% for j in i %} + + {% endfor %} + + {% endfor %} +
順位player名スコア(pt)
{{j}}
+
+ + + + + + diff --git a/flask/testapp/views.py b/flask/testapp/views.py index 61ad3b6..cb359be 100644 --- a/flask/testapp/views.py +++ b/flask/testapp/views.py @@ -1,4 +1,4 @@ -from flask import render_template, request, redirect, url_for +from flask import render_template, request, jsonify from testapp import app from collections import Counter import time @@ -16,7 +16,7 @@ # 何位まで表示するか(nemoto) -max_order = 5 +max_order = MAX_PLAYER # scoreを保存するデータ data = [0] * MAX_PLAYER @@ -37,7 +37,7 @@ data_count = 0 -order_table = "" +order_table_array = [] most_common_option = 0 start_flag = False @@ -47,7 +47,6 @@ @app.route("/", methods=["GET", "POST"]) def inputName(): - print("GET") global user_number, current_player, start_flag, user if request.method == "GET": @@ -59,9 +58,7 @@ username = request.form.get("username") language = request.form.get("language") if user_number >= MAX_PLAYER or start_flag: - return render_template( - "testapp/index.html", scene=CAPASITY_ERROR, language=language - ) + return render_template("testapp/index.html", scene=CAPASITY_ERROR, language=language) user[user_number] = username user_number += 1 @@ -79,7 +76,7 @@ @app.route("/form", methods=["GET", "POST"]) def index(): - global frequent_table, user_number, data_count, order_table, most_common_option, max_order, current_player, start, end, start_flag + global frequent_table, user_number, data_count, order_table_array, most_common_option, max_order, current_player, start, end, start_flag if request.method == "GET": return render_template("testapp/index.html") @@ -139,26 +136,23 @@ if data_count >= current_player: scores_order, user_number_order = calculate_order(data) print(scores_order, user_number_order) - order_table = create_order_table( - scores_order, user_number_order, max_order - ) + order_table_array = create_order_table(scores_order, user_number_order, max_order) return "WAIT" # 最終結果を集計 if request.form.get("checkResult"): #  順位表が作成した場合はそれを返す - if order_table == "": + if order_table_array == "": return "WAIT" else: user_number = 0 start_flag = False - - # 他のエンドポイントにリダイレクトする - return redirect(url_for("inputName")) - # return render_template("testapp/inputName.html") - # return order_table - + print("finsih") + print(order_table_array) + return "FINISH" + # return render_template("testapp/index.html") + # return render_template("testapp/showResultJPN.html", order_table=order_table_dict) return "WAIT" @@ -170,13 +164,9 @@ common_order = counter.most_common() # 文字列として保存 for i in range(5): - get_frequent_table += ( - str(common_order[i][0]) if len(common_order) > i else str(4) - ) + get_frequent_table += str(common_order[i][0]) if len(common_order) > i else str(4) get_frequent_table += " " - get_frequent_table += ( - str(common_order[i][1]) if len(common_order) > i else str(0) - ) + get_frequent_table += str(common_order[i][1]) if len(common_order) > i else str(0) get_frequent_table += "\n" if get_frequent_table.endswith("\n"): @@ -187,9 +177,7 @@ # ランキング上位の計算 def calculate_order(get_data): - get_sorted_numbers_with_indices = sorted( - enumerate(get_data), key=lambda x: x[1], reverse=True - ) + get_sorted_numbers_with_indices = sorted(enumerate(get_data), key=lambda x: x[1], reverse=True) get_scores = [item[1] for item in get_sorted_numbers_with_indices] get_labels = [item[0] for item in get_sorted_numbers_with_indices] @@ -197,8 +185,38 @@ # 順位表の作成 otaki(同率の場合も考慮 nemoto) +# def create_order_table(scores, labels, max): +# order_table = "" +# j = 0 # 同率順位の考慮 + +# # 最高"max位"までを表示する +# if max >= current_player: +# max = current_player + +# for i in range(max): +# if i + j >= max: # 参照する配列がこれ以上ない時 +# break +# order_table += str(i + 1 + j) + "位" + " " + user[int(labels[i + j])] + " " + str(scores[i + j]) + "pt" + "\n" +# now_order = i + 1 + j # 今の順位 +# if i + j + 1 == max: # 先ほどorder_tableに挿入した配列が,最後であった時 +# break +# # 同じスコアのplayersの処理 +# while str(scores[i + j]) == str(scores[i + 1 + j]): +# j += 1 +# order_table += ( +# str(now_order) + "位" + " " + user[int(labels[i + j])] + " " + str(scores[i + j]) + "pt" + "\n" +# ) +# if i + j + 1 >= max: # (i+j)と比較する配列(i+j+1)がない時 +# break + +# if order_table.endswith("\n"): +# order_table = order_table[:-1] # 最後の改行文字を削除 +# print("FINAL" + order_table) +# return order_table + + def create_order_table(scores, labels, max): - order_table = "" + get_order_table = [] j = 0 # 同率順位の考慮 # 最高"max位"までを表示する @@ -208,43 +226,26 @@ for i in range(max): if i + j >= max: # 参照する配列がこれ以上ない時 break - order_table += ( - str(i + 1 + j) - + "位" - + " " - + user[int(labels[i + j])] - + " " - + str(scores[i + j]) - + "pt" - + "\n" - ) + get_order_table.append([str(i + 1 + j), user[int(labels[i + j])], str(scores[i + j])]) now_order = i + 1 + j # 今の順位 if i + j + 1 == max: # 先ほどorder_tableに挿入した配列が,最後であった時 break # 同じスコアのplayersの処理 while str(scores[i + j]) == str(scores[i + 1 + j]): j += 1 - order_table += ( - str(now_order) - + "位" - + " " - + user[int(labels[i + j])] - + " " - + str(scores[i + j]) - + "pt" - + "\n" - ) + get_order_table.append([str(now_order), user[int(labels[i + j])], str(scores[i + j])]) if i + j + 1 >= max: # (i+j)と比較する配列(i+j+1)がない時 break - - if order_table.endswith("\n"): - order_table = order_table[:-1] # 最後の改行文字を削除 - print("FINAL" + order_table) - return order_table + return get_order_table -@app.route("/new", methods=["GET", "POST"]) -def new_page(): +@app.route("/resultJPN", methods=["GET", "POST"]) +def showResultJPN(): + global order_table_array + return render_template("testapp/showResultJPN.html", order_table=order_table_array) - return render_template("testapp/inputName.html", ) - # return "これは新しいページです。データが正しく送信されました。" + +@app.route("/resultENG", methods=["GET", "POST"]) +def showResultENG(): + global order_table_array + return render_template("testapp/showResultENG.html", order_table=order_table_array)