最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

學(xué)員寧嘉欣的高光時刻!

2023-07-23 17:30 作者:艮艮為山  | 我要投稿

? ? 經(jīng)過近一年的VBA編程學(xué)習(xí),學(xué)員寧嘉欣從零基礎(chǔ)到把我狂虐,不禁深深的被當(dāng)代大學(xué)生的聰明與智慧所折服!

? ? 事情的起因是這樣的(最后附上學(xué)員代碼及照片):

? ? 2023年7月18日晚上課時,我說:“今天做個2048游戲,在表格內(nèi)畫個4X4的游戲區(qū)域,增加兩個按鈕,一個是開始,一個是上,今天只寫上鍵的代碼?!?游戲界面如下圖:

2048游戲界面

? ? 我繼續(xù)說:“我以前寫的代碼分兩部分,一是先做合并,二是再做移動,那么,我們能不能用一步來完成合并和移動這兩個動作呢?”

? ? 然后我就和學(xué)員們一起寫起代碼來,我雖然做到了一步完成合并和移動這兩個動作,但代碼有50行之多,且包含非常多的判斷。非常的不如意!

? ? 此時學(xué)員寧嘉欣向我示意,她也完成了代碼,當(dāng)我看到她的代碼時,驚出了一身的冷汗,她只用了22行代碼就完成了任務(wù),且連隨機(jī)放置下一數(shù)也做好了。代碼如下:

寧嘉欣的代碼,注意:i為列,j為行

? ? 我問她:“你能給我講一下嗎?”

? ? 她簡單給我描述了一下原理,大意如下,她為了省去過多的、煩人的判斷,采用了數(shù)組與表格的互動方式進(jìn)行制作,先用數(shù)組arr取得游戲區(qū)域的數(shù)值,再將表格內(nèi)游戲區(qū)域的2-3行內(nèi)容清空,定義變量endRow用于取表格內(nèi)游戲區(qū)域最后一行的行號。然后判斷數(shù)組arr的當(dāng)前位置是否為空,不為空,就將內(nèi)容放置回表格的相應(yīng)位置,再判斷表格內(nèi)上下相鄰的兩個數(shù)是否相等,相等則相加,并清空多余的數(shù)。

? ? 看完她的代碼并運(yùn)行后,基本沒有什么錯誤,我就說,你試試224組合,如下圖:

224組合出現(xiàn)錯誤

? ? 結(jié)果出現(xiàn)了錯誤,原因當(dāng)然出在取最后一行的行號上。

? ? 沒想到,她很快就改好了代碼,只增加了一個判斷和一條語句:

? ? arr(endRow, i) <> 1? ??

? ? arr(endRow, i) = 1

更改后的代碼如下:

修改后的代碼

最后點(diǎn)評一下:

? ? 1、因?yàn)橛螒騾^(qū)域只剩第一行了,所以,內(nèi)循環(huán)為 2 to 4 ,這點(diǎn)非常的好;

? ? 2、使用endRow取最后一行的行號的方法是點(diǎn)睛之筆;

? ??

附上學(xué)員寧嘉欣的全部代碼:

Sub UP_Click()? ? ? '上鍵

? ? Dim i&, j&, endRow&

? ? arr = Range("a1:d4")

? ? Range("a2:d4").ClearContents

? ? For i = 1 To 4

? ? ? ? For j = 2 To 4

? ? ? ? ? ? endRow = Cells(Rows.Count, i).End(xlUp).Row

? ? ? ? ? ? If arr(j, i) <> "" Then

? ? ? ? ? ? ? ? If Cells(1, i) = "" Then

? ? ? ? ? ? ? ? ? ? Cells(endRow, i) = arr(j, i)

? ? ? ? ? ? ? ? Else

? ? ? ? ? ? ? ? ? ? Cells(endRow + 1, i) = arr(j, i)

? ? ? ? ? ? ? ? End If

? ? ? ? ? ? End If

? ? ? ? ? ? If Cells(endRow + 1, i) = Cells(endRow, i) And Cells(endRow, i) <> "" And arr(endRow, i) <> 1 Then

? ? ? ? ? ? ? ? Cells(endRow, i) = Cells(endRow, i) + Cells(endRow + 1, i)

? ? ? ? ? ? ? ? Cells(endRow + 1, i) = ""

? ? ? ? ? ? ? ? arr(endRow, i) = 1

? ? ? ? ? ? End If

? ? ? ? Next

? ? Next

? ? Call t

End Sub

Sub t()? ? ? ? ?'隨機(jī)放置一個2

? ? Dim i&, r&, c&, arr(1 To 16), js&

? ? For i = 0 To 15

? ? ? ? r = i \ 4 + 1

? ? ? ? c = i Mod 4 + 1

? ? ? ? If Cells(r, c) = "" Then

? ? ? ? ? ? js = js + 1

? ? ? ? ? ? arr(js) = i + 1

? ? ? ? End If

? ? Next

? ? If arr(1) = "" Then

? ? ? ? MsgBox "你輸了"

? ? Else

? ? ? ? i = arr(Rnd * (js - 1) + 1) - 1

? ? ? ? r = i \ 4 + 1

? ? ? ? c = i Mod 4 + 1

? ? ? ? Cells(r, c) = 2

? ? End If

End Sub

Sub kaishi()? ? ? ? '開始按鈕

? ? Dim i&

? ? Range("a1:d4").ClearContents

? ? For i = 1 To 8

? ? ? ? Call t

? ? Next

End Sub

最后附上學(xué)員照片:

寧嘉欣


學(xué)員寧嘉欣的高光時刻!的評論 (共 條)

分享到微博請遵守國家法律
庆云县| 二连浩特市| 辰溪县| 黎城县| 海伦市| 石景山区| 安龙县| 通城县| 公安县| 渝北区| 遵义县| 大英县| 会同县| 玉屏| 安康市| 雅江县| 江永县| 竹北市| 呈贡县| 镇平县| 龙井市| 温州市| 永定县| 德安县| 临朐县| 迭部县| 云梦县| 内丘县| 合阳县| 洪泽县| 恩施市| 马鞍山市| 平利县| 江口县| 开江县| 花垣县| 尼玛县| 张北县| 双流县| 张家港市| 丹阳市|