2015-02-01 2 views
2

나는 C# 콘솔에서 테트리스 게임을 만들고있다. 나는 대부분의 게임을했지만 파일 핸들링에 박혀있다. 나는 이것과 관련이있는 것을 발견하지 못했고 그래서 나는 그에게 한 발을내어 그것을 물어볼지도 모른다고 생각했다. 내가하려고하는 것은 플레이어의 이름과 점수를 txt 파일에 NAME : SCORE로 저장하는 것이다. 어떻게 든 후 점수 판으로 상위 10 위를 인쇄 점수하여 분류 내가 가진 얼마나 멀리로 여기 은 다음과 같습니다.테트리스 게임을위한 스코어 보드 .txt 점수 판

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

namespace scoreb 
{ 
    class Program 
{ 
    private static Random _random = new Random(); 
     private static ConsoleColor GetRandomConsoleColor() 
     { 
      var consoleColors = Enum.GetValues(typeof(ConsoleColor)); 
      return (ConsoleColor)consoleColors.GetValue(_random.Next(consoleColors.Length)); 
     } 
    static void Main(string[] args) 
    { 
     int n = 10; 
     string[] names; 
     string[] name = new string[n]; 
     string[] score = new string[n]; 
     int i = 0; 
     while(name[i] != "*"){ 
      Console.WriteLine("Supply your name please!!"); 
      name[i] = Convert.ToString(Console.ReadLine()); 
      Console.WriteLine("Give your score!"); 
      score[i] = Convert.ToString(Console.ReadLine()); 
      Console.WriteLine(name[i] + score[i]); 
      names = new string[] { name[i] + "   " + score[i] }; 
      i++; 
     } 

     Console.ReadLine(); 
     //Printout 
     Console.Clear(); 
     Console.WriteLine(); 
     Console.ForegroundColor = GetRandomConsoleColor(); 
     Console.WriteLine("     *****************************"); 
     Console.ForegroundColor = GetRandomConsoleColor(); 
     Console.WriteLine("        HIGH SCORES"); 
     Console.ForegroundColor = GetRandomConsoleColor(); 
     Console.WriteLine("     *****************************"); 
     Console.WriteLine(); 
     string[] lines = File.ReadAllLines("C:\\asd.txt"); 
     Array.Sort(lines); 
     string read = null; 
     StreamReader b = File.OpenText("C:/asd.txt"); 
     Console.WriteLine("     Név    Pont"); 
     while ((read = b.ReadLine()) != null) 
     { 
      int j = 0; 
      Console.WriteLine(); 
      Console.ForegroundColor = GetRandomConsoleColor(); 
      Console.WriteLine("     " + (j + 1) + ". " + lines[j]); 
      Console.WriteLine(); 
      j++; 
     } 
     b.Close(); 
     Console.ReadLine(); 
    } 
    } 
} 

답변

0

당신은

var scores = File.ReadAllLines("C:\\asd.txt") 
     .Select(x => x.Split(":".ToCharArray())) // split name and score 
     .Select(x => new 
     { 
      Name = x[0], 
      Score = int.Parse(x[1]) 
     }) // create an object contains name and score for each line 
     .OrderByDescending(x => x.Score) // sort result by score 
     .Take(10); //get top 10 

아래의 코드를 사용하여 당신이 원하는 것을 달성하기 위해 LINQ를 사용 후 foreach 루프

foreach (var score in scores) 
{ 
    Console.WriteLine(score.Score + " " + score.Name); 
} 

에 결과를 인쇄하지만 몇 가지 제한 사항이 있습니다. 사용자 이름에 :이 있으면 분할 부분이 실패하므로 실패합니다.

+1

고맙습니다. 이것은 정말로 도움이되었습니다. –

1

대신 작성하고 .txt 파일을하는 것입니다 간단한 옵션을 구문 분석/읽기 플레이어 이름과 점수를 포함하는 클래스를 만든 다음 XML로 직렬화 한 다음 파일에 저장합니다. 여기를 참조하십시오. How to write object data to XML file

XML 파일을 객체로 읽고 deserialize하려면 see this article (위에 관련된). 또한

, 당신의 이름과 점수를 관리하는 것은이 작업을 수행하지 않습니다

string[] name = new string[n]; 
    string[] score = new string[n]; 

이런 식으로 뭔가를 수행

public class NameAndScore 
{ 
    public string Name { get; set; } 
    public int Score { get; set; } 
} 

private List<NameAndScore> _namesAndScores = new List<NameAndScore>(); 

리스트 <> 당신이 직렬화 할 객체 및 역 직렬화하는 것 XML 파일.

+0

XML에 대해 알려주지 않아서 감사합니다. 내일 사용해 보겠습니다. –

+0

@ HambalkóBence : 자신의 형식을 만들고 구문 분석하는 것보다 훨씬 쉽고 쉽습니다. 또한 이름과 점수를 잘 관리하는 방법에 대한 제 편집을 참조하십시오. –

+0

나는 그것과 정말 좋은 생각을 읽었다. 고마워. –

관련 문제