標籤:
結構體:相當於是我們自己定義的一種複雜的類型。
常見簡單類型:int... double float bool char string
常見複雜類型:DateTime 數群組類型
生活中大部份的對象都是複合型的對象。
如何定義結構體類型?
一般來說結構體的定義要放在class的外面或class的裡面,盡量不放在Main的裡面。
struct 自訂類型名
{
public 變數類型 變數名;
......;
......;
......;
}
例如:
struct YuanGong //自訂的資料類型。用來描述員工的資訊。
{
public string NO;
public string Name;
public int Age;
public string Nation;
public bool Sex;
}
如何用自訂的類型來定義變數?
自訂類型名 變數 = new 自訂類型名();
如何使用自訂類型的變數?
變數.子變數 = "xxxx";
Console.WriteLine(變數名.子變數);
例如:
//定義自訂類型的變數
YuanGong zhangsan = new YuanGong();
//給變數賦值
zhangsan.NO = "Y001";
zhangsan.Name = "張三";
zhangsan.Age = 22;
zhangsan.Sex = true;
zhangsan.Nation = "漢族";
//對變數取值
Console.WriteLine(zhangsan.NO+"\t"+zhangsan.Name+"\t"+zhangsan.Age);
Console.WriteLine(zhangsan.Nation+"\t"+(zhangsan.Sex?"男":"女"));
例題1.描述員工資訊
struct YuanGong //自訂的資料類型。用來描述員工的資訊。 { public string NO; public string Name; public int Age; public string Nation; public bool Sex; public LianXiFangShi LianXi; } struct LianXiFangShi { public string QQ; public string WeiXin; public string Email; public string Telephone; public string Address; public string ZipCode; } class Program { static void Main(string[] args) { YuanGong zhangsan = new YuanGong(); zhangsan.NO = "Y001"; zhangsan.Name = "張三"; zhangsan.Age = 22; zhangsan.Sex = true; zhangsan.Nation = "漢族"; zhangsan.LianXi.QQ = "434354546"; //zhangsan.LianXi.WeiXin = "張三三"; //zhangsan.LianXi.Email = "[email protected]"; zhangsan.LianXi.Address = "張店區張家胡同"; zhangsan.LianXi.ZipCode = "25000"; zhangsan.LianXi.Telephone = ""; YuanGong lisi = new YuanGong(); lisi.NO = "Y002"; lisi.Name = "李四"; lisi.Age = 25; lisi.Sex =false; lisi.Nation = "回族"; Console.WriteLine("**********張三的個人資訊***********"); Console.WriteLine(zhangsan.NO+"\t"+zhangsan.Name+"\t"+zhangsan.Age); Console.WriteLine(zhangsan.Nation+"\t"+(zhangsan.Sex?"男":"女")); Console.WriteLine("連絡方式:"); Console.WriteLine( "QQ:"+(zhangsan.LianXi.QQ==null?"無":zhangsan.LianXi.QQ)+"\t"//若沒輸入qq,列印“無” +":"+(zhangsan.LianXi.WeiXin == null?"無":zhangsan.LianXi.WeiXin)+"\t" +"手機:"+(zhangsan.LianXi.Telephone==null?"無":zhangsan.LianXi.Telephone)+"\t" +"郵箱:"+(zhangsan.LianXi.Email==null?"無":zhangsan.LianXi.Email)+"\t" +"地址:"+zhangsan.LianXi.Address+"\t"+zhangsan.LianXi.ZipCode); }
例題、兩人對戰遊戲
struct Ren { public string Name; public int Blood; public int Attack; public int Defend; public int Quick; } struct WuGong { public string Name; public int Attack; } static void Main(string[] args) { WuGong[] wg = new WuGong[3]; wg[0].Name = "辟邪劍法"; wg[0].Attack = 500; wg[1].Name = "降龍十八掌"; wg[1].Attack = 600; wg[2].Name = "暗然消魂掌"; wg[2].Attack = 400; Ren r1 = new Ren(); Ren r2 = new Ren(); //初化兩個戰鬥人員的屬性。 Console.Write("請輸入第一個戰士姓名:"); r1.Name = Console.ReadLine(); Console.Write("請輸入第二個戰士姓名:"); r2.Name = Console.ReadLine(); //產生血量 Random rand = new Random(); r1.Blood = rand.Next(1000) + 1000; r2.Blood = rand.Next(1000) + 1000; //產生攻防 r1.Attack = rand.Next(50) + 50; r2.Attack = rand.Next(50) + 50; r1.Defend = rand.Next(50) + 50; r2.Defend = rand.Next(50) + 50; //產生身法 r1.Quick = rand.Next(100); r2.Quick = rand.Next(100); Console.WriteLine("姓名:" + r1.Name + "\t生命力:" + r1.Blood+"\t攻擊力:"+r1.Attack+"\t防禦力:"+r1.Defend+"\t敏捷度:"+r1.Quick); Console.WriteLine("VS"); Console.WriteLine("姓名:" + r2.Name + "\t生命力:" + r2.Blood + "\t攻擊力:" + r2.Attack + "\t防禦力:" + r2.Defend + "\t敏捷度:" + r2.Quick); Console.WriteLine("按任意鍵開始..."); Console.ReadKey(); while(true) { //跳出迴圈。 if(r1.Blood <=0 && r2.Blood<=0) { Console.WriteLine(r1.Name+"與"+r2.Name+"同歸於盡了!"); break; } if(r1.Blood<=0) { Console.WriteLine(r2.Name+"把"+r1.Name+"KO了~!"); break; } if (r2.Blood <= 0) { Console.WriteLine(r1.Name + "把" + r2.Name + "KO了~!"); break; } //對戰 //大招 int dz1 = rand.Next(10); //r2的大招 if (dz1 >= 8) //大招 { WuGong w1 = wg[rand.Next(3)]; int b1 = rand.Next(100); //r1失掉的血 int gj1 = rand.Next(100) - 50; //為了浮動r1的攻擊 int fy1 = rand.Next(100) - 50;//為了浮動r2的防禦 b1 = (b1 + (r2.Attack + gj1+w1.Attack) - (r1.Defend + fy1)) < 0 ? 0 : (b1 + (r2.Attack + gj1+w1.Attack) - (r1.Defend + fy1)); r1.Blood -= b1; if (r1.Blood < 0) { r1.Blood = 0; } //稍待一下。 System.Threading.Thread.Sleep(2000); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(r2.Name + "使用大招"+w1.Name+"發起攻擊," + r1.Name + "失掉生命力" + b1 + "點!"); Console.ResetColor(); Console.WriteLine(); } else //平常招式 { int sf1 = rand.Next(80); if (r1.Quick - sf1 >= 0) { Console.WriteLine(r1.Name + "躲過了" + r2.Name + "攻擊"); } else { int b1 = rand.Next(100); //r1失掉的血 int gj1 = rand.Next(100) - 50; //為了浮動r1的攻擊 int fy1 = rand.Next(100) - 50;//為了浮動r2的防禦 b1 = (b1 + (r2.Attack + gj1) - (r1.Defend + fy1)) < 0 ? 0 : (b1 + (r2.Attack + gj1) - (r1.Defend + fy1)); r1.Blood -= b1; if (r1.Blood < 0) { r1.Blood = 0; } //稍待一下。 System.Threading.Thread.Sleep(2000); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(r2.Name + "發起攻擊," + r1.Name + "失掉生命力" + b1 + "點!"); Console.ResetColor(); Console.WriteLine(); } } //稍待一下。 System.Threading.Thread.Sleep(2000); int dz2 = rand.Next(10); //r2的大招 if (dz2 >= 8) //大招 { WuGong w1 = wg[rand.Next(3)]; int b2 = rand.Next(100); //r1失掉的血 int gj1 = rand.Next(100) - 50; //為了浮動r1的攻擊 int fy1 = rand.Next(100) - 50;//為了浮動r2的防禦 b2 = (b2 + (r1.Attack + gj1 + w1.Attack) - (r2.Defend + fy1)) < 0 ? 0 : (b2 + (r1.Attack + gj1 + w1.Attack) - (r2.Defend + fy1)); r2.Blood -= b2; if (r2.Blood < 0) { r2.Blood = 0; } //稍待一下。 System.Threading.Thread.Sleep(2000); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(r1.Name + "使用大招" + w1.Name + "發起攻擊," + r2.Name + "失掉生命力" + b2 + "點!"); Console.ResetColor(); Console.WriteLine(); } else { int sf2 = rand.Next(80); if (r2.Quick - sf2 >= 0) { Console.WriteLine(r2.Name + "躲過了" + r1.Name + "攻擊"); } else { int b2 = rand.Next(100);//r2失掉的血 int gj2 = rand.Next(100) - 50; //為了浮動r1的攻擊 int fy2 = rand.Next(100) - 50;//為了浮動r2的防禦 b2 = (b2 + (r1.Attack + gj2) - (r2.Defend + fy2)) < 0 ? 0 : (b2 + (r1.Attack + gj2) - (r2.Defend + fy2)); r2.Blood -= b2; if (r2.Blood < 0) { r2.Blood = 0; } Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine(r1.Name + "發起攻擊," + r2.Name + "失掉生命力" + b2 + "點!"); Console.ResetColor(); Console.WriteLine(); } } Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("姓名:" + r1.Name + "生命力:" + r1.Blood + "\t"); Console.Write("姓名:" + r2.Name + "生命力:" + r2.Blood); Console.ResetColor(); Console.WriteLine(); Console.WriteLine(); } }
c#(8)--結構體