C# - Noob的控制台程序理念

时间:2010-05-26 23:45:37

标签: c#

所以,我是一名C#程序员。我知道基本的语法和简单的事情,比如if语句和循环(方法和类)。我现在只使用控制台应用程序还没有打扰Windows窗体。

所以任何简单的应用程序想法都会引入对C#编程很重要的新东西。

另外,没有教程。我想自己做一切。

9 个答案:

答案 0 :(得分:6)

我是Halo的忠实粉丝,我用C#做的第一件事就是编写一个应用程序,在玩Halo 2时下载并解析我的在线游戏统计数据。从那里,我将所有信息加载到一个数据库并在ASP.NET中重新显示它。回想起来,代码很可怕,但这是一个有趣的练习。

另一个练习是解析我的iTunes音乐库的XML文件,将其加载到数据库中,然后(当然)在ASP.NET中显示它。

无论如何,想办法处理你喜欢的事物,无论是游戏,音乐,电视还是其他什么。

答案 1 :(得分:4)

一个简单的游戏可能是一个好的开始,但那些代码高尔夫问题可能会更高级。

为什么不试着写一个'测试你的反应'游戏,你输出一个字母和时间来键入该字母需要多长时间?然后显示所采用的响应时间和迄今为止的最佳响应时间。

答案 2 :(得分:3)

一旦我必须通过编写hangman游戏来学习linux的bash脚本,它应该是c#中控制台应用程序的一个很好的例子。

提示:

开始
while(true)
{
//Game code goes here, use "continue" or "break" according to game logic.
}

答案 3 :(得分:1)

培养技能的一种有趣方式是code katasTop CoderGoogle Code Jam等编程竞赛。有很多示例问题会让你思考,而且很多都带有你可以在完成后比较的解决方案。

即使你曾经是一名开发人员,这些简单的问题也可以让你在编程风格中融入新的实践(例如,kata是开始学习TDD原理的好方法)。另外,它们会让人分心。

答案 4 :(得分:1)

我认为解决Top-Coder问题将是很好的做法!它特别适合,因为他们所有的问题都是基于控制台的,它们不仅会增加你对c#的了解,还会增加你的解决问题的能力和你的数据结构/算法知识。

也就是说,您可能不会了解有关C#的新的或更多特定于平台的内容,例如linq,事件处理程序,线程,并行任务库等等。为此,最好的方法是找到一本好的C#书并通过它。

另一种方式可能是制作小游戏。我知道它的控制台,但你实际上可以制作像Snake,吃豆人,刽子手等游戏,当然,还有一些额外的想象力,但它仍然有效,游戏是很棒的学习练习(很有趣,向人们展示)

答案 5 :(得分:0)

写一些递归的东西,就像计算阶乘值的例程一样。

答案 6 :(得分:0)

我最近开发了一个数独求解器和一个8Queens求解器。

我在控制台中制作了数独求解器,其中拼图本身在项目中被硬编码。您可以尝试使用文本文件作为输入。我实现了一个与递归一起使用的强力算法。开发这样一个求解器是很好的,一旦你准备好了,可能会有很多改进。

8Queens求解器学到了两件事。首先,我必须制作一个棋盘,我用表格做了。我学会了钢笔,画笔和绘画。这也是一个很好的递归练习,在你理解之前你必须做很多事情......

答案 7 :(得分:0)

我建议编写一个命令行工具来完成其他任何事情都无法完成的工作。

我想到的一件事是将XSL样式表应用于XML文件并吐出输出。到处都有示例代码但没有我见过的简单的Windows工具。

这种方法的潜在好处是您最终得到了一个有用的工具,然后您可以选择将其作为开源来获得额外的输入/支持。

答案 8 :(得分:-1)

他们都很难做到,所以我建议在我的Blackjack应用程序中使用复制粘贴方法 记得引用添加系统语音合成器

using System; 
using System.Speech.Synthesis; 

namespace Blackjack  
{
    class Blackjack
    {  
        static string[] playerCards = new string[11];  
        static string hitOrStay = "";  
        static int total = 0, count = 1, dealerTotal = 0;  
        static Random cardRandomizer = new Random();     

        static void Main(string[] args)  
        {
            using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
            {
                Console.Title = "Blackjack";
                synth.Speak("Please enter your blackjack table's name followed by a comma then the secondary name (AKA table number)");
                string bjtn = Console.ReadLine();
                Console.Clear();
                Console.Title = bjtn;
            }             
            Start();
        }      

        static void Start()  
        {  
            dealerTotal = cardRandomizer.Next(15, 22);  
            playerCards[0] = Deal();
            playerCards[1] = Deal();  

            do
            {  
                Console.WriteLine("Welcome to Blackjack! You were dealed " + playerCards[0] + " and " + playerCards[1] + ". \nYour total is " + total + ".\nWould you like to hit or stay? h for hit s for stay.");
                hitOrStay = Console.ReadLine().ToLower();  
            }
            while (!hitOrStay.Equals("h") && !hitOrStay.Equals("s"));  

            Game();  
        }

        static void Game()  
        {  
            if (hitOrStay.Equals("h"))
            {  
                Hit();
            }  
            else if (hitOrStay.Equals("s"))
            {  
                if (total > dealerTotal && total <= 21)  
                {  
                    Console.WriteLine("\nCongrats! You won the game! The dealer's total was " + dealerTotal + ".\nWould you like to play again? y/n");  
                    PlayAgain();  
                }  
                else if (total < dealerTotal)  
                {  
                    Console.WriteLine("\nSorry, you lost! The dealer's total was " + dealerTotal + ".\nWould you like to play again? y/n");
                    PlayAgain();
                }
            }  
            Console.ReadLine();
        }

        static string Deal()  
        {  
            string Card = "";  
            int cards = cardRandomizer.Next(1, 14);  

            switch (cards)  
            {  
                case 1: Card = "Two"; total += 2;  
                    break;  
                case 2: Card = "Three"; total += 3;  
                    break;
                case 3: Card = "Four"; total += 4;  
                    break;
                case 4: Card = "Five"; total += 5;  
                    break;  
                case 5: Card = "Six"; total += 6;  
                    break;
                case 6: Card = "Seven"; total += 7;
                    break;  
                case 7: Card = "Eight"; total += 8;  
                    break;  
                case 8: Card = "Nine"; total += 9;
                    break;  
                case 9: Card = "Ten"; total += 10;
                    break;  
                case 10: Card = "Jack"; total += 10;  
                    break;
                case 11: Card = "Queen"; total += 10;  
                    break;
                case 12: Card = "King"; total += 10;  
                    break;
                case 13: Card = "Ace"; total += 11;
                    break;
                default: Card = "2"; total += 2;
                    break;
            }  
            return Card;
        }  

        static void Hit()  
        {  
            count += 1;
            playerCards[count] = Deal();  
            Console.WriteLine("\nYou were dealed a(n) " + playerCards[count] + ".\nYour new total is " + total + ".");  

            if (total.Equals(21))
            {  
                Console.WriteLine("\nYou got Blackjack! The dealer's total was " + dealerTotal + ".\nWould you like to play again?");  
                PlayAgain();
            }  
            else if (total > 21)
            {  
                Console.WriteLine("\nYou busted, therefore you lost. Sorry. The dealer's total was " + dealerTotal + ".\nWould you like to play again? y/n");  
                PlayAgain();
            }
            else if (total < 21)
            {
                do
                {  
                    Console.WriteLine("\nWould you like to hit or stay? h for hit s for stay");  
                    hitOrStay = Console.ReadLine().ToLower();
                }
                while (!hitOrStay.Equals("h") && !hitOrStay.Equals("s"));  

                Game();
            }
        }    

        static void PlayAgain()
        {  
            string playAgain = "";  

            do
            {  
                playAgain = Console.ReadLine().ToLower();
            }
            while (!playAgain.Equals("y") && !playAgain.Equals("n"));  

            if (playAgain.Equals("y"))
            {
                Console.WriteLine("\nPress enter to restart the game!");  
                Console.ReadLine();  
                Console.Clear();
                dealerTotal = 0;
                count = 1;
                total = 0;

                Start();
            }
            else if (playAgain.Equals("n"))
            {
                using (SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer())
                {
                    synth.Speak("\nPress enter to close Black jack." + dealerTotal);
                }

                ConsoleKeyInfo info = Console.ReadKey();
                if (info.Key == ConsoleKey.Enter)
                {
                    Environment.Exit(0);
                }
                else
                {                    
                    Console.Read();
                    Environment.Exit(0);
                }
            }
        }  
    }  
}