2017-01-18 7 views
1

У меня есть викторина и в конце игры я хочу, чтобы отобразить список лидеров из топ-10 людей с их именами и оценка, например: Ioue 500.Unity: отсутствует 10 топ лидеров

Сейчас я Добавляю счет каждый раз, когда пользователь оценивает, и я проверяю высокий балл. Однако я не уверен, как сделать таблицу лидеров. может ли кто-нибудь меня вести?

Этот сценарий, где пользователь регистрируется, это другая сцена.

using UnityEngine; 
using UnityEngine.SceneManagement; 
using UnityEngine.UI; 
using System.Linq; 
using System.Text.RegularExpressions; 
using System.IO; 
using System; 


public class Registration : MonoBehaviour 
{ 

public Text name; 

public static Registration _instace; 


private void Awake() 
{ 
    _instace = this; 
} 



/// <summary> 
/// Performs data validation and registers user 
/// </summary> 
public void Register() 
{ 
    string data; 
    string currentUser = string.Empty; 
    string userName; 

    data = GetData(name); 
    if (data == null || string.IsNullOrEmpty(data)) 
    { 
     Recolor(name, errorColor); 
     return; 
    } 
    else 
    { 
     userName = data; 
     currentUser += data + ";"; 
    } 

    string previousDirectory = Directory.GetCurrentDirectory(); 
    Directory.SetCurrentDirectory(Application.persistentDataPath); 

    if (File.Exists("Users.csv")) 
    { 
     string[] users = File.ReadAllLines("Users.csv"); 
     foreach (string user in users) 
     { 
      string[] parts = user.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 


     } 
    } 
    File.AppendAllText("Users.csv", currentUser + Environment.NewLine); 

    Directory.SetCurrentDirectory(previousDirectory); 


    SceneManager.LoadScene(nextScene); 
} 

// Gets input data from control group provided 
string GetData(Graphic group) 
{ 
    InputField inputField = group.GetComponentInChildren<InputField>(); 

    if (inputField != null) 
    { 
     return inputField.text; 
    } 

    return null; 
} 

// Gets input data from control group provided 
string GetDataD(Graphic group) 
{ 
    Dropdown inputField = group.GetComponentInChildren<Dropdown>(); 

    if (inputField != null) 
    { 
     return inputField.captionText.text; 
    } 

    return null; 
} 

} 

Где я добавить счет, когда игрок получает правильный ответ

if (isCorrect) 
    { 
     theAnswerIsCorrect = true; 
     playerScore += 20; 
     scoreDisplayText.text = "Score: " + playerScore.ToString(); 
    } 

Это где я сравниваю старый и новый счет:

public void submitNewPlayerScore(int newScore) 
{ 
    if (newScore > playerProgress.highestScore) 
    { 
     playerProgress.highestScore = newScore; 
     SavePlayerProgress(); 
    } 
} 

Теперь то, что мне нужно, я буду есть много пользователей, играющих, я просто хочу показать 10 лучших пользователей с их именами и высокими баллами. Спасибо!

+0

Пользователи со своим счетом сохраняются в файле? –

+0

Немного оффтопик, но этот проект из учебника? В последнее время я видел много вопросов о викторинах с аналогичными именами. – Maakep

+0

Да, это из учебных уроков в реальном времени Unity – David

ответ

1

Хорошо, первое: Зачем вам вообще нужна регистрация, когда она отключена?

Вы можете опустить регистрацию и просто попросить имя игрока после окончания викторины (если вы хотите сделать офлайн-рекорды).

Поскольку у вас уже есть вид highestScore, вы можете просто заказать его, используя Linq. Я предполагаю, что ваш код имеет доступ ко всем игрокам (потому что в CSV-файл), так что я могу рекомендовать делать что-то вроде этого:

List<Player> playerList = new List<Player>(); 
foreach(string user in File.ReadAllLines("Users.csv")) 
{ 
    playersList.Add(Player.Parse(user)); // If you have such method... 
} 

Теперь, поскольку у вас есть все Player с в одном списке, вы можете использовать Linq заказать его и принимать только x для отображения:

int x = 10; // how many records to take 
IEnumerable<Player> highestX = playerList.OrderBy(player => player.highestScore).Take(x); 

highestX теперь держит 10 записей с наибольшим количеством очков. Вы можете просто перебирать их и отображать детали вроде highestX.ElementAt(0).Name или что-то в этом роде.

+0

Мне нужна регистрация, потому что мне нужно собирать информацию о пользователе. да, это оффлайн. И я действительно не понимаю часть int x и самую высокую часть, можно ли продемонстрировать больше? – David

+0

@Alex Я мог бы продемонстрировать больше, но вы показали в основном неочевидную часть кода. Такой вид регистрации легко «взломать», у вас есть текстовый файл в той же папке, что и ваш файл _.exe_, поэтому я бы не сделал никаких данных на основе этого. –

+0

idc о любом взломе сейчас ... никто не будет его взломать .. это просто для небольшой вещи, а не для публикации. Мне просто нужно показать лидеров 10 лучших людей ... – David

Смежные вопросы