#include #include //包含vectorusing namespace std;//指定命名空間int main(){ cout ///////////////////////////////////////////// //定義一個vector ///////////////////////////////////////////// vector vect; vector vect1(12);//12個int類型元素,每個元素的初始值均為0 vector vect2(1
最近一直在處理工作表的問題,其間用到了C#讀取表中資料的問題,其方法如下:using Data=System.Data;/// <summary> /// 擷取某個工作表中的資料 /// </summary> /// <param name="fileName">檔案名稱及路徑</param> /// <param name="queryWorkSheetName">查詢的工作表&
你的任務就是給ToolStrip中的startSimulation和reset按鈕編寫事件處理方法。下面是每個按鈕需要做的事情:1.最開始,第一個按鈕應該寫有“Start Simulation”,點擊它會使得模擬器啟動,並且其上的文本改變為“Pause Simulation”。如果模擬器暫停了,按鈕上的文字應該改變為“Resume Simulation”。2.第二個按鈕應該寫有“Reset”。點擊它的時候,世界應該被重建。如果Timer被暫停了,第一個按鈕的文本應該從“Resume Simula
試運行你已經做了很多工作了。編譯你的代碼,修正所有打字錯誤,然後運行模擬器。看起來怎麼樣? 現在是你把所學的知識付諸實踐的時候了。我們需要讓蜜蜂告訴模擬器他們在做什麼。這時,我們要讓模擬器的狀態列的資訊更新。這次,你不僅要負責編寫代碼,還要負責決定寫什麼代碼。你如何才可以讓模擬器中的某個方法在每次蜜蜂的狀態更新的時候得以調用呢?給你一點協助,我們已經寫出了要添加到表單中去的方法。Bee類可以在每次自身的狀態改變的時候調用它:
建立蜂窩模擬器當然,我們還沒有建立過如此複雜的東西,所以我們需要永幾章的篇幅來把所有東西組合起來。在此過程中,你會學到添加timer控制項,LINQ,還有很多圖形編程技巧。下面是你在本章中需要做的(接下來會有更多): ①建立一個Flower類,它會變老,長出花粉,並且最終會枯萎並死掉。 ②建立一個Bee類,它有幾個不同的狀態(在某個花朵上採集花粉,返回蜂巢),並且它會根據其狀態知道要做什麼。 ③建立一個Hive類,它包含有入口,出口,幼蜂培育地,還有把花粉轉化為蜂蜜的蜂蜜工廠。 ④建立一
Timer會一次又一次的觸發事件還記得你是怎麼用一個迴圈來驅動獵犬的嗎?其實我們有更好的辦法。Timer是一個特別有用的控制項,它可以一次又一次的觸發事件,每秒鐘可以上千次。如下做:①建立一個有三個按鈕和一個Timer的新項目向表單上拖拽三個按鈕和一個Timer。點擊表單設計器下方的Timer表徵圖把它的Interval屬性設定為1000。這個數字是以毫秒為單位來衡量的--它告訴Timer每秒鐘觸發自己的tick事件一次。②開啟IDE的屬性視窗並點擊事件按鈕Timer控制項只有一個事件,Tic
我們來直接跳到代碼。首先,我們需要一個Flower類。Flower類需要一個由Point定義的位置,有年齡,還有壽命。隨著時間的流逝,鮮花會變老。然後,當年齡到達了壽命值的時候,花朵會死去。你的任務就是把這些實現出來。①寫出Flower類的架構代碼下面是Flower類的類圖。寫出基本的類架構,Location,Age,Alive,Nectar和NectarHarvested都是自動屬性。NectarHarvested是可寫的,其他四個都是唯讀。現在把方法留空;我們稍後會回來處理它們。 ②給類
Timer在幕後使用一個委託C#和.NET如何告訴Timer每過一個時間段要做什嗎?Timer每次是如何調用timer1_Tick()方法的?我們要像上一章一樣去討論事件和委託了。使用IDE的“轉到定義”功能來複習一下事件處理委託是如何工作的:④右擊timer1變數並選擇“轉到定義”“轉到定義功能”可以讓IDE自動跳到timer1變數被定義的代碼處。IDE將會跳到建立並添加timer1為Form1的屬性的地方。在該檔案中向下滾動,直到你看見下面這一行: ⑤現在右擊EventHandler並選擇
我們已經有了四個核心類,我們需要做一些工作來把它們聯絡起來。遵循下面的步驟來做。但是要知道:在完成之前你必須修改幾乎每一個類的某些地方。①修改Bee來接受Hive和World的引用。現在有了Hive和World類,Bee對象需要知道它們。更新你的代碼來讓Bee在其構造方法中接受Hive和World的引用並且儲存這些引用來在稍後使用。②更新Hive來讓它接受一個World的引用就像Bee需要知道Hive一樣,Hive也需要知道World。更新Hive來讓它在構造方法中接受一個World的引用。你還
一個類拋出異常,另一個類捕獲你在建立類的時候並不知道它會怎麼樣的被使用。有時候其他人會以一種導致問題的方式來使用你的類--有時候你自己也會這麼做!這時就用到異常了。拋出異常的目的就是要去發現有什麼問題,以便做一些計劃。一般你不會看到一個方法自己拋出異常並捕獲它。通常是一個方法拋出異常然後另一個方法捕獲--這個方法又通常是另一個對象中的。不要如下這樣做...沒有好的異常處理,一個異常會把整個程式都拖垮。下面是一個沒有異常處理的例子: ...要如下這樣做BeeProfile對象可以截獲異常並寫一條
集合是用來收集資料的蜜蜂儲存在一個List內,List是C#的集合類型中的一種。集合只儲存資料...很像資料庫。所以每隻蜜蜂就像一行資料,有著完整的狀態和ID,等等。蜜蜂們作為一個集合是下面這個樣子的: Bee對象的欄位中包含很多資料。你可以把集合中的對象想象為資料庫中的資料行。每個對象把資料儲存在其欄位中,就如同資料庫中的每一行把資料儲存在列中。 多數的集合,尤其是當它們包含資料的時候,可以被想象成數據儲存,就像資料庫一樣。
即使是不縮放,把映像繪製到表單上也需要時間。假設你已經把所有的圖片都縮放過了。要把那些蜜蜂,花朵和蜂巢繪製出來還是需要時間。我們現在是使用Graphics把映像繪製到表單上去。如果你的眼睛捕捉到一次渲染的尾部,你會認為它是一次閃動。由於需要繪製的圖形很多,所以很有可能會出現閃爍。這就是多數業餘電腦遊戲的毛病...人眼捕捉到渲染的尾部,把它當做一次閃爍。
學習的好處要到建立些什麼東西的時候才看得出來。在寫出可以工作的代碼之前,很難知道你是否真的掌握了C#的核心概念。這一章,我們要學一些零碎的東西:timer和用LINQ來處理集合(只列舉某些)。我們還要建立一個很複雜的應用的第一階段,並且確保你很好的掌握了前面幾章學過的知識。做好準備...我們要建立一些很酷的程式了。
雙緩衝是內建於表單和控制項中的你可以使用Bitmap來做雙緩衝,但是C#和.NET通過內建的支援使得這一點更簡單。只需要把DoubleBuffered屬性設定為true。回到Zoomer使用者控制項--把它的DoubleBuffered設定為true,它就會停止閃爍了。現在回到BeeControl也這樣處理。這樣不可以解決所有的圖形問題--但是會有所改善。徹底檢修蜂巢模擬器如下做:①從移除BeeControl使用者控制項開始在蜂巢和闐園中不再會有任何的控制項。沒有BeeControl,沒有Pi
使用Paint事件來讓你的圖形可以持續存在如果繪製到表單上的圖形會在表單被遮擋的時候消失的話,那可不好。很幸運,有一個簡單的方式來讓圖形持久存在:編寫一個Paint事件處理器。表單在每次需要重繪的時候都會觸發Paint事件--比如被拖動出螢幕範圍的時候。它的PaintEventArgs參數有一個Graphics屬性,用它繪製的東西可以“持久”。①添加一個Paint事件處理方法Paint事件在每一次你的映像被弄花的時候都會被觸發。所以在Paint事件處理方法內部編寫繪製的代碼可以使得繪製的圖形持久
③為雙緩衝的動畫設定好蜂巢和闐園表單移除表單構造方法中設定背景映像的代碼。移除所有表單上的控制項並把表單的DoubleBuffered屬性設定為true。給兩個表單添加Paint事件處理方法。下面是蜂巢表單的Paint事件的處理方法--田園表單的差不多,只是它調用PaintField()方法而已: ④兩個表單都需要一個公有的renderer屬性:移除所有的對於渲染器的Reset()方法的調用,把所有的new Renderer()語句替換為對下面的CreateRenderer()方法的調用: ⑤
BeeControl也需要釋放本身包含的控制項Control類實現了IDisposable介面,所以你需要確保每個使用過的控制項都得以釋放掉。BeeControl內部含有一個Timer控制項,而它沒有得以釋放掉,這是個問題。不過很幸運,這個問題很容易修複--覆寫Dispose()方法即可。③覆寫Dispose()方法來釋放TimerBeeControl繼承自Control,所以它必然含有Dispose()方法。所以我們可以覆寫該方法來釋放Timer。進入代碼鍵入override: 在智能感應視
需要改進圖形效能的方法就是給渲染器添加一個方法來縮放圖片。然後我們就可以在每張圖片載入之後縮放它,而且只在BeeControl中和蜂巢表單中使用縮放過之後的版本。如下做:①給渲染器添加一個ResizeImage方法所有儲存在項目中的圖片都是以Bitmap對象的形式存在的。下面是一個縮放圖片的靜態方法--把它添加到Renderer類中: ②給BeeControl添加這個ResizeCells方法你的BeeControl可以儲存自己的Bitmap對象--在一個數組中。下面可以產生這個數組,把每一個
使用System.Drawing來自己處理圖形Graphics屬於System.Drawing命名空間。.NET架構中有很多比工具箱中的PictureBox更強大的工具。你可以繪製圖形,使用字型,進行複雜的圖形計算...這些都從Graphics對象開始。你想要添加或者修改任何東西的圖形或者映像的時候,你都需要建立一個與該對象相關的Graphics對象,然後使用Graphics對象的方法來在目標上繪製。①從一個你想要繪製的對象開始以一個表單為例。調用表單的CreateGraphics()方法將會