С# - Идеи для консольных программ для 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);
}
}
}
}
}