用面向?qū)ο髮懖氯螒?/p>
今天打算寫一個(gè)猜拳游戲,也就是我們小時(shí)候玩的石頭剪刀布.我寫的一個(gè)小程序的樣子如下:

也是很簡(jiǎn)單的,有三個(gè)button是供玩家選擇的,當(dāng)玩家選擇某一個(gè)button時(shí),玩家后面的label就顯示玩家選擇的內(nèi)容,比如如果玩家選擇出石頭,則玩家后面的那個(gè)label則顯示石頭,以此類推.電腦則是隨機(jī)選擇出石頭或者剪刀或者布.當(dāng)然出完后將結(jié)果顯示出來(lái),也就是在正中間的那個(gè)label上顯示出比賽結(jié)果來(lái)(當(dāng)然實(shí)際的時(shí)候盡量是將此要顯示的三個(gè)label設(shè)置為空格,體驗(yàn)略好一點(diǎn),不過(guò)放說(shuō)回來(lái),小程序體驗(yàn)貌似就這樣子).就是這樣的一個(gè)小程序.
那么在這個(gè)小程序里,簡(jiǎn)單的說(shuō)就是要將三個(gè)label顯示出內(nèi)容來(lái),我們就當(dāng)是這個(gè)程序是寫一個(gè)填空題,正確的完成三個(gè)空格也就可以了.只是其需要滿足于玩家的label的滿足于玩家點(diǎn)什么顯示什么.電腦的label是隨機(jī)顯示三個(gè)中其的一個(gè).然后比較結(jié)果的label就根據(jù)其兩者出拳的內(nèi)容將比較的輸贏顯示出來(lái)也就好了.那么,我們就可以建三個(gè)類,第一個(gè)類是玩家類,用于顯示玩家出拳的結(jié)果,完成第一個(gè)空格也就是用于.第二個(gè)類是電腦類,用于顯示電腦的出拳結(jié)果,此用于完成第二個(gè)空格.最后一個(gè)類是裁判類,用于根據(jù)玩家和電腦的出拳結(jié)果,顯示出成績(jī)的結(jié)果,此類用于完成第三個(gè)空格.
關(guān)于裁判類的話我們發(fā)現(xiàn)比較的話最好是用數(shù)字比較好一點(diǎn).那么我們這里可以用1表示石頭,2表示剪刀,3表示布,裁判類這塊的放就可以用玩家所表示的數(shù)字減去電腦出拳內(nèi)容表示的數(shù)字來(lái)判斷,當(dāng)玩家和電腦出拳的內(nèi)容為零時(shí),則說(shuō)明他們是出的一樣的,則表示平手,如果是結(jié)果等于-1(當(dāng)石頭對(duì)剪刀,剪刀對(duì)布)或者2(布和石頭)時(shí),則說(shuō)明用戶贏了,其他情況則表示電腦贏了.
玩家類里有一個(gè)存儲(chǔ)出拳內(nèi)容的一個(gè)屬性,和一個(gè)將根據(jù)出拳內(nèi)容將其結(jié)果轉(zhuǎn)換成數(shù)字用于比較一個(gè)方法,其代碼如下:
玩家類的代碼 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace _2014022203Sat猜拳游戲 8 { 9 class Player10 {11 //此屬性用于存儲(chǔ)出拳的內(nèi)容.12 public string FistName { get; set; }13 /// <summary>14 /// 此方法將出拳之結(jié)果成數(shù)字,以便比較15 /// </summary>16 /// <param name="fist">將出拳的內(nèi)容當(dāng)參數(shù)傳遞</param>17 /// <returns>將數(shù)字返回</returns>18 public int ShowFist(string fist)19 {20 //將傳進(jìn)來(lái)的參數(shù)給存儲(chǔ)出拳內(nèi)容的屬性.21 this.FistName = fist;22 int result = -1;23 switch (fist)24 {25 case "石頭":26 result = 1;27 break;28 case "剪刀":29 result = 2;30 break;31 case "布":32 result = 3;33 break;34 }35 return result;36 }37 }38 }電腦類里也有一個(gè)存儲(chǔ)出拳內(nèi)容的一個(gè)屬性和一個(gè)隨機(jī)產(chǎn)生出拳內(nèi)容的方法.此處用數(shù)字隨機(jī).便于比較.其代碼如下:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace _2014022203Sat猜拳游戲 8 { 9 class Computer10 {11 //此屬性用于存儲(chǔ)出拳(udr)的內(nèi)容.12 public string FistName { get; set; }13 /// <summary>14 /// 此方法用于得到得到出拳的內(nèi)容15 /// </summary>16 /// <returns>將得到的內(nèi)容返回</returns>17 public int ShowFist()18 {19 Random random = new Random();20 int r = random.Next(1, 4);21 switch (r)22 {23 case 1:24 this.FistName = "石頭";25 break;26 case 2:27 this.FistName = "剪刀";28 break;29 case 3:30 this.FistName = "布";31 break;32 }33 return r;34 }35 }36 }電腦類的代碼裁判類里就一個(gè)方法,根據(jù)玩家出拳內(nèi)容代表的數(shù)字和電腦出拳內(nèi)容代表的數(shù)字得到比較結(jié)果.其代碼如下:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace _2014022203Sat猜拳游戲 8 { 9 class Referee10 {11 public string Result(int player, int computer)12 {13 if (player-computer==-1||player-computer==2)14 {15 return "亡口月貝凡";16 }17 else if (player-computer==0)18 {19 return "平手";20 }21 else22 {23 return "LOSE";24 }25 }26 }27 }裁判類的代碼當(dāng)點(diǎn)擊三個(gè)按鈕時(shí)的代碼則是根據(jù)三個(gè)類將這個(gè)填空題正確的完成,其代碼如下:

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms;10 11 namespace _2014022203Sat猜拳游戲12 {13 public partial class Form1 : Form14 {15 public Form1()16 {17 InitializeComponent();18 }19 20 PRivate void stone_button_Click(object sender, EventArgs e)21 {22 //Button btn = (Button) sender;23 //if (btn!=null)24 //{25 Player player = new Player();26 //下面這行代碼為用玩家類的方法,將玩家選的內(nèi)容傳入,返回一個(gè)數(shù)字.27 int playerFist = player.ShowFist(stone_button.Text);28 //將存儲(chǔ)的內(nèi)容顯示到玩家后面的那個(gè)label上.完成填空題的第一個(gè)空格.29 lblPalyer.Text = player.FistName;30 31 Computer computer = new Computer();32 //下行這行代碼為用電腦類的方法,將為電腦隨機(jī)產(chǎn)生一個(gè)數(shù)字,返回一個(gè)數(shù)字,代表其出拳內(nèi)容.33 int computerFist = computer.ShowFist();34 //將電腦的出拳內(nèi)容顯示到對(duì)應(yīng)的位置.完成填空題的第二個(gè)空格.35 lblComputer.Text = computer.FistName;36 37 Referee referee = new Referee();38 //此為調(diào)用裁判類的方法,將玩家出拳內(nèi)容所代碼的數(shù)字和電腦出拳內(nèi)容所代表的數(shù)字傳入給出比賽的結(jié)果顯示到顯示比賽結(jié)果的那個(gè)LABEL上.完成填空題的第三個(gè)空格.39 lblResult.Text = referee.Result(playerFist, computerFist);40 //}41 }42 43 private void scissor_button_Click(object sender, EventArgs e)44 {45 Player player = new Player();46 int playerFist = player.ShowFist(scissor_button.Text);47 lblPalyer.Text = player.FistName;48 49 Computer computer = new Computer();50 int computerFist = computer.ShowFist();51 lblComputer.Text = computer.FistName;52 53 Referee referee = new Referee();54 lblResult.Text = referee.Result(playerFist, computerFist);55 }56 57 private void burlap_button_Click(object sender, EventArgs e)58 {59 Player player = new Player();60 int playerFist = player.ShowFist(burlap_button.Text);61 lblPalyer.Text = player.FistName;62 63 Computer computer = new Computer();64 int computerFist = computer.ShowFist();65 lblComputer.Text = computer.FistName;66 67 Referee referee = new Referee();68 lblResult.Text = referee.Result(playerFist, computerFist);69 }70 }71 }點(diǎn)擊時(shí)的代碼 那么這樣也就完成了這個(gè)小程序了.不過(guò)寫代碼的時(shí)候我們講究的是DRP(Do'not Repeter Yourself),那我們發(fā)現(xiàn)了點(diǎn)擊三個(gè)按鈕時(shí)的代碼幾乎一樣,應(yīng)該盡量避免這樣的代碼.那么我們就要了解這個(gè)點(diǎn)擊事件后面的兩個(gè)參數(shù)的意思了.后面是有兩個(gè)參數(shù)的第一個(gè)是sender這個(gè)參數(shù),第二個(gè)是e這個(gè)參數(shù),sender表示的是此事件是誰(shuí)的事件,e表示的是和事件相關(guān)聯(lián)的一些信息.就比如現(xiàn)在小杜現(xiàn)在踹了小小杜一腳,那么在這個(gè)里面sender就表示的是踹的是小小杜這個(gè)人,而e這個(gè)參數(shù)里就是踹的是他的腿還是臀部還是什么其他的地方.sener此參數(shù)就表示是誰(shuí)的事件.那么根據(jù)里氏轉(zhuǎn)換原則我們則可以將sender這個(gè)對(duì)象轉(zhuǎn)換成B
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注