紀(jì)輝進(jìn)
教學(xué)中采用生活化的案例,能提升教學(xué)效果,實(shí)現(xiàn)后讓學(xué)生有成就感,提升學(xué)習(xí)興趣,讓興趣轉(zhuǎn)化為學(xué)習(xí)動(dòng)力。
很多學(xué)校的計(jì)算機(jī)軟件技術(shù)專業(yè)課程中,C、C#是其專業(yè)核心課程,本文以C#程序設(shè)計(jì)語言為例,講述五子棋的實(shí)現(xiàn)過程。
五子棋棋盤為15*15的方格,棋子為黑子和白子,贏棋規(guī)則為無論哪一方棋子在橫向、縱向或斜向五子無間隔連成線即贏。
1 棋盤的繪制
用PS軟件繪制一張圖片,作為窗體的背景棋盤,棋盤為正方形,根據(jù)顯示器高度來繪制水平線,上下邊緣留一些像素的空余,不然棋子落到太邊緣不好看,剩余高度均分畫15條水平線;用同樣的方法繪制垂直方向的線,顯示器寬度大于高度,垂直線可以是PS中水平線的90度翻轉(zhuǎn)。水平線垂直方向居中,垂直線水平方向居中。
2 棋子的繪制
用PS軟件分別繪制黑子和白子,棋子的直徑要比棋盤格小一點(diǎn),這樣才不至于落子后在棋盤上占的太滿,為美觀給棋子添加斜面浮雕和高光效果,這樣棋子看起來更立體真實(shí)。黑白子圖片分別保存為png格式。
3 落子定位
鼠標(biāo)在窗體中單擊的時(shí)候落一顆子,棋子用按鈕做,按鈕用黑白子的圖片做背景,設(shè)置一變量,隨著落子遞增,用變量奇偶性決定按鈕背景圖的黑白背景圖屬性。
鼠標(biāo)單擊點(diǎn)并不是落子的真正坐標(biāo),因單擊點(diǎn)坐標(biāo)跟棋盤線有間距,棋子應(yīng)落在橫豎線交叉點(diǎn),單擊點(diǎn)離哪個(gè)交叉點(diǎn)近就落在哪個(gè)交叉點(diǎn)。用鼠標(biāo)單擊點(diǎn)的橫坐標(biāo)減去一個(gè)合適的常量對(duì)橫坐標(biāo)做修正,再模棋盤格寬度得到的值為棋子落在第幾根豎線上,用得到的整型數(shù)乘棋盤格寬度得到的橫坐標(biāo)一定在交叉點(diǎn)上;同樣的方法可以得到棋子落在第幾根橫向上;配合一個(gè)15行15列的二維整型數(shù)組,初始值為0(對(duì)應(yīng)橫縱線交錯(cuò)沒落子),落黑子可記為1,落白子可記為2,落子前檢查二維數(shù)組對(duì)應(yīng)元素,為0的才可以落子。這樣就解決了落什么子和定位在哪里的問題。
4 悔棋
前面已經(jīng)設(shè)置一變量記錄下了多少顆棋子,每下一顆棋子,就是向當(dāng)前窗體添加一個(gè)按鈕控件,用List集合記錄按鈕控件,悔棋的時(shí)候?qū)ist集合中記錄的最后一個(gè)按鈕控件從當(dāng)前窗體中去掉即可。
5 勝負(fù)判斷
每次落子后都需要判斷黑子或白子是否贏了,判斷贏棋的標(biāo)準(zhǔn)為橫向是否有五個(gè)相鄰的同樣顏色的棋子,縱向是否有五個(gè)相鄰的同樣顏色的棋子,斜向是否有五個(gè)相鄰的同樣顏色的棋子。斜向勝負(fù)的判斷分為左斜,右斜兩個(gè)方向的判斷。
6 實(shí)現(xiàn)代碼
7 結(jié)束語
五子棋這個(gè)例子涉及到了C#中變量的聲明、創(chuàng)建和使用;二維數(shù)組的聲明、創(chuàng)建和使用,控件對(duì)象,對(duì)象的背景、大小等屬性;分支、循環(huán)流程控制語句;方法、List集合等基本知識(shí),幾乎囊括了C#基礎(chǔ)編程的所有知識(shí)點(diǎn),整個(gè)項(xiàng)目案例做下來,學(xué)生在做中學(xué),學(xué)中做,不知不覺就掌握了所有知識(shí)點(diǎn);此案例又具備趣味性,能提升學(xué)生學(xué)習(xí)的興趣,興趣是最好的老師,讓學(xué)生體會(huì)學(xué)習(xí)的樂趣,學(xué)習(xí)和教學(xué)也不那么枯燥,近兩年我在教學(xué)中采用此項(xiàng)目案例,效果不錯(cuò)。endprint