from flask import render_template, request
from testapp import app
from collections import Counter
import random
# ユーザーごとの点数を格納する辞書
user_score = {}
# playerの数
MAX_PLAYER = 1
# scoreを保存するデータ
data = [0] * MAX_PLAYER
# user名を保存するデータ
user = [0] * MAX_PLAYER
# ゲーム中の選択肢を保存
choices = []
# ユーザーを識別するための番号(実際の初期値は0にする)
user_number = 5
@app.route("/form", methods=["GET", "POST"])
def index():
global user_number
if request.method == "GET":
return render_template("testapp/index.html")
if request.method == "POST":
"""
# POSTデータを受け取る
data.append(
request.get_data(as_text=True)
) # バイナリデータではなくテキストとして取得する
# 全員分のデータが集まった時
if len(data) >= players:
# リスト内の要素の出現回数をカウントする
counter = Counter(data)
# 最も多く出現する要素を取得する
most_common_element = counter.most_common(1)[0][0]
return most_common_element
"""
# ゲーム中に選択肢を取得し,集計する
if request.form.get("choice"):
choices.append(request.form.get("choice"))
print("Received choice:", choices)
if len(choices) >= user_number:
print("集計...")
most_common_option = calculate_majority(choices) # nemoto追記
choices.clear()
return most_common_option # nemoto追記
# ゲーム開始時にユーザー数を出しておき,それぞれに識別番号を振る
if request.form.get("originalname"):
# ユーザー名を取得し,ユーザー情報を登録←クラス化したほうがいいかも?
username = request.form.get("originalname")
user[user_number] = username
print("Received name:", username, "UserNumber:", user_number)
user_number += 1
# クライアントサイドに識別番号を返す
return str(user_number - 1)
# ゲーム終了時,識別番号とスコアを受け取り,ランキング上位を返す(作成途中)
if request.form.get("number") and request.form.get("score"):
# 識別番号を取得
user_number = int(request.form.get("number"))
# スコアを取得
score = int(request.form.get("score")) # nemoto変更
data[user_number] = score
scores_order, user_number_order = calculate_order(data) # nemoto追記
print(
"Received number:",
user_number,
"\nUserName:",
user[user_number],
"\nScore:",
data[user_number],
)
# 戻り値でランキング上位を返す?(仮)
return "7"
"""
# ユーザーごとのデータに追加
user_data[username].append(data)
data_count += 1
"""
# 受け取ったデータを印刷する
# print("Received data:", user_data[username])
# 必要な処理を行う(例:データベースへの書き込みなど)
return "Data received successfully"
# 多数派の計算(nemoto追記)
def calculate_majority(get_data):
counter = Counter(get_data)
# 最も多く出現する要素を取得する
get_most_common_option = counter.most_common(1)[0][0]
return get_most_common_option
# ランキング上位の計算(nemoto追記)
def calculate_order(get_data):
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]
print("スコア:" + str(get_scores))
print("識別番号:" + str(get_labels))
return get_scores, get_labels