C#程序设计报告学院:国土资源工程学院专业:测绘121姓名:YXD学号:20121010****程序课题:YXD自制五子棋指导老师:陈杰程序名称:YXD自制五子棋程序开发背景:现在校园里非常流行一些诸如像素鸟、别踩白快、2048等类似的益智小游戏,然而经典的五子棋游戏却不能被忽视。作为一个五子棋爱好者,加上学了c#程序设计,我就想不如自己也试着做一个五子棋游戏,由于之前还做了个学生管理系统,于是就在学生管理系统的基础上修改并添加了些许东西,做成了目前的“YXD自制五子棋”。程序开发平台:①MicrosoftVisualStudio2010②AdobePhotoshopCC程序开发参考网址:://wenku.baidu.com/link?url=kPsh8PgBQU3p4zsMhkKQMFVAGWSQqzIXrDEET3dPQoq2hNAOIUaNPrm4F9DXza0IokTDZjN5jEJu_1aHgys6pNTaoxEltPXOQT5-0IbIfI7等程序开发目的:做这个程序是想增加个人的创新和动手编程能力,进行知识的应用及再学习,完成作业任务的同时也能满足自己兴趣爱好。程序开发过程:自从老师布置了任务过后,我就开始想编个什么程序,刚开始想的是编一个qq登录界面或者学生管理系统,然后感觉学生管理系统应该内容比较丰富些,就开始着手编写这个程序,由于刚开始基础比较弱,所以基本上什么都是靠百度。而且当时也没有规划好,结果做好系统的登录界面后就不知道如何接着做下去了,无奈只好换题目了。下面是做的登录界面部分展示然后在吸取上次经验之后,我就先列出了编程序的思路:1,首先,不想之前做的系统给浪费掉,就想着把“学生信息管理系统”改成“五子棋登录系统”,账号:yanxudong;密码:yxd。2,然后账号密码正确后再跳转到五子棋游戏的界面3,接下来就是考虑如何编制棋盘4,然后参考以往的五子棋游戏,游戏界面要有游戏开始,悔棋,清盘,认输,哪方先下等选项5,紧接着就是设计游戏规则极其功能和性能了,可以悔棋,可以认输,可以选择哪方先下,最先五子连珠者获胜。6,等游戏结束的时候再显示“欢迎下次光临”。整理好思路后,然后就开始着手进行程序的编程了,首先做的是登录界面。由于之前已经做了登录界面,所以只需要把背景换个图片,把一些控件名字修改或删除部分控件就行。账号为yanxudong;密码为:yxd。以下是登录界面的部分代码:namespaceFivechess{publicpartialclassLogin:Form{privateUserInfouiLogin;publicLogin(refUserInfoui){InitializeComponent();uiLogin=ui;}privatevoidLogin_Load(objectsender,EventArgse){skinEngine1.SkinDialogs=false;this.skinEngine1.SkinFile=@..\Wave.ssk;}privatevoidbutton1_Click(objectsender,EventArgse){if(txtName.Text==yanxudong&&txtPassword.Text==yxd){uiLogin.UserName=txtName.Text;uiLogin.Password=txtPassword.Text;this.DialogResult=DialogResult.OK;}else{MessageBox.Show(登录失败¨¹,警告?,MessageBoxButtons.OK,MessageBoxIcon.Warning);}}privatevoidbutton2_Click(objectsender,EventArgse){this.Close();}privatevoidtxtName_TextChanged(objectsender,EventArgse){}privatevoidlabel2_Click(objectsender,EventArgse){}}publicclassUserInfo{privatestringstrUserName;privatestringstrPassword;publicstringUserName{get{returnstrUserName;}set{strUserName=value;}}publicstringPassword{get{returnstrPassword;}set{strPassword=value;}}publicUserInfo(){strUserName=;strPassword=;}}}接下来就是程序的主要部分,五子棋谱的制作。由于基础不好,所以还是大部分百度过来的,然后再进行整合。(1)绘制棋盘(是17*17的棋盘)Penp=newPen(Color.Black);for(inti=0;i16;i++)//线与线之间的间隔为30{Pointp1=newPoint(30,30*i);Pointp2=newPoint(450,30*i);g.DrawLine(p,p1,p2);}for(inti=0;i16;i++){Pointp1=newPoint(30*i,30);Pointp2=newPoint(30*i,450);g.DrawLine(p,p1,p2);}(2)绘制棋子if(!isStrart)//判断棋局是否开始return;//求矩形的X坐标,画到交叉点上intx1=e.X%30;//往哪个点靠intx2=e.X/30;if(x110&&x120)//不绘制任何图形{return;}elseif(x1=20){x2++;}intrecX=x2*30;//绘制另一个点//求矩形的Y坐标inty1=e.Y%30;inty2=e.Y/30;if(y110&&y120){return;}elseif(y1=20){y2++;}intrecY=y2*30;//得到坐标//记录上一个位置是下的位置if(qizi==1){hei=newPoint(x2,y2);}else{bai=newPoint(x2,y2);}//判断当前位置是否有棋子if(arrayQizi[x2,y2]0){MessageBox.Show(已经有棋子了,警告,MessageBoxButtons.OK,MessageBoxIcon.Warning);return;}else{arrayQizi[x2,y2]=qizi;}intr=10;//圆的半径Rectanglerec=newRectangle(recX-r,recY-r,r*2,r*2);//圆的外切矩形,圆心点,宽和高SolidBrushsb=newSolidBrush(Color.Black);//刷子得到棋子的颜色if(qizi==2)sb=newSolidBrush(Color.White);Graphicsg=this.CreateGraphics();//画棋子.g.FillEllipse(sb,rec);g.Dispose();(3)判断输赢intziCount=1;//棋子声明qiziName=黑方;if(qizi==2){qiziName=白方;};//水平方向判断向左向右找,y坐标不变,x坐标+1或-1intxCount=x2;//x、y坐标表示intyCount=y2;while(arrayQizi[--xCount,yCount]==qizi)//往左往右判断是否5颗{ziCount++;}//棋子相同就加xCount=x2;//x坐标变while(arrayQizi[++xCount,yCount]==qizi){ziCount++;}if(ziCount==5)MessageBox.Show(qiziName+获胜,游戏结束,MessageBoxButtons.OK,MessageBoxIcon.Information);//垂直方向判断向上向下找,x坐标不变,y坐标+1或-1xCount=x2;//x、y坐标表示yCount=y2;ziCount=1;while(arrayQizi[xCount,--yCount]==qizi){ziCount++;}yCount=y2;while(arrayQizi[xCount,++yCount]==qizi){ziCount++;}if(ziCount==5)MessageBox.Show(qiziName+获胜,游戏结束,MessageBoxButtons.OK,MessageBoxIcon.Information);//\方向判断向左上找,向右下找,x和y同时+1或-1xCount=x2;yCount=y2;ziCount=1;while(arrayQizi[--xCount,--yCount]==qizi){ziCount++;}xCount=x2;yCount=y2;while(arrayQizi[++xCount,++yCount]==qizi){ziCount++;}if(ziCount==5)MessageBox.Show(qiziName+获胜,游戏结束,MessageBoxButtons.OK,MessageBoxIcon.Information);///方向判断向右上找,向左下找,x+1或-1,y-1或+1xCount=x2;yCount=y2;ziCount=1;while(arrayQizi[++xCount,--yCount]==qizi){ziCount++;}xCount=x2;yCount=y2;while(arrayQizi[--xCount,++yCount]==qizi){ziCount++;}if(ziCount==5)MessageBox.Show(qiziName+获胜,游戏结束,MessageBoxButtons.OK,MessageBoxIcon.Information);(4)游戏开始及判断哪方先下privatevoid开始ToolStripMenuItem_Click(objectsender,EventArgse){isStrart=true;if(qiziStart)qiziName=黑方下子;elseqiziName=白方下子;开始ToolStripMenuItem.Enabled=false;清盘ToolStripMenuItem.Enabled=true;黑子先下ToolStripMenuItem.Enabled=false;白子先下ToolStripMenuItem.Enabled=false;}(5)清盘功能privatevoid清盘ToolStripMenuItem_Click(objectsender,EventArgse){isStrart=false;arrayQizi=newint[17,17];if(qiziStart){黑子先下ToolStripMenuItem.Checked=true;白子先下ToolStripMenuItem.Checked=false;}else{黑子先下ToolStripMenuItem.Checked=false;白子先下ToolStripMenuItem.Checked=true;}Rectanglerec=newRectangle(20,20,450,450);this.Invalidate(rec);开始ToolStripMenuItem.Enabled=true;黑子先下ToolStripMenuItem.Enabled=true;白子先下ToolStripMenuItem.Enabled=true;清盘ToolStripMenuItem.Enabled=false;}(6)退出功能p