2010-05-26 15 views
10

Quindi, Im un programmatore C# iniziale. Conosco la sintassi di base e cose semplici come le istruzioni e i loop (anche metodi e classi). Ho usato solo le app per console in questo momento non ha ancora avuto problemi con i moduli di Windows.C# - Idee programma di console per Noob

Così semplici idee per le app che introducono cose nuove importanti per la programmazione in C#.

Inoltre, NESSUN tutorial. Voglio fare tutto da solo.

+0

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

+0

se non vuoi tutorial, leggi un libro o l'ECMA. http://www.ecma-international.org/publications/standards/Ecma-334.htm – Luiscencio

risposta

6

Sono un grande fan di Halo, e una delle prime cose che ho fatto con C# è stata scrivere un'applicazione che ha scaricato e analizzato le mie statistiche di gioco online durante la riproduzione di Halo 2. Da lì, ho caricato tutte le informazioni in un database e lo ha nuovamente visualizzato in ASP.NET. In retrospettiva, il codice era orrendo, ma è stato un esercizio divertente.

Un altro esercizio è stato analizzare il file XML per la mia libreria musicale di iTunes, caricarlo in un database e (ovviamente) visualizzarne i bit in ASP.NET.

In ogni caso, trova i modi per lavorare con le cose che ti piacciono, che si tratti di giochi, musica, televisione o altro.

4

Un gioco semplice potrebbe essere un buon inizio ma quelle domande sul codice golf possono essere un po 'più avanzate.

Perché non provare a scrivere un gioco 'test your reflexes', in cui si emette una lettera e il tempo necessario per inserire la lettera in questione? Quindi visualizza il tempo di risposta e il miglior tempo di risposta fino ad oggi.

+0

Sì, potrei fare un gioco di battitura. Vanta la tua velocità e precisione .. Anche io voglio passare un po 'di tempo su C# prima di passare a C# + XNA framework – user377419

+1

XNA? Vi consiglio di provare prima SlimDX, per avere un'idea generale della grafica 3D. Non puoi semplicemente tuffarti direttamente nello sviluppo di videogiochi [che è l'unica cosa che XNA è veramente adatta a = /] – Warty

0

Scrivi qualcosa di ricorsivo, come una routine che calcola il valore di un fattoriale.

+0

La maggior parte delle applicazioni non richiede una programmazione ricorsiva. –

+1

@WalterA: E questo vale un downvote? La ricorsione è una tecnica di programmazione riconosciuta e il tuo suggerimento è che un noob non dovrebbe impararlo? Dovresti anche svitare la risposta del risolutore di Sudoku, perché la maggior parte delle applicazioni non ha nulla a che fare con Sudoku. E quindi qui stai ridimensionando le risposte di cinque anni? – Cyberherbalist

+0

ok, ho annullato il downvote –

3

Una volta ho dovuto imparare bash scripting per linux scrivendo il gioco hangman, dovrebbe essere un buon esempio per un'app console in C#.

Suggerimento:

partenza con

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

Un modo divertente per sviluppare le tue abilità è attraverso code katas e programmazione concorsi come Top Coder e Google Code Jam. Ci sono un sacco di problemi di esempio che ti faranno pensare, e molti sono dotati di soluzioni che puoi confrontare dopo aver finito.

Anche se sei stato uno sviluppatore per un po 'di tempo, questi tipi di problemi semplici ti consentono di incorporare nuove pratiche nel tuo stile di programmazione (ad esempio, un kata è un ottimo modo per iniziare a imparare i principi del TDD). Inoltre, creano distrazioni divertenti.

1

Penso che risolvere i problemi Top-Coder sarà un'ottima pratica! È particolarmente adatto poiché tutti i loro problemi sono basati su console, e ti faranno aumentare non solo la tua conoscenza di C#, ma anche le tue capacità di problem solving e la conoscenza della struttura dati/algoritmi.

Detto questo, probabilmente non imparerai molto su cose nuove o più specifiche della piattaforma su C#, come linq, gestori di eventi, threading, libreria di attività parallele, ecc. Per questo, il meglio sarebbe trovare un buon C# prenotare e attraversarlo.

Un altro modo potrebbe essere fare piccoli giochi. Conosco la sua console, ma in realtà puoi creare giochi come Snake, Pac-man, impiccato, ecc., Ovviamente con un po 'di fantasia in più, ma funziona ancora e i giochi sono ottimi esercizi di apprendimento (e sono divertenti da mostrare alle persone)

0

Recentemente ho sviluppato un risolutore di sudoku e un risolutore 8Queens.

Ho creato il solutore di sudoku in console in cui il puzzle stesso era stato codificato nel progetto. Potresti provare a rendere possibile l'utilizzo di un file di testo come input. Ho implementato un algoritmo di forza bruta che funziona con la ricorsione. È bello sviluppare un tale risolutore e una volta che sarai pronto ci saranno probabilmente molti miglioramenti possibili.

Il solutore 8Queens mi ha imparato due cose. Per prima cosa ho dovuto creare una scacchiera, che ho fatto con le forme. Mi ha imparato a proposito di penne, pennelli e disegni. Inoltre è stata una bella pratica per la ricorsione che devi fare molto prima di capirlo ...

0

Suggerirei di scrivere uno strumento da riga di comando che faccia qualcosa che forse non può essere fatto da qualcos'altro.

L'unica cosa che viene in mente è qualcosa che applica i fogli di stile XSL ai file XML e sputa l'output. C'è codice di esempio in tutto il mondo, ma nessun semplice strumento di Windows che ho visto.

I potenziali vantaggi di questo approccio sono che si finisce con uno strumento utile e si ha quindi la possibilità di renderlo open source per ottenere input/supporto aggiuntivi.

0

Beh sono tutti difficili da fare, quindi io suggerisco di usare il metodo copia incolla con la mia app Blackjack
ricordarsi di riferimento aggiungere discorso sistema 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

Bene Copy-Pase è la cosa peggiore in fase di programmazione! – Robik

+2

Sembra che l'OP chiedesse specificamente non-tutorial e quindi sicuramente idee non copia/incolla - "Voglio fare tutto da solo". – colllin

Problemi correlati