源代碼
主要類別:
使用系統;
命名空間數量
{
///& lt;總結& gt
///guess的概要描述。
///& lt;/summary & gt;
班級猜測
{
color input color text = new color input();//控制臺顏色輸出類
私有字符串choose = null//用於菜單選擇
private int[]random = new int[4];//隨機生成的4位數
private int[]guess = new int[4];//存儲用戶猜測的4位數字。
private bool又= false//您想繼續遊戲而不是開始壹個新遊戲嗎?
//構造方法
公眾猜測()
{
}
//顯示遊戲開始的壹些信息。
無效遊戲()
{
彩色文本。SetTextColor((int) ColorInput)。前景.藍色);//設置控制臺輸出字符的顏色。
控制臺。writeline(" \ t \ t \ t \ t數字猜謎遊戲\ n \ n ");
彩色文本。SetTextColor((int) ColorInput)。前景.綠色);
控制臺。寫(" \ t遊戲描述:遊戲開始,妳要猜壹個隨機產生的四位數。"
+“數字”);
彩色文本。SetTextColor((int) ColorInput)。前景.紅色);
控制臺。寫(“位置”);
彩色文本。SetTextColor((int) ColorInput)。前景.綠色);
控制臺。寫(“和”);
彩色文本。SetTextColor((int) ColorInput)。前景.紅色);
控制臺。write(" size ");
彩色文本。SetTextColor((int) ColorInput)。前景.綠色);
控制臺。寫(“妳必須猜對才能贏。有點像彩票,但是妳壹次只有壹張”);
彩色文本。SetTextColor((int) ColorInput)。前景.紅色);
控制臺。寫(" 10 ");
彩色文本。SetTextColor((int) ColorInput)。前景.綠色);
控制臺。寫(“第二次機會~ ~!!!\ n ");
彩色文本。SetTextColor((int) ColorInput)。前景.紫色);
控制臺。WriteLine(" \ t \ t \ t \ t \ t \ t-By H _ Q ");
彩色文本。SetTextColor((int) ColorInput)。前景.白色);
控制臺。WriteLine(" \ t \ t \ t \ t \ t \ t菜單(請選擇)");
console . writeline(" \ t \ t \ t 1。go”);
Console.writeline ("\ t \ t \ t 0。退出”);
init();
}//遊戲
void初始化()
{
選擇=控制臺。ReadLine();
//判斷用戶的選擇
而(選擇!= "0")
{
如果(選擇。等於(" 1 "))
{
init game();
打破;
}
//10次時,判斷是否繼續遊戲。
如果(選擇。equals(" 2 ")& amp;& amp再次)
{
input();
再次=假;
}
其他
{
控制臺。寫("請按遊戲菜單,輸入1或0:");
選擇=控制臺。ReadLine();
繼續;
}
} //當
} // Init()
//遊戲開始
void InitGame()
{
Random r = new Random();
int ran = r.Next(1000,9999);//隨機生成4位數下限1000上限9999。
//將4位數字存儲在數組中。
for(int I = 3;我& gt= 0;我-)
{
random[I]= ran % 10;
ran/= 10;
}
input();
} // InitGame()
//接受用戶輸入的數字
無效輸入()
{
int count = 0;//用於記錄用戶猜測的次數。10猜對了就輸了。
bool isFormat = false
//如果輸入的不正確周期需要用戶輸入。
做
{
控制臺。寫(“請輸入妳的4位數猜測值:“”);
字符串inputNum = Console。ReadLine();
//檢查用戶輸入的合法性。
if (inputNum。長度== 4)
{
int j = 0;
foreach (char ch in inputNum)
{
如果(Char。IsNumber(ch))
{
j++;
}
}
如果(j == 4)
{
//將正確的輸入存儲在猜測數組中。
for(int I = 0;我& lt4;i ++)
{
guess[i] = int。解析(inputNum。Substring(i,1));
}
count++;
is format = Compare(count);
}
其他
{
isFormat = false
}
}
其他
{
isFormat = false
}
} while(count & lt;10。& ampis format = = false);
}//Input()
//比較用戶猜測的數字和隨機生成的數字之間的位置和每個數字的大小。
布爾比較(整數計數)
{
string sameG = null//用於標識已經評級的用戶猜測的數字。
string sameR = null//用於標識被判斷為相等的隨機生成的數。
int s = 0;//用於標識用戶猜測大小的位數。
int p = 0;//用於標識用戶正確位置的位數。
//序貫判斷用於排除壹次猜對的情況。
for(int I = 0;我& lt4;i ++)
{
if(猜測[i] ==隨機[i])
{
p++;
s++;
sameG+= I;
sameR+= I;
}
}
//第壹次就猜對的情況。
if(p = = 4 & amp;& amps == 4)
{
win();
返回true
}
其他
{
for(int g = 0;g & lt4;g ++)
{
for(int r = 0;r & lt4;r ++)
{
//如果順序比較中沒有人猜對,sameG sameR為null。
//如果不為空,那麽判斷出來的都被IndexOf方法排除了,不需要再比較了。
//註意:IndexOf(string)此方法從字符串中查找相同的字符,如果沒有找到則返回-1。
if (sameG == null || sameR == null ||
(sameR。index of(r . ToString())= =-1。& amp薩姆格。index of(g . ToString())= =-1))
{
if (guess[g] == random[r])
{
s++;
sameG+= g;
sameR+= r;
打破;
}
}
}
}
//在10次內猜對。
if(s = = 4 & amp;& ampp == 4)
{
win();
返回true
}
其他
{
if(count & gt;= 10)
{
lost();
返回true
}
其他
{
控制臺。WriteLine("猜對的數字個數是{0},猜對的位置個數是{1},妳還有{2}個機會\n ",s,p,10-count);
返回false
}
}
}
} //Compare()
//贏~
void Win()
{
彩色文本。SetTextColor((int)ColorInput)。前景.綠色);
控制臺。WriteLine(" \ t \ t \ t \ t \ t \ t \ t \ t \ t win \ n ");
彩色文本。reset color();//恢復控制臺的默認輸出顏色。
控制臺。WriteLine(" \ t \ t \ t \ t \ t \ t菜單");
console . writeline(" \ t \ t \ t 1。新遊戲”);
控制臺。WriteLine("\t\t\t\t0。退出”);
彩色文本。SetTextColor((int)ColorInput)。前景.白色);
init();
}
//再接再厲
無效丟失()
{
彩色文本。SetTextColor((int)ColorInput)。前景.紅色);
控制臺。WriteLine("\t\t\t\t妳輸了");
彩色文本。reset color();
控制臺。WriteLine(" \ t \ t \ t \ t \ t \ t菜單");
console . writeline(" \ t \ t \ t 1。新遊戲”);
控制臺。WriteLine("\t\t\t\t2。繼續”);
控制臺。WriteLine("\t\t\t\t0。退出”);
再次=真;//logo就是繼續這樣,不重新生成隨機的4位數。
彩色文本。SetTextColor((int)ColorInput)。前景.白色);
init();
}
公共靜態void Main(string[] args)
{
猜遊戲=新猜();
遊戲。game();
}
}//類
} //名稱空間
控制臺顏色輸出類別:
使用系統;
使用系統。Runtime . InteropServices
命名空間數量
{
//用於更改控制臺輸出的顏色。
公共類ColorInput
{
private int hConsoleHandle
private const int STD _ OUTPUT _ HANDLE =-11;
[DllImport("kernel32.dll")]
私有靜態extern int GetStdHandle(int nstd handle);
[DllImport("kernel32.dll")]
私有靜態extern int SetConsoleTextAttribute(int hConsoleOutput,
int watt attributes);
//構造方法
公共顏色輸入()
{
hConsoleHandle = GetStdHandle(STD _ OUTPUT _ HANDLE);
}
//自己嘗試高亮顏色。
公共枚舉前景
{
綠色= 10,
藍色,
紅色,
紫色,
戈德,
懷特(姓氏)
}
公共void SetTextColor(int color)
{
SetConsoleTextAttribute(hConsoleHandle,color);
}
public void ResetColor()
{
SetConsoleTextAttribute(hConsoleHandle,7);
}
}//類
}//名稱空間
Net 2003中C#復雜控制臺的清屏類
使用系統;
使用系統。Runtime . InteropServices
使用系統。文本;
命名空間數量
{
類StdHandleEnum
{
公共const int STD _ INPUT _ HANDLE =-10;
public const int STD _ OUTPUT _ HANDLE =-11;
公共const int STD _ ERROR _ HANDLE =-12;
};
//這個結構包含壹個屏幕坐標。
cls類
{
內部結構坐標
{
公短X;
公短Y;
}
//屏幕緩沖區信息
[StructLayout(LayoutKind。順序,Pack=1)]
內部結構控制臺_屏幕_緩沖區_信息
{
公共坐標大小;
公共坐標p 1;
公短a 1;
公短w 1;
公短w2;
公短w3;
公短w4;
公共坐標m 1;
}
/*
* Kernel32.dll的四個職能部門。
*/
//返回任何標準輸入/輸出的句柄。
[DllImport("kernel32.dll")]
public static extern int GetStdHandle(int nstd handle);
//返回控制臺緩沖區信息
[DllImport("kernel32.dll")]
public static extern bool GetConsoleScreenBufferInfo(int hConsoleOutput,out CONSOLE _ SCREEN _ BUFFER _ INFO lpConsoleScreenBufferInfo);
//放置光標
[DllImport("kernel32.dll")]
public static extern bool SetConsoleCursorPosition(int hConsoleOutput,COORD dwCursorPosition);
//不知道怎麽翻譯
FillConsoleOutputCharacter()允許我們放置
//控制臺屏幕上的任何字符。使用空間
//清除顯示區域。
[DllImport("kernel32.dll ",SetLastError=true,CharSet=CharSet。自動)]
public static extern bool FillConsoleOutputCharacter(int hconsoloutput,short cCharacter,int nLength,COORD WriteCoord,out int lpnumberofcharswrited);
[靜態線程]
公共靜態void Clear()
{
//需要詢問Windows有關控制臺屏幕的信息
//緩沖區設置。
控制臺_屏幕_緩沖區_信息CSBI
//輸出設備的句柄。
int hOut
//寫入屏幕的字符數。
int CharOut
//主光標位置。
坐標首頁;
//清除屏幕。
//首先獲取控制臺屏幕的句柄。
hOut = GetStdHandle(StdHandleEnum。STD _ OUTPUT _ HANDLE);
//獲取所需的控制臺屏幕緩沖區信息。
GetConsoleScreenBufferInfo(hOut,out CSBI);
//設置光標的初始位置。
回家。x = 0;
回家。y = 0;
//用空格填充控制臺。
FillConsoleOutputCharacter(hOut,
(短)“”,
CSBI。尺寸. X * CSBI。大小。Y,
家,
out CharOut);
//將光標放在左上角。
SetConsoleCursorPosition(hOut,Home);
控制臺。writeline(" \ t \ t \ t \ t game on ~ \ n ");
} // cls
}//類
}//名稱空間