C#排塊游戲

今天想說(shuō)的示例是排塊游戲留荔。

圖片發(fā)自簡(jiǎn)書(shū)App


這個(gè)程序很有意思,程序運(yùn)行后澜倦,一開(kāi)始聚蝶,它就有 1,2,3,4,5,6,7,8 一共15個(gè)按鈕, 然后還有一個(gè)按鈕藻治,我們把它當(dāng)成空的那個(gè)空格碘勉。 一點(diǎn)開(kāi)始,那它就打亂順序了桩卵, 就有一點(diǎn)像拼圖游戲验靡,打亂程序,那我們的程序的這個(gè)游戲的作用就是要把這些按鈕要調(diào)整到它原始的位置雏节,比如說(shuō) 1 就應(yīng)該調(diào)到這個(gè)上面去胜嗓, 1 后的這個(gè)空格組成一個(gè)環(huán)路,它就可以按照這個(gè)環(huán)路呢 就可以這么繞過(guò)來(lái)了钩乍,同樣的辦法我們把 2,3,4,5 等等調(diào)整過(guò)去。


那這個(gè)游戲程序 它是有很多按鈕,然后點(diǎn)擊按鈕又發(fā)生動(dòng)作程剥,我們的初始界面轴踱,只有開(kāi)始按鈕是設(shè)計(jì)的,那么其他的按鈕呢排作,為了程序的方便牵啦,不用手工一個(gè)個(gè)地去拖了,因?yàn)橐粋€(gè)個(gè)-去拖的話妄痪, 第一哈雏,它不是很整齊,我們?cè)L問(wèn)起來(lái)也很不方便。 所以裳瘪,用程序來(lái)寫(xiě)比較好土浸。那這個(gè)程序又有很多按鈕,所以當(dāng)然就是用一個(gè)數(shù)組了彭羹,所以我們看看這個(gè)代碼它的核心 就是這個(gè)數(shù)組黄伊。 現(xiàn)在,最核心已經(jīng)有了派殷。我們下面來(lái)看看程序要做的事情呢还最,首先 Form Load,注意這個(gè) Form react-text那這個(gè) Load 要做什么事情呢毡惜?我們來(lái)想呢拓轻,那 就是要產(chǎn)生這些按鈕,因?yàn)檫@些按鈕不是我們手工拖上去的经伙。


圖片發(fā)自簡(jiǎn)書(shū)App


現(xiàn)在就寫(xiě)一個(gè)打亂順序函數(shù)扶叉,叫Shuffle。其實(shí)就是隨機(jī)交換兩個(gè)按鈕帕膜,程序的邏輯枣氧,盡量不要寫(xiě)到這個(gè)界面里頭,盡量用 單獨(dú)的函數(shù)垮刹。這個(gè)函數(shù)达吞,產(chǎn)生所有的按鈕呢, 有多行危纫,有多列宗挥,所以從 從 0 到 N,r 表示行 row种蝶,C 表示 column契耿,多行多列的一個(gè)雙重循環(huán)。 這個(gè)循環(huán)要做的事情螃征,就是產(chǎn)生按鈕搪桂,核心的就是這個(gè)按鈕,btn = new Button ()盯滚。 當(dāng)然如果我們拖空鍵的時(shí)候呢踢械,它是幫我們寫(xiě)的,現(xiàn)在我們要自己來(lái)寫(xiě) new Button魄藕。然后當(dāng)然這些按鈕的屬性就要設(shè)置好了

點(diǎn)擊我們能夠點(diǎn)擊按鈕呢内列,必須寫(xiě) += 這個(gè)時(shí)間。那這個(gè)事件怎么寫(xiě)背率?其實(shí)很方便话瞧,你比如說(shuō)我把這里先刪掉嫩与。 你寫(xiě)個(gè) += 就注冊(cè)事件,然后就知道它是按 Tab 鍵進(jìn)行插入。

所以說(shuō)按 Tab 鍵進(jìn)行插入就行了交排,它就自動(dòng)生成了 剛才那個(gè)代碼划滋。當(dāng)然還需要我們把這個(gè)剛剛生成的按鈕放到數(shù)組里面以后好訪問(wèn)。很重要就是要把它加到 this.Controls.Add 加到空間里頭埃篓。這一步呢我們把所有的 16 個(gè)按鈕 全產(chǎn)生好了处坪,然后注冊(cè)一個(gè)事件,然后放到數(shù)組并加到界面架专。最后一個(gè)按鈕呢同窘,把它藏起來(lái)。上面已說(shuō)出了部脚,產(chǎn)生按鈕的方法塞椎。

下面一個(gè)我們看 Shuffle 怎么做,Shuffle 呢就是打亂順序睛低。 這個(gè)打亂順序比較簡(jiǎn)單,用 Random就行服傍。

然后我們隨機(jī)產(chǎn)生這個(gè)行號(hào)钱雷、 列號(hào) a,b,c,d。 然后兩個(gè)按鈕 button吹零,這個(gè) a,b 罩抗,左下標(biāo)的這個(gè)按鈕和 c,d 這個(gè)左下標(biāo)的按鈕呢交換一下。


圖片發(fā)自簡(jiǎn)書(shū)App


這里呢灿椅,可以再寫(xiě) 一個(gè)函數(shù) Swap套蒂。 Swap,就是把按鈕 a 上的文本放到按鈕上 面去茫蛹,按鈕 b 上的 Visable 操刀,放在按鈕 b 的 Visable,因?yàn)?有的按鈕是婴洼,是不見(jiàn)的骨坑。 ?所以實(shí)際上我們 交換的,實(shí)際上是柬采,它并沒(méi)有交換位置欢唾,它是交換上面的文本和可見(jiàn)性。這是打亂順序呢就是隨機(jī)的多次交換粉捻。


下一步呢礁遣,我們看看寫(xiě)的那個(gè) btn Click。btn Click 這個(gè)事件肩刃,實(shí)際上祟霍,我們?cè)袤w會(huì)一下杏头,實(shí)際上就是要點(diǎn)呢,然后進(jìn)行跟那個(gè)空白相交換浅碾,那么這里有一個(gè)問(wèn)題就出來(lái)了大州。這個(gè) btn Click 我們所有的都注冊(cè)到這個(gè)函數(shù), 那它怎么知道是哪一個(gè)點(diǎn)擊的呢垂谢?這就是所謂的 sender 事件發(fā)出者厦画,事件源。 事件的話滥朱,也就是你點(diǎn)了哪個(gè)按鈕根暑,它就發(fā)生哪個(gè)事件。 現(xiàn)在呢我們知道它是一個(gè) Button徙邻,叫 as Button排嫌,就是把它 當(dāng)成一個(gè) Button,因?yàn)樗褪且粋€(gè) Button缰犁,只不過(guò)我們開(kāi)始 在這里面它為了通用淳地,它就是react-text object,但實(shí)際上是個(gè) Button帅容。所以這個(gè) Button 呢我們賦到這個(gè)變量里頭颇象,下面好用,另外還有一個(gè)問(wèn)題呢就是說(shuō) 點(diǎn)到這個(gè)按鈕呢并徘,它必須跟空白相交換遣钳,所以我們?cè)賹?xiě)一個(gè)函數(shù), 空白按鈕麦乞,就是藏起來(lái)的那個(gè)按鈕蕴茴,F(xiàn)indHiddenButton, 這兩個(gè)按鈕姐直, 如果這兩個(gè)按鈕相鄰倦淀, IsNeighbor,這個(gè)按鈕跟它相鄰声畏,然后我們?nèi)ソ粨Q晃听,也就是說(shuō) 表面上是這個(gè)按鈕點(diǎn)了,它就移動(dòng)位置砰识,實(shí)際上呢能扒, 是跟那個(gè)空白在交換。


圖片發(fā)自簡(jiǎn)書(shū)App


我們按鈕點(diǎn)了辫狼,還有判斷完沒(méi)完初斑,if (ResultOk ()) if (ResultOk ())。t 好膨处,那這里就有幾個(gè)函數(shù)了见秤,查找隱藏的按鈕砂竖,然后判斷是否相鄰,然后呢鹃答, 判斷是否完成乎澄,那這幾個(gè)函數(shù),相對(duì)來(lái)說(shuō)比較好寫(xiě)测摔。

查找隱藏按鈕怎么辦呢置济? 把所有的按鈕循環(huán)地去找每一行每一列。 如果它是 Visable锋八,不可見(jiàn)的 Visable浙于,注意這個(gè)感嘆號(hào) 就表示非,就是如果非 Visable挟纱,不可見(jiàn)羞酗。當(dāng)然,否則的話就是 return null 了紊服,實(shí)際上是不可能的檀轨,因?yàn)樗隙ㄓ幸粋€(gè)不可見(jiàn),就是藏起來(lái)那一個(gè)欺嗤,所以這就是查找隱藏按鈕這個(gè)函數(shù)裤园。


圖片發(fā)自簡(jiǎn)書(shū)App


我們?cè)倏纯磁袛嘞噜彙_@個(gè)兩個(gè)按鈕剂府,btnA, but B。 為了判斷兩個(gè)相鄰呢剃盾,我們有多種辦法腺占,這里呢 我們就用的是什么呢?用剛才用那個(gè) react-text Tag痒谴,順序號(hào)衰伯,0,1,2,3,4,5,6,7 那個(gè) Tag 號(hào)。 這個(gè) Tag 號(hào)呢我們把它賦好了积蔚,就是那個(gè)行列位置呢可以求出行號(hào)意鲸,就是除以 , 整除啊這個(gè)整除尽爆,就是第幾行就是整除 N怎顾,然后呢余數(shù)呢就是列 號(hào)。 好了漱贱,相鄰呢實(shí)際上又分兩種情況槐雾,一個(gè)是左右相鄰,左右相鄰呢也就是 行號(hào)相等幅狮,然后列號(hào)差募强,列號(hào)要么它等于它 -1株灸,要么它等于它 +1。這個(gè)叫左右相鄰擎值。然后第二種情況是上下相鄰慌烧,所謂上下相鄰呢就是列號(hào)相等,這種情況我們就 return true鸠儿,否則的話屹蚊, 那么它就return false。 還有一個(gè)函數(shù)叫 ResultIsOk捆交,就是判斷是不是 完成了淑翼。 所謂完成,那就是 buttons 上的按鈕應(yīng)該 等于它的順序號(hào)品追,這個(gè)順序號(hào)呢就是行號(hào)乘以 N玄括, 加上列號(hào),再加 1肉瓦,判斷它這兩個(gè)是不是相等遭京。 如果不等,那說(shuō)明 沒(méi)有完成泞莉,如果全都等了哪雕,就說(shuō)明已經(jīng)完成了,這個(gè)函數(shù)呢返回一個(gè) bool 型鲫趁。


圖片發(fā)自簡(jiǎn)書(shū)App


圖片發(fā)自簡(jiǎn)書(shū)App


現(xiàn)在總結(jié)一下斯嚎,拖上去一個(gè)按鈕,然后借助程序產(chǎn)生了16個(gè)這些按鈕挨厚, 這是 Form Load 事件堡僻,就是最開(kāi)始要完成的事件。 然后一點(diǎn)這個(gè)按鈕疫剃,就是打亂順序了钉疫, 然后我們點(diǎn)一個(gè)按鈕,它就跟這個(gè)相鄰的這個(gè)要交換巢价,實(shí)際上把Visable 這個(gè) false牲阁,把它的數(shù)字也交換了。那如果這兩個(gè)按鈕它不跟空白相鄰壤躲,它什么也不做城菊,所以要判斷是不是相鄰,跟空的是不是相鄰碉克,這就是程序役电。


圖片發(fā)自簡(jiǎn)書(shū)App


大數(shù)學(xué)家陳景潤(rùn)在中學(xué)生數(shù)理化上寫(xiě)的一篇文章, 他把這個(gè)叫做十五子游戲棉胀,你還可以到網(wǎng)上去搜這個(gè)文章《十五子游戲》法瑟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冀膝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子霎挟,更是在濱河造成了極大的恐慌窝剖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酥夭,死亡現(xiàn)場(chǎng)離奇詭異赐纱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)熬北,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)疙描,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人讶隐,你說(shuō)我怎么就攤上這事起胰。” “怎么了巫延?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵效五,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我炉峰,道長(zhǎng)畏妖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任疼阔,我火速辦了婚禮戒劫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘婆廊。我一直安慰自己迅细,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著列荔,像睡著了一般枚尼。 火紅的嫁衣襯著肌膚如雪署恍。 梳的紋絲不亂的頭發(fā)上盯质,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音赎瑰,去河邊找鬼破镰。 笑死鲜漩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的踩娘。 我是一名探鬼主播鳞青,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼厚脉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼胶惰!你這毒婦竟也來(lái)了孵滞?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泄伪,失蹤者是張志新(化名)和其女友劉穎蟋滴,沒(méi)想到半個(gè)月后痘绎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體孤页,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡允坚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年屋讶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了皿渗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡划乖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挤土,到底是詐尸還是另有隱情,我是刑警寧澤仰美,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站咖杂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诉字。R本人自食惡果不足惜懦尝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壤圃。 院中可真熱鬧,春花似錦伍绳、人聲如沸冲杀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卤妒。三九已至,卻和暖如春共缕,著一層夾襖步出監(jiān)牢的瞬間洗出,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工图谷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翩活,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓便贵,卻偏偏與公主長(zhǎng)得像菠镇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子承璃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,085評(píng)論 25 707
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程利耍,因...
    小菜c閱讀 6,402評(píng)論 0 17
  • 鄉(xiāng)下姑娘美亞,愛(ài)慕望族出身的阿松盔粹,趁他因故流落鄉(xiāng)下隘梨,嫁給了他∠衔耍婚后轴猎,美亞為了幫助阿松重新發(fā)達(dá),篡改文書(shū)咬崔、獨(dú)吞家產(chǎn)税稼。...
    思想筆記閱讀 349評(píng)論 10 9
  • 終于開(kāi)始學(xué)習(xí)大數(shù)據(jù)了,工欲善其事必先利其器垮斯。要想學(xué)得好郎仆,平臺(tái)不可少。現(xiàn)在開(kāi)始萬(wàn)里長(zhǎng)征第一步之搭建hadoop平臺(tái)兜蠕。...
    誰(shuí)占了我的一年的稱號(hào)閱讀 511評(píng)論 2 4
  • Day1 第一對(duì)喜歡上的cp 這我怎么記得……黑扰肌,黑藍(lán)? 黑小虎×藍(lán)兔【虹貓藍(lán)兔七俠傳】 Day2 本命c(diǎn)p 孫哲...
    花與菟絲子閱讀 499評(píng)論 0 0