diff --git a/flask/testapp/static/javascript/beautyVote.js b/flask/testapp/static/javascript/beautyVote.js index e0a8c52..c95c928 100644 --- a/flask/testapp/static/javascript/beautyVote.js +++ b/flask/testapp/static/javascript/beautyVote.js @@ -246,7 +246,7 @@ var round = 0; //変更 -var MAX_ROUND = 5; +var MAX_ROUND = 1; var timer = 0; var TIME_LIMIT = 900; diff --git a/flask/testapp/static/javascript/resultScreen.js b/flask/testapp/static/javascript/resultScreen.js index 25d99b2..e33f4b4 100644 --- a/flask/testapp/static/javascript/resultScreen.js +++ b/flask/testapp/static/javascript/resultScreen.js @@ -49,34 +49,33 @@ fText("結果発表 ", 480, 100, 80, "white"); fRect(45, 370, 865, 700, "white"); - fText("成績上位者", 300, 410, 50, "black"); - fText("スコア", 670, 410, 50, "black"); + fText("順位", 150, 410, 50, "black"); + fText("ユーザー名", 390, 410, 50, "black"); + fText("スコア", 730, 410, 50, "black"); if(scene == RESULT_SCENE){ fText(player.name+"さんのスコアは" + player.calcScore() + "点です!", 480, 200, 50, "gold"); - fTextN(orderTable, 480, 720, 600, 50, "silver"); + // fTextN(orderTable, 500, 770, 600, 50, "silver"); + + 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)+"位", 100, 480+60*i, 50, "black"); + } + fText(arr[1], 390, 480+60*i, 50, "black"); + fText(arr[2], 730, 480+60*i, 50, "black"); + } } - - //fText("あなたの順位は...", 230, 200, 50, "black"); - //fText(my_order+"位!", 480, 300, 110, "red"); - /* - for (var i = 0; i < MAX_ORDER; i++){ - if(i+1==1){ - fText((i+1)+"位", 100, 480+60*i, 50, "gold"); - } - else if(i+1==2){ - fText((i+1)+"位", 100, 480+60*i, 50, "silver"); - } - else if(i+1==3){ - fText((i+1)+"位", 100, 480+60*i, 50, "#8c4841"); - } - else{ - fText((i+1)+"位", 100, 480+60*i, 50, "black"); - } - fText(ranking_order[i], 300, 480+60*i, 50, "white"); - fText(scoreing_order[i], 670, 480+60*i, 50, "white"); - }*/ - } function inputName(){ diff --git a/flask/testapp/views.py b/flask/testapp/views.py index 2316f98..e21bc04 100644 --- a/flask/testapp/views.py +++ b/flask/testapp/views.py @@ -6,7 +6,10 @@ user_score = {} # playerの数 -MAX_PLAYER = 2 +MAX_PLAYER = 3 + +# 何位まで表示するか +max_order = 5 # scoreを保存するデータ data = [0] * MAX_PLAYER @@ -28,7 +31,8 @@ @app.route("/form", methods=["GET", "POST"]) def index(): - global user_number, data_count, order_table, most_common_option + global user_number, data_count, order_table, most_common_option, max_order + if request.method == "GET": return render_template("testapp/index.html") @@ -85,7 +89,7 @@ if data_count >= MAX_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) + order_table = create_order_table(scores_order, user_number_order, max_order) return "WAIT" @@ -110,23 +114,39 @@ # ランキング上位の計算 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] return get_scores, get_labels -# 順位表の作成 otaki -def create_order_table(scores, labels): +# 順位表の作成 otaki(同率の場合も考慮 nemoto) +def create_order_table(scores, labels, max): order_table = "" - for i in range(MAX_PLAYER): - order_table += ( - str(i + 1) + "位 " + user[int(labels[i])] + " " + str(scores[i]) + "pt" - ) - if i < MAX_PLAYER - 1: - order_table += "\n" - print(order_table) + j = 0 # 同率順位の考慮 + + # 最高"max位"までを表示する + if max >= MAX_PLAYER: + max = MAX_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: # 先ほど挿入した配列が,最後であった時 + 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: # 参照する配列がもうない時 + break + + if order_table.endswith("\n"): + order_table = order_table[:-1] # 最後の改行文字を削除 + print("FINAL" + order_table) return order_table