C#WINFORM教学案例

2017-11-17 11:07纪辉进
科技视界 2017年19期
关键词:白子水平线落子

纪辉进

教学中采用生活化的案例,能提升教学效果,实现后让学生有成就感,提升学习兴趣,让兴趣转化为学习动力。

很多学校的计算机软件技术专业课程中,C、C#是其专业核心课程,本文以C#程序设计语言为例,讲述五子棋的实现过程。

五子棋棋盘为15*15的方格,棋子为黑子和白子,赢棋规则为无论哪一方棋子在横向、纵向或斜向五子无间隔连成线即赢。

1 棋盘的绘制

用PS软件绘制一张图片,作为窗体的背景棋盘,棋盘为正方形,根据显示器高度来绘制水平线,上下边缘留一些像素的空余,不然棋子落到太边缘不好看,剩余高度均分画15条水平线;用同样的方法绘制垂直方向的线,显示器宽度大于高度,垂直线可以是PS中水平线的90度翻转。水平线垂直方向居中,垂直线水平方向居中。

2 棋子的绘制

用PS软件分别绘制黑子和白子,棋子的直径要比棋盘格小一点,这样才不至于落子后在棋盘上占的太满,为美观给棋子添加斜面浮雕和高光效果,这样棋子看起来更立体真实。黑白子图片分别保存为png格式。

3 落子定位

鼠标在窗体中单击的时候落一颗子,棋子用按钮做,按钮用黑白子的图片做背景,设置一变量,随着落子递增,用变量奇偶性决定按钮背景图的黑白背景图属性。

鼠标单击点并不是落子的真正坐标,因单击点坐标跟棋盘线有间距,棋子应落在横竖线交叉点,单击点离哪个交叉点近就落在哪个交叉点。用鼠标单击点的横坐标减去一个合适的常量对横坐标做修正,再模棋盘格宽度得到的值为棋子落在第几根竖线上,用得到的整型数乘棋盘格宽度得到的横坐标一定在交叉点上;同样的方法可以得到棋子落在第几根横向上;配合一个15行15列的二维整型数组,初始值为0(对应横纵线交错没落子),落黑子可记为1,落白子可记为2,落子前检查二维数组对应元素,为0的才可以落子。这样就解决了落什么子和定位在哪里的问题。

4 悔棋

前面已经设置一变量记录下了多少颗棋子,每下一颗棋子,就是向当前窗体添加一个按钮控件,用List集合记录按钮控件,悔棋的时候将List集合中記录的最后一个按钮控件从当前窗体中去掉即可。

5 胜负判断

每次落子后都需要判断黑子或白子是否赢了,判断赢棋的标准为横向是否有五个相邻的同样颜色的棋子,纵向是否有五个相邻的同样颜色的棋子,斜向是否有五个相邻的同样颜色的棋子。斜向胜负的判断分为左斜,右斜两个方向的判断。

6 实现代码

7 结束语

五子棋这个例子涉及到了C#中变量的声明、创建和使用;二维数组的声明、创建和使用,控件对象,对象的背景、大小等属性;分支、循环流程控制语句;方法、List集合等基本知识,几乎囊括了C#基础编程的所有知识点,整个项目案例做下来,学生在做中学,学中做,不知不觉就掌握了所有知识点;此案例又具备趣味性,能提升学生学习的兴趣,兴趣是最好的老师,让学生体会学习的乐趣,学习和教学也不那么枯燥,近两年我在教学中采用此项目案例,效果不错。endprint

猜你喜欢
白子水平线落子
基于水平线的图像处理
最好的数学老师
琴(外一首)
银行理财子公司“落子”布局
摄影小技巧,教你拍出不一样的大片
落子山东,意在全局
药食同源蔬菜——白子菜
90后唐丹:人生如棋,落子不悔
基于优先度的改进最低水平线排样算法