【发布时间】:2016-04-29 14:28:26
【问题描述】:
我正在做一个 C# 编程的网络课程。我想说的是,我不想让你们为我做我的工作。现在到我的具体/一般问题。我习惯于编写顺序代码。当我尝试将我的工作代码移动到我深入渡渡鸟的类/方法时。
下面的代码示例适用于猜谜游戏 1-100。我已经连续尝试了四个小时,将代码分解到一个单独的类中。我设法让用户输入或 RND 进入一个类。然后 main 中的逻辑崩溃了。如果 RND 块是静态的,但用户输入不是静态的等等,似乎我会得到最好的结果。最后我回到了 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
}
【问题讨论】:
-
我的第一篇文章,所以我犯规了。我会通读它并表现得更好。过失。
-
那么真正的问题是什么?
-
抱歉不清楚。 main 中的代码正在运行,但我想尽可能多地分解为一个新类。如果我将随机函数分开,逻辑就会崩溃。如果我打破用户输入,其他东西就会崩溃。是否应该将所有代码作为一个整体移动?
-
你有导师吗?这就是他们的目的——问。对于 SO 问题太宽泛(您是否希望有人接受您的代码并完全修复它,或者您期望什么作为答案?),除非您指出您遇到问题的特定地方。
-
伊薇特:好的。我确实像我一样从 VS Express 复制粘贴。