С# - Идеи для консольных программ для Noob

Итак, я начинаю программист на С#. Я знаю базовый синтаксис и простые вещи, такие как инструкции и циклы (методы и классы тоже). Я только использовал консольные приложения прямо сейчас, не беспокоясь о формах Windows.

Итак, любые простые идеи приложений, которые вводят новые вещи, важные для программирования на С#.

Кроме того, нет учебников. Я хочу сделать все сам.

Ответ 1

Я большой поклонник Halo, и одна из первых вещей, которые я сделала с С#, - это написать приложение, которое загрузило и проанализировало мою статистику онлайн-игр во время игры Halo 2. Оттуда я загрузил всю информацию в базы данных и повторно отобразил его в ASP.NET. Оглядываясь назад, код был ужасен, но это было веселое упражнение.

Другое упражнение состояло в том, чтобы проанализировать XML файл для моей музыкальной библиотеки iTunes, загрузить его в базу данных и (конечно) отобразить его в ASP.NET.

В любом случае, найдите способы работы с вещами, которые вам нравятся, будь то игры, музыка, телевидение или что-то еще.

Ответ 2

Простая игра может быть хорошим началом, но эти вопросы для гольфа в кодах могут быть немного более продвинутыми.

Почему бы не попытаться написать игру "проверить свои рефлексы", где вы выводите письмо и время, сколько времени потребуется для ввода этого письма? Затем отобразите время отклика и лучшее время отклика на сегодняшний день.

Ответ 3

Как только мне пришлось изучить bash скрипты для linux, написав hangman, это должен быть хороший пример для консольное приложение в С#.

Подсказка:

начните с

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

Ответ 4

Один интересный способ развития ваших навыков - код катаса и конкурсы программирования, такие как Top Coder и Замятие в Google Code. Есть много примеров проблем, которые заставят вас задуматься, и многие из них приходят с решениями, которые можно сравнить с ними после того, как вы закончите.

Даже если вы некоторое время являетесь разработчиком, такие простые проблемы позволяют вам внедрять новые методы в ваш стиль программирования (например, ката - отличный способ начать изучение принципов TDD). Кроме того, они делают для забавных отвлекающих факторов.

Ответ 5

Я думаю, что решение Top-Coder будет большой практикой! Это особенно подходит, поскольку все их проблемы основаны на консоли, и они заставят вас увеличить не только ваши знания о С#, но также ваши навыки решения проблем и знания ваших данных/алгоритмов.

Тем не менее, вы, вероятно, не будете много узнавать о новых или более специфичных для платформы материалах С#, таких как linq, обработчики событий, потоки, библиотека параллельных задач и т.д. Для этого лучше всего было бы найти хорошую книгу С# и пройти через это.

Другой способ - сделать небольшие игры. Я знаю его консоль, но вы действительно можете делать такие игры, как Snake, Pac-man, палач и т.д., Конечно, с небольшим дополнительным воображением, но он по-прежнему работает, и игры - это отличные учебные упражнения (и это весело показывать людям)

Ответ 6

Напишите что-нибудь рекурсивное, как обычную процедуру, которая вычисляет значение факториала.

Ответ 7

Недавно я разработал решение sudoku и решатель 8Queens.

Я сделал решатель sudoku в консоли, где сама головоломка была жестко закодирована в проекте. Вы можете попытаться использовать текстовый файл в качестве ввода. Я реализовал алгоритм грубой силы, который работает с рекурсией. Приятно разработать такой решатель, и как только вы будете готовы, возможно, будет много улучшений.

Решатель 8Queens узнал мне две вещи. Сначала мне пришлось сделать шахматную доску, которую я сделал с формами. Узнал меня о ручках, кистях и рисунках. Кроме того, это была хорошая практика для рекурсии, которую вы должны многое сделать, прежде чем понимать ее...

Ответ 8

Я бы предложил написать инструмент командной строки, который делает что-то, что, возможно, не может быть сделано ничем другим.

Единственное, что приходит на ум - это то, что применяет стили XSL к файлам XML и выплескивает выход. Там пример кода везде, но нет простого инструмента Windows, который я видел.

Потенциальные преимущества этого подхода заключаются в том, что вы получаете полезный инструмент, и тогда у вас есть возможность сделать его открытым исходным кодом для получения дополнительного ввода/поддержки.

Ответ 9

Ну, все они сложны, поэтому я предлагаю использовать метод копирования в моем приложении 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 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 total was " + dealerTotal + ".\nWould you like to play again? y/n");  
                    PlayAgain();  
                }  
                else if (total < dealerTotal)  
                {  
                    Console.WriteLine("\nSorry, you lost! The dealer 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 total was " + dealerTotal + ".\nWould you like to play again?");  
                PlayAgain();
            }  
            else if (total > 21)
            {  
                Console.WriteLine("\nYou busted, therefore you lost. Sorry. The dealer 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);
                }
            }
        }  
    }  
}