You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 03:09:02