2010-05-26 7 views
10

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

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

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

+0

http://stackoverflow.com/questions/tagged/code-golf –

+0

, если вы не хотите обучаться, читаете книгу или ECMA. http://www.ecma-international.org/publications/standards/Ecma-334.htm – Luiscencio

ответ

6

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

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

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

4

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

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

+0

Да, я мог бы написать типичную игру. Это время вашей скорости и точности. Также я хочу провести некоторое время только на C#, прежде чем перейти к C# + XNA framework – user377419

+1

XNA? Я рекомендую сначала попробовать SlimDX, чтобы получить общее представление о 3D-графике. Вы не можете просто погрузиться прямо в разработку видеоигр [это единственное, что XNA действительно хорошо для = /] – Warty

0

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

+0

Большинство приложений не требуют рекурсивного программирования. –

+1

@WalterA: И это стоит нисходящего? Рекурсия - признанный метод программирования, и ваше предложение состоит в том, что noob не должен его изучать? Вы должны понизить голос решения Sudoku, так как подавляющее большинство приложений не имеет ничего общего с судоку. И, так вот, вы откладываете пятилетние ответы? – Cyberherbalist

+0

ok, я расстегнул нижний предел –

3

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

Подсказка:

старт с

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

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

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

1

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

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

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

0

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

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

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

0

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

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

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

0

Ну они все сложно сделать, поэтому я предлагаю использовать метод копирования пасты с моим блэкджек приложение
забудьте сослаться добавить речевую систему Synth

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); 
       } 
      } 
     } 
    } 
} 
+4

Well Copy-Pase - это ТОЛЬКО В ПРОГРАММИРОВАНИИ! – Robik

+2

Кажется, что OP специально просил не обучаться, и поэтому определенно не копировал/вставлял идеи - «Я хочу сделать все сам». – colllin