2016-04-29 41 views
0

我正在做一个编程C#的Web类。我想说蝙蝠的权利,我不希望你们为我做我的工作。现在到我的具体/通用的问题。我习惯于编写顺序代码。当我尝试将我的工作代码移到我深入了解的类/方法中时。如何将此代码移至类/方法?

下面的代码示例用于猜谜游戏1-100。我已经尝试了四个小时,直接破解代码到一个单独的类。我设法让用户输入或RND进入课堂。然后主要的逻辑崩溃了。如果RND模块是静态的,但用户输入不是Static等,我似乎得到了最好的结果。最后,我回到了从头开始学习Main的所有内容,并转向您寻求一般指导原则。

我需要在我的脑海中得到这个,所以我可以每次清理我的Main。从正在工作的班级程序忽略屏幕开始。

<--------Code Below 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Uppgift3GissaTalet 
{ 

    static class Screen 
    { 
     // Screen - Tools that I use every time ignore until end of screen======================================= > 

     // Methods for screen handling: 
     // 
     // Clear Screen ------------------------------------------ 
     static public void cls() 
     { 
      Console.Clear(); 
     } 

     // Set Curser Posittion ---------------------------------- 
     static public void cup(int column, int rad) 
     { 
      Console.SetCursorPosition(column, rad); 
     } 

     // Key Input -------------------------------------------- 
     static public ConsoleKeyInfo inKey() 
     { 
      ConsoleKeyInfo in_key; in_key = Console.ReadKey(); return in_key; 
     } 

     // String Input ----------------------------------------- 
     static public string inStr() 
     { 
      string in_string; in_string = Console.ReadLine(); return in_string; 
     } 

     // Int Input ------------------------------------------- 
     static public int inInt() 
     { 
      int int_in; try { int_in = Int32.Parse(Console.ReadLine()); } 
      catch (FormatException) { Console.WriteLine("Input Error \b"); int_in = 0; } 
      catch (OverflowException) { Console.WriteLine("Input Owerflow\b"); int_in = 0; } 
      return int_in; 
     } 

     // Float Input ------------------------------------------- 
     static public float inFloat() 
     { 
      float float_in; try { float_in = Convert.ToSingle(Console.ReadLine()); } 
      catch (FormatException) { Console.WriteLine("Input Error \b"); float_in = 0; } 
      catch (OverflowException) { Console.WriteLine("Input Owerflow\b"); float_in = 0; } 
      return float_in; 
     } 

     // Meny ------------------------------------------------ 
     static public int meny(string rubrik, string m_val1, string m_val2) 
     { // Meny med 2 val --------------------- 
      int menSvar; menyRubrik(rubrik); menyRad(m_val1); menyRad(m_val2); menSvar = menyInm(); 
      return menSvar; 
     } 

     static public int meny(string rubrik, string m_val1, string m_val2, string m_val3) 
     { // Meny med 3 val --------------------- 
      int menSvar; menyRubrik(rubrik); menyRad(m_val1); menyRad(m_val2); menyRad(m_val3); menSvar = menyInm(); 
      return menSvar; 
     } 

     static public int meny(string rubrik, string m_val1, string m_val2, string m_val3, string m_val4) 
     { // Meny med 4 val --------------------- 
      int menSvar; menyRubrik(rubrik); menyRad(m_val1); menyRad(m_val2); menyRad(m_val3); menyRad(m_val4); menSvar = menyInm(); 
      return menSvar; 
     } 

     static public int meny(string rubrik, string m_val1, string m_val2, string m_val3, string m_val4, string m_val5) 
     { // Meny med 5 val --------------------- 
      int menSvar; menyRubrik(rubrik); menyRad(m_val1); menyRad(m_val2); menyRad(m_val3); menyRad(m_val4); menyRad(m_val5); menSvar = menyInm(); 
      return menSvar; 
     } 

     static public int meny(string rubrik, string m_val1, string m_val2, string m_val3, string m_val4, string m_val5, string m_val6) 
     { // Meny med 6 val --------------------- 
      int menSvar; menyRubrik(rubrik); menyRad(m_val1); menyRad(m_val2); menyRad(m_val3); menyRad(m_val4); menyRad(m_val5); ; menyRad(m_val6); menSvar = menyInm(); 
      return menSvar; 
     } 

     static void menyRubrik(string rubrik) 
     { // Meny rubrik -------- 
      cls(); Console.WriteLine("\n\t {0}\n----------------------------------------------------\n", rubrik); 
     } 

     static void menyRad(string menyVal) 
     { // Meny rad -------- 
      Console.WriteLine("\t {0}", menyVal); 
     } 

     static int menyInm() 
     { // Meny inmating ------ 
      int mVal; Console.Write("\n\t Menyval : "); mVal = inInt(); return mVal; 
     } 

     // Screen - End <======================================== 
    } // screen <---- 

    class Program 
    { 
     static void Main(string[] args) 
     {//Foreign bla bla. 

      string rubrik = "\tGissa ett tal mellan 1 och 100: "; 
      Random rnd = new Random(); 
      int slumpTal = rnd.Next(1, 101); 
      int svar; 
      int count = 0; 

      Screen.cls(); 
      //Console.Write("\t\t" + slumpTal);  //Used for fixing logic. 
      Console.WriteLine("\n\t {0}\n\t----------------------------------------------\n", rubrik); 
      Console.Write("\tSkriv ditt tal: "); 
      svar = Screen.inInt(); 
      count++; 

      //Foreign yadda yadda. 
      do 
      { 
       if (svar < 1 || svar > 100) //Påminn användaren om att hålla sig inom ramarna. 
       { 
        System.Console.Write("\tTalet du söker är inom intervallet 1-100!", svar); 
        Console.Write("\n\tSkriv ditt tal: "); 
        svar = Screen.inInt(); 
       } 

       else if (slumpTal > svar && (slumpTal - svar < 6)) //Getting hotter. 
       { 
        System.Console.Write("\tTalet du söker är större än {0} men du är nära nu!", svar); 
        Console.Write("\n\tSkriv ditt tal: "); 
        svar = Screen.inInt(); 
        count++; 
       } 

       else if (slumpTal > svar) //Ge ledtråd om att användaren måste skriva ett större tal. 
       { 
        System.Console.Write("\tTalet du söker är större än {0}.", svar); 
        Console.Write("\n\tSkriv ditt tal: "); 
        svar = Screen.inInt(); 
        count++; 
       } 

       else if (slumpTal < svar && (svar - slumpTal < 6)) //Getting hotter. 
       { 
        System.Console.Write("\tTalet du söker är mindre än {0} men du är nära nu!", svar); 
        Console.Write("\n\tSkriv ditt tal: "); 
        svar = Screen.inInt(); 
        count++; 
       } 

       else if (slumpTal < svar) //Ge ledtråd om att användaren måste skriva ett lägre tal. 
       { 
        System.Console.Write("\tTalet du söker är mindre än {0}.", svar); 
        Console.Write("\n\tSkriv ditt tal: "); 
        svar = Screen.inInt(); 
        count++; 
       } 

      } while (svar != slumpTal); 

      Screen.cls(); 
      Console.ForegroundColor = ConsoleColor.Green; //Changing colour(sic!) at win. 
      Console.Write("\n\n\t\tBra jobbat, du löste problemet. Rätt svar är {0}!\n\t\tDu tog {1} försök på dig.", slumpTal, count); 
      Screen.inKey(); 

     }//<------------Main 
    }//<===========Program 
} 
+0

我真的不喜欢你格式化你的代码的方式。它如此团结起来使阅读变得更加困难。看看关于C#编码约定的文档https://msdn.microsoft.com/en-us/library/ff926074.aspx?f=255&MSPPError=-2147217396 –

+0

我的第一篇文章,所以我犯规了。我会通读它并表现得更好。 Mea Culpa。 – Paladin

+0

没关系,如果你不习惯OOP,那么你就不习惯构建布局的“更优选”方式。这只是为了让它可读。大多数分号后使用换行符; –

回答

0

我刚刚试图将其分解一点。不用英文命名就很难解释你创建的内容,但是原理是一样的。

在您创建的主类中创建对象。

class Program 
{ 
    static void Main(string[] args) 
    { 
     string rubrik; 
     string m_val1; 
     string m_val2; 

     Utilities utility = new Utilities(); 
     string str = Console.ReadLine(); 
     int myint = utility.inInt(str); 

     MyClass myclass = new MyClass(); 

     // or   
     // getting these values before doing so 
     MyClass class = new MyClass(rubrik, m_val1, m_val2); 

     myclass.Method(myint); // etc 

将传递中的变量可以在类方法 使用,也可以成为这个类的一个实例initialisers。

public class MyClass 
{ 

    // class members 
    // eg ??? 
    public string Rubrik {get; set;} 

    // constructors 

    public MyClass(){} 

    public MyClass(string rubrik, string m_val1, string m_val2) 
    { 
     Rubrik = rubrik; 
     // and so on. 

    } 


    // TODO .. add these menyRad(m_val1); 
    // menyRad(m_val2); menyRad(m_val3); 
    // menyRad(m_val4); menSvar = menyInm(); 

    public int meny(string rubrik, string m_val1, string m_val2) 
    { 
     int menSvar; 
     // Use class members to do some calculation and return the value 

     return menSvar; 
    } 
    // etc 



} 

为任何内务管理方法创建一个单独的实用程序类。

public class Utilities 
{ 
    // Int Input ------------------------------------------- 
    public int inInt(string input) 
    { 
     int int_in; 
     try 
     { 
      int_in = Int32.Parse(intput); 
     } 
     catch (FormatException) 
     { 
      Console.WriteLine("Input Error \b"); 
      int_in = 0; 
     } 
     catch (OverflowException) 
     { 
      Console.WriteLine("Input Owerflow\b"); 
      int_in = 0; 
     } 
     return int_in; 
    } 

    // Float Input ------------------------------------------- 
    public float inFloat(string input) 
    { 
     ... etc 
    } 

} 
+0

另外,最好还是养成在单独文件中创建类的习惯(现在),请看看我如何格式化代码。 –

+0

非常感谢!现在我对如何开始工作有一些了解。重点是我这样做,我只需要一个指针。周末得救。 ; D – Paladin

+0

@Paladin很好,我们都卡住了,我明白你在问什么。在我掌握OOP之前,我对程序编程更加自如。大多数人都是相反的。此外,感谢SO上的人的一个好方法是鼓掌并接受答案(我知道你还没有代表赞成)。 –