私は単純なゲームを持っていて、ハイスコアを名前で保存してから別のフォームに表示したいのですが、ポイントの降順で表示します。私はtxtファイルでそれをしたいのですが、保存はOKです.Adam、200、John、100などのように保存するだけです.それらを表示することも問題ではありませんが、それらをソートする方法は? では、スコアと名前をどのように関連付けることができますか?
5 に答える
それらをより明確に構造化された方法で保存する必要があります。したがって、たとえば、1 行に 1 つのエントリがあるテキスト ファイルを引き続き使用できます。
Adam,200
John,200
等
次に、ファイルからそれらを読み取り、各行をHighScoreEntry
オブジェクトに解析して (HighScoreEntry
もちろん、クラスを作成する必要があります)、リストに追加します。または、LINQ を使用して変換を行います。
var highScoreEntries = File.ReadLines("highscores.txt")
.Select(line => HighScoreEntry.FromLine(line))
.ToList();
次に、次を使用できます。
var orderedScores = highScoreEntries.OrderByDescending(entry => entry.Score);
または、XML のようなものを使用してスコアを保存することもできます。これにより、より多くの構造が提供され、一部の解析が少し簡単になります。
これらすべてが難しすぎると思われる場合は、問題の原因となっている正確な手順を特定してください。
var scores = File.ReadLines("scores.txt")
.Select(line => {
string[] parts = line.Split(',');
return new { Name = parts[0], Score = int.Parse(parts[1]) };
})
.OrderByDescending(highScore => highScore.Score);
を使用してみることができます
List<Dictionary> myList
これは基本的にキーと値のペアを保持します。かなり簡単に並べ替えることができるはずです。
次のようなオブジェクトを作成できます。
public class Player
{
string name;
long score; // i assume no decimal points
// getters/setters
}
そして、次のように並べ替えます。
List<Player> players = new List<Player>();
players.Sort(delegate(Player player1, Player player2) { return player1.score.CompareTo(player2.score); });
プロジェクトで静的クラスを使用する必要があります。コンセプトは、クラスを作成し、内部で配列を宣言することです。サンプルをお見せしたいと思います:
class score
{
public static int max = 0;
public static int john = 0;
}
クラスに提供することで、プロジェクトのどこからでも値を変更できます。ユーザー名を含む配列を作成できます。
新しいフォームを作成し、ラベルとボタンを描画します。