一:在源碼管理器中打開VS
注意,下文這樣的打開方式是在 TFS 的源碼服務器中打開解決方案。如果我們使用 SVN,則直接在硬盤上打開解決方案就可以了。
打開VS:
然后按上圖中的步驟1和2(雙擊2處),打開我們的解決方案,如下:
注意,雙擊紅框,會顯示Solution Explorer。
我們在上一節中,只是創建了打老鼠的解決方案,還完全沒有編寫任何代碼。這個時候運行解決方案一下(記得嗎,菜單中Debug->Start without debug,或Ctrl+F5。我喜歡用快捷鍵,而且你也必須快速熟悉起這些快捷鍵,使用快捷鍵可以節約時間)。
運行起來后,是一個空白的Windows窗體,如下:
二:導入資源文件
現在我們就要在這個窗體上打老鼠了。
打老鼠這個游戲的最終效果圖如下:
為了完成這個游戲,有兩個圖片資源要用到(請自行右鍵下載):
bg.png
mouse.png
請把這兩個圖片保存到我們的項目的根目錄下,請查看下節視頻進行圖片資源的導入及背景設置:
最后,我們看到的整個VS畫面應該是這樣的:
三:實現最簡單的功能
接下來,我們就該簡單的把打老鼠游戲的整個編碼實現思想說一下了。我們看到背景上有11個老鼠洞:
1:首先給11個老鼠洞都覆蓋上老鼠形象;
2:把全體老鼠形象設置為不可見;
3:給程序設定一個始終,讓時鐘每隔1秒隨機顯示一個老鼠形象;
四:視頻
非公開,請聯系 最課程(www.zuikc.com)
五:代碼講解
現在,我們來看看視頻中的代碼到底是什么意思:
PRivate List<PictureBox> _mouses = new List<PictureBox>();
private Timer _timer = new Timer();
private Random _random = new Random();
private PictureBox _oldMouse;
private int _score = 0;
在這里,我們定義了一些變量,其中:
_mouses 用來存放全部的老鼠圖片;
_timer 是一個計時器;
_random 在這里代表了一個隨機數;
_oldMouse 在這里當前正在出現的那只老鼠;
_score 用于記錄分數,暫時還沒起到作用;
再看下面這段代碼:
foreach (Control item in this.Controls)
{
if(item is PictureBox)
{
_mouses.Add(item as PictureBox);
}
}
_timer.Interval = 1000;
_timer.Tick += _timer_Tick;
_timer.Start();
foreach 表示這是一個循環,我們需要把所有的老鼠都加入到 _mouses 這個變量中去,因為一開始這個變量中是空的,沒有老鼠的;
_timer.Interval = 1000; 表示為定時器的時間設置為 1 秒;
_timer.Tick += _timer_Tick; 表示定時器定時時間到的時候,要觸發一個函數,這個函數叫 _timer_Tick;
_timer.Start(); 表示定時器開始計時吧;
再看定時器觸發的這個函數:
void _timer_Tick(object sender, EventArgs e)
{
if(_oldMouse != null)
{
_oldMouse.Visible = false;
}
int index = _random.Next(1, 11);
_oldMouse = _mouses[index];
_oldMouse.Visible = true;
}
在這個函數里面的邏輯就是,如果當前有老鼠正在顯示著,就應該先隱藏,讓另外一只老鼠出現;
運行程序,我們就會發現每隔 1 秒,就會隨機出現一只老鼠;
現在,我們繼續完善代碼,要實現:當老鼠形象出現的時候,鼠標擊中了老鼠則計分+1,并顯示出來;
實際上,只要修改上面的 foreach 循環中的代碼為:
foreach (Control item in this.Controls)
{
if(item is PictureBox)
{
_mouses.Add(item as PictureBox);
item.MouseDoubleClick += item_MouseDoubleClick;
}
}
即,為老鼠增加鼠標雙擊事件,其事件方法為:
void item_MouseDoubleClick(object sender, MouseEventArgs e)
{
_score++;
_labelScore.Text = _score.ToString();
}
這就完成了“鼠標擊中了老鼠則計分+1,并顯示出來”,我們看到,上面多了個沒見過的變量 _labelScore,它是怎么出現的呢,看視頻。
六:截止目前為止的打老鼠知識點
到目前為止,我們實現的打老鼠游戲雖然簡單,卻已經包含了很多的語法知識,如下11個知識點:
接下來,我們就需要一一學習一下這些知識。(注意,在本節下面的詳細敘述當中,各個知識點我會只講到當前必須知道的程度,隨著課程的深入會逐步補充各個知識點的深入闡述。)
1和2:被引用的命名空間以及定義當前的類的命名空間
把類在歸類一下,就叫命名空間。
命名空間和文件夾的關系?沒有關系!當然,常用的做法是,一個命名空間就使用一個文件夾。
如果我們在當前類中要引用到別的類,則方便的做法是把別的類所在的命名空間用using引入進來,如上圖的1;
反過來,我們現在在編寫打老鼠這個類,就需要為當前的這個類定義一個命名空間,如上圖的2;
3和4:類和實例
在C#的世界中,代碼是以類為單位組織起來的,我們可以看到:
public partial class Form1 : Form
Form1就是一個類。關于一個類的最簡單的形式如下:
class Mouse
{
}
至于打老鼠游戲中的Form1這個類聲明當中的partial和后面的冒號后的內容,我們暫時可以不管它。
類和文件的關系?沒有關系!當然,常用的做法是,一個類使用一個文件。
對類使用new關鍵字,就產生了類的一個實例,如:
Mouse aMouse = new Mouse();
5和10和11. 變量
在類以內,方法以外,沒有修飾static的變量,為實例變量;
方法以內的變量,叫做局部變量;
變量在方法的聲明內,叫做方法參數;
變量(或者說變量名),代表的就是某個你要操作的對象。
6和9. 方法
方法定義了類的行為,也就是類可以干什么。
有一類特殊的方法叫做構造器。它是在產生類的實例的時候首先被調用的。
7. 循環結構
foreach,for,while,都屬于循環結構,光看代碼,大家應該都能準確理解起意思,不在贅述。
8. 條件結構
If屬于條件結構,很簡單,不再贅述。
同屬于條件結構的還有switch和三元運算符,等我們使用到的時候一并講解,這里不再贅述。
微信掃一掃,關注最課程,獲取每日一練
新聞熱點
疑難解答