当前位置:编程学习 > C#/ASP.NET >>

C#版龟兔赛跑

using System;
using System.Collections.Generic;
namespace Console_Test
{
    class Program
    {
        static void Main()
        {
            //请裁判
            Judgment ment = Judgment.Instance;
            //告诉裁判这次要跑多远
            ment.TrackLength = 1000;
            //玄武参赛
            ment.Join(new Tortoise());
            //玉兔参赛
            ment.Join(new Rabbit());
            //开始
            ment.Start();
            Console.ReadKey();
        }
    }
    /// <summary>
    /// 欢迎伟大的裁判
    /// </summary>
    public class Judgment
    {
        /// <summary>
        /// 为了防止裁判太多造成不必要的混乱
        /// 也为了节省赛事的经费
        /// 本大赛只请一名裁判
        /// </summary>
        private Judgment() { }
        /// <summary>
        /// 哈哈,就一个裁判啊
        /// </summary>
        private static Judgment instance = new Judgment();
        /// <summary>
        /// 哥就是那个闪亮的唯一的伟大裁判
        /// </summary>
        public static Judgment Instance
        {
            get
            {
                return instance;
            }
        }
        private int length = -1;
        /// <summary>
        /// 赛道长度,你不说,我怎么会知道会跑到神马时候啊
        /// </summary>
        public int TrackLength
        {
            get { return length; }
            set
            {
                if (length<0)
                {
                    length = value;
                }
            }
        }

        /// <summary>
        ///哥是裁判
        ///神马选手哥看不见啊
        ///全洗干净脚底板等我
        ///哈哈
        /// </summary>
        private List<IRunner> runners = new List<IRunner>();
        /// <summary>
        /// 来报名参赛哈
        /// </summary>
        /// <param name="runner"></param>
        public void Join(IRunner runner)
        {
            if (runners.Contains(runner))
            {
                Console.WriteLine("报过名了,就不要再报了");
                return;
            }
            runners.Add(runner);
        }
        /// <summary>
        /// 开不开始
        /// 哥一句话
        /// </summary>
        public void Start()
        {
            if (TrackLength<0)
            {
                Console.WriteLine("大家都不知道要跑多远,再等等!");
                return;
            }
            if (runners.Count < 2)
            {
                Console.WriteLine("神马,就你一个人,不用比了,勇气可嘉啊,奖杯给你了!");
                return;
            }
            Console.WriteLine("裁判:好了,欢迎大家参加本届神宠速度大比拼,此次参赛的选手有");
            foreach(IRunner runner in runners)
            {
                Console.Write("【");
                Console.Write(runner.Name);
                Console.Write("】,");
            }
            Console.WriteLine("希望大家赛出成绩,赛出特色,比赛开始。。。");
            Console.WriteLine("3");
            Console.WriteLine("2");
            Console.WriteLine("1");
            Console.WriteLine("Start!");
            Console.WriteLine();
            new System.Threading.Thread(delegate()
                {
                    bool isNotEnd = true;
                    while (isNotEnd)
                    {
                        foreach (IRunner runner in runners)
                        {
                            runner.Run();
                            if (runner.Score >= TrackLength)
                            {
                                isNotEnd = false;
                                Console.WriteLine("裁判:选手【{0}】成功夺冠!", runner.Name);
                                break;
                            }
                            Console.WriteLine("裁判:选手【{0}】已经跑了{1}米,距终点还有{2}米",
                                                                runner.Name,
                                                                runner.Score, 
                                                                TrackLength - runner.Score);
                        }
                        System.Threading.Thread.Sleep(1000);
                    }
                }).Start();
        }
    }

    /// <summary>
    /// 没有我,谁也别想跑步
    /// </summary>
    public interface IRunner
    {
        string Name { get; }
        /// <summary>
        /// 我的正常速度
        /// </summary>
        int Speed { get; }
        /// <summary>
        /// 爆发的速度
        /// </summary>
        int SuperSpeed { get; }
        /// <summary>
        /// 我的成绩
        /// </summary>
        int Score { get; }
        /// <summary>
        /// 跑一个给你看看
        /// </summary>
        void Run();
    }
    /// <summary>
    /// 姐不是路过打酱油滴
    /// 姐不是芙蓉,玉凤
    /// 姐是Runner
    /// 姐是能跑的人的祖先
    /// 鸿星尔克 To Be NO.1 
    /// </summary>
    public abstract class Runner : IRunner
    {
        /// <summary>
        /// 谁没有点小问题,只不过问题是随机的
        /// </summary>
        protected static Random random = new Random();
        public string Name { get; protected set; }
        public int Speed { get; protected set; }
        public int SuperSpeed { get; protected set; }
        public int Score { get; protected set; }
        public abstract void Run();
    }


    /// <summary>
    /// 四大神兽之北宫玄武
    /// 前来助阵的有
    /// 白虎,朱雀,青龙
    /// </summary>
    public class Tortoise : Runner
    {
        public Tortoise()
        {
            Name = "玄武";
            Speed = 25;//不要惊奇,爷是神兽啊,跑得快不是爷的错
            SuperSpeed = 30;
        }
        public override void Run()
        {
            //哥有1/2的概率爆发啊,嘿嘿
            if (random.Next(1, 3) < 2)
            {
                Console.WriteLine("{0}:看来扶老人过马路还是不错的啊,人品大爆发了!",Name);
                Score += SuperSpeed;
            }
            else
            {
                Console.WriteLine("{0}:佛曰,缓者远行!嘿嘿!",Name);
                Score+= Speed;
            }
        }
    }
    /// <summary>
    /// 顶级萌宠之月宫玉兔
    /// 前来助阵的有
    /// 嫦娥,吴刚,八戒(你来搞毛啊)
    /// </summary>
    public class Rabbit : Runner
    {
        private bool isSleeped = false;
        public Rabbit()
        {
            Name = "玉兔";
            Speed = 40;
            SuperSpeed = 45;
        }
        public override void Run()
        {
            //如果发现自己睡过了,就有1/3的概率爆发
            if (isSleeped)
            {
                if (random.Next(1, 4) < 2)
                {
                    Console.WriteLine("{0}:看我风一般的速度,yoyoyoyoyoyoyoyooooo!",Name);
                    Score+= SuperSpeed;
                    return;
                }
            }
            if (random.Next(1, 3) < 2)
            {
                isSleeped = true;
                Console.WriteLine("{0}:昨晚偷了一夜的菜,睡一会,撑不住了",Name);
            }
            else
            {
                Console.WriteLine("{0}:比个赛么,何必那么认真呢?做兔子呢,最重要的开心!",Name);
                Score += Speed;
            }
        }
    }
}


--------------------编程问答-------------------- --------------------编程问答-------------------- 不                     懂 --------------------编程问答-------------------- 楼主应该学习一下发贴如何插入代码。 --------------------编程问答-------------------- /upload/20131225/28.gif --------------------编程问答--------------------
补充:.NET技术 ,  非技术区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,