如何使用StreamWriter将C#飞镖模拟器的运行结果写入TXT文件
C#飞镖模拟器写入TXT及数据提取解决方案
修改说明
- 新增游戏结果导出TXT功能,使用
StreamWriter写入所有玩家的每轮投掷记录、总得分、获胜者信息到文件 - 新增核心数据提取逻辑,可直接获取获胜玩家、平均每轮得分、最高单轮得分等字段
- 界面提示翻译为中文,方便使用
- 生成的TXT文件默认保存在程序exe运行同级目录下,命名为
飞镖游戏结果.txt
完整可运行代码
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace Dartgame.Simulator { class Program { public static void Main(string[] args) { Game mitt_spel = new Game(); mitt_spel.Run_game(); Console.Write("按任意键退出程序 "); Console.ReadKey(true); } } class Game { private List<Player> player_list = new List<Player>(); private bool keepGoing = true; public void Run_game() { int winScore = 301; Random slumptal = new Random(); int turn1; int turn2; int turn3; Console.WriteLine(" 欢迎来到飞镖模拟器! "); Console.WriteLine("**************************************"); Console.WriteLine("每位玩家每轮投掷3支飞镖,得分随机生成"); Console.WriteLine("最先达到或超过301分的玩家获胜,游戏结束"); player_list.Add(new Player("Christopher")); player_list.Add(new Player("Suzanne")); do { foreach (var Player in player_list) { turn1 = slumptal.Next(0, 20); turn2 = slumptal.Next(0, 20); turn3 = slumptal.Next(0, 20); Player.Add_turns(turn1, turn2, turn3); if (Player.Calculate_Total() >= winScore) { keepGoing = false; } } } while (keepGoing); foreach (var Player in player_list) { Player.Print_Turns(); } // 导出结果到TXT ExportResultToTxt(); } /// <summary> /// 导出游戏结果到TXT文件 /// </summary> /// <param name="filePath">保存路径,默认是程序运行目录下的飞镖游戏结果.txt</param> public void ExportResultToTxt(string filePath = "飞镖游戏结果.txt") { // using块自动释放StreamWriter资源,无需手动关闭 using (StreamWriter sw = new StreamWriter(filePath, false, Encoding.UTF8)) { sw.WriteLine("飞镖游戏结果统计"); sw.WriteLine("================================"); // 提取获胜玩家 var winner = player_list.OrderByDescending(p => p.Calculate_Total()).First(); sw.WriteLine($"获胜玩家:{winner.Name},总得分:{winner.Calculate_Total()}"); sw.WriteLine(); foreach (var player in player_list) { sw.WriteLine($"【{player.Name}】得分统计:"); sw.WriteLine("******************************************"); foreach (var turn in player.TurnsList) { sw.WriteLine(turn.ToString()); } sw.WriteLine("******************************************"); sw.WriteLine($"总得分:{player.Calculate_Total()}"); // 提取平均每轮得分 double avgTurnScore = Math.Round((double)player.Calculate_Total() / player.TurnsList.Count, 2); sw.WriteLine($"平均每轮得分:{avgTurnScore}"); // 提取最高单轮得分 int maxTurnScore = player.TurnsList.Max(t => t.Get_Score()); sw.WriteLine($"最高单轮得分:{maxTurnScore}"); sw.WriteLine(); } } Console.WriteLine($"\n游戏结果已保存到:{Path.GetFullPath(filePath)}"); } } class Player { private string name; private List<Turns> turns_list = new List<Turns>(); // 新增公开属性,方便外部提取数据 public string Name => name; public List<Turns> TurnsList => turns_list; public Player(string _name = "Zion") { name = _name; } public void Add_turns(int turn1, int turn2, int turn3) { turns_list.Add(new Turns(turn1, turn2, turn3)); } public int Calculate_Total() { int total = 0; foreach (var Turns in turns_list) { total = total + Turns.Get_Score(); } return total; } public void Print_Turns() { Console.WriteLine($"\n {Name} 得分统计:"); Console.WriteLine("******************************************\n"); foreach (var Turns in turns_list) { Console.WriteLine(Turns); } Console.WriteLine("\n******************************************\n"); Console.WriteLine($"总得分:{Calculate_Total()} 分"); } public override string ToString() { return $"玩家:{name}"; } } class Turns { private int turnOne; private int turnTwo; private int turnThree; public Turns(int _turnOne, int _turnTwo, int _turnThree) { turnOne = _turnOne; turnTwo = _turnTwo; turnThree = _turnThree; } public int Get_Score() { return turnOne + turnTwo + turnThree; } public override string ToString() { return string.Format("第1镖:{0,2} 分,第2镖:{1,2} 分,第3镖:{2,2} 分,本轮合计:{3,2} 分", turnOne, turnTwo, turnThree, Get_Score()); } } }
效果说明
- 运行程序后控制台会打印所有玩家得分,同时自动生成TXT结果文件
- 如需修改保存路径,调用
ExportResultToTxt时传入自定义绝对路径即可,比如ExportResultToTxt(@"C:\Users\XXX\Desktop\game_result.txt") - 可根据需求在
ExportResultToTxt方法内扩展提取更多数据字段
内容的提问来源于stack exchange,提问作者Christopher Wahlström
相关产品推荐
相关产品推荐

