昆明理工大学c#程序设计开发报告(共34页)_第1页
昆明理工大学c#程序设计开发报告(共34页)_第2页
昆明理工大学c#程序设计开发报告(共34页)_第3页
昆明理工大学c#程序设计开发报告(共34页)_第4页
昆明理工大学c#程序设计开发报告(共34页)_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C#程序设计报告 学院:国土资源工程学院专业:测绘121姓名:YXD学号:20121010*程序课题:YXD自制五子棋指导老师:陈杰 程序名称:YXD自制五子棋程序开发背景:现在校园里非常流行一些诸如像素鸟、别踩白快、2048等类似的益智小游戏,然而经典的五子棋游戏却不能被忽视。作为一个五子棋爱好者,加上学了c#程序设计,我就想不如自己也试着做一个五子棋游戏,由于之前还做了个学生管理系统,于是就在学生管理系统的基础上修改并添加了些许东西,做成了目前的“YXD自制五子棋”。程序开发平台: Microsoft Visual Studio 2010 Adobe Photoshop CC程序开发参考网

2、址:程序开发目的:做这个程序是想增加个人的创新和动手编程能力,进行知识的应用及再学习,完成作业任务的同时也能满足自己兴趣爱好。程序开发过程:自从老师布置了任务过后,我就开始想编个什么程序,刚开始想的是编一个qq登录界面或者学生管理系统,然后感觉学生管理系统应该内容比较丰富些,就开始着手编写这个程序,由于刚开始基础比较弱,所以基本上什么都是靠百度。而且当时也没有规划好,结果做好系统的登录界面后就不知道如何接着做下去了,无奈只好换题目了。下面是做的登录界面部分展示 然后在吸取上次经验之后,我就先列出了编程序的思路:1, 首先,不想之前做的系统给浪费掉,就想着把 “学生信息管理系统”改成“五子棋登录

3、系统”,账号:yanxudong;密码:yxd。2, 然后账号密码正确后再跳转到五子棋游戏的界面3, 接下来就是考虑如何编制棋盘4, 然后参考以往的五子棋游戏,游戏界面要有游戏开始,悔棋,清盘,认输,哪方先下等选项5, 紧接着就是设计游戏规则极其功能和性能了,可以悔棋,可以认输,可以选择哪方先下,最先五子连珠者获胜。6, 等游戏结束的时候再显示“欢迎下次光临”。整理好思路后,然后就开始着手进行程序的编程了,首先做的是登录界面。由于之前已经做了登录界面,所以只需要把背景换个图片,把一些控件名字修改或删除部分控件就行。账号为yanxudong;密码为:yxd。以下是登录界面的部分代码:namesp

4、ace Fivechess public partial class Login : Form private UserInfo uiLogin; public Login(ref UserInfo ui) InitializeComponent(); uiLogin = ui; private void Login_Load(object sender, EventArgs e) skinEngine1.SkinDialogs = false; this.skinEngine1.SkinFile = ".Wave.ssk" private void button1_Cli

5、ck(object sender, EventArgs e) if (txtName.Text = "yanxudong" && txtPassword.Text = "yxd") uiLogin.UserName = txtName.Text; uiLogin.Password = txtPassword.Text; this.DialogResult = DialogResult.OK; else MessageBox.Show("登录失败¨¹", "警告?", Messag

6、eBoxButtons.OK, MessageBoxIcon.Warning); private void button2_Click(object sender, EventArgs e) this.Close(); private void txtName_TextChanged(object sender, EventArgs e) private void label2_Click(object sender, EventArgs e) public class UserInfo private string strUserName; private string strPasswor

7、d; public string UserName get return strUserName; set strUserName = value; public string Password get return strPassword; set strPassword = value; public UserInfo() strUserName = "" strPassword = "" 接下来就是程序的主要部分,五子棋谱的制作。由于基础不好,所以还是大部分百度过来的,然后再进行整合。(1)绘制棋盘(是17*17的棋盘) Pen p = new P

8、en(Color.Black); for (int i = 0; i < 16; i+) /线与线之间的间隔为30 Point p1 = new Point(30, 30 * i); Point p2 = new Point(450, 30 * i); g.DrawLine(p, p1, p2); for (int i = 0; i < 16; i+) Point p1 = new Point(30 * i, 30); Point p2 = new Point(30 * i, 450); g.DrawLine(p, p1, p2); (2) 绘制棋子if (!isStrart) /

9、判断棋局是否开始 return; /求矩形的X坐标,画到交叉点上 int x1 = e.X % 30; /往哪个点靠 int x2 = e.X / 30; if (x1 > 10 && x1 < 20) /不绘制任何图形 return; else if (x1 >= 20) x2+; int recX = x2 * 30; /绘制另一个点 /求矩形的Y坐标 int y1 = e.Y % 30; int y2 = e.Y / 30; if (y1 > 10 && y1 < 20) return; else if (y1 >= 2

10、0) y2+; int recY = y2 * 30; /得到坐标 /记录上一个位置是下的位置 if (qizi = 1) hei = new Point(x2, y2); else bai = new Point(x2, y2); /判断当前位置是否有棋子 if (arrayQizix2, y2 > 0) MessageBox.Show("已经有棋子了", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; else arrayQizix2, y2 = qizi; int r

11、= 10; /圆的半径 Rectangle rec = new Rectangle(recX - r, recY - r, r * 2, r * 2); /圆的外切矩形,圆心点, 宽和高 SolidBrush sb = new SolidBrush(Color.Black); /刷子得到棋子的颜色 if (qizi = 2) sb = new SolidBrush(Color.White); Graphics g = this.CreateGraphics(); /画棋子. g.FillEllipse(sb, rec); g.Dispose();(3)判断输赢int ziCount = 1;

12、/棋子声明 qiziName = "黑方" if (qizi = 2) qiziName = "白方" ; /水平方向判断 向左向右找,y坐标不变,x坐标+1或-1 int xCount = x2; /x、y坐标表示 int yCount = y2; while (arrayQizi-xCount, yCount = qizi) /往左往右判断是否5颗 ziCount+; /棋子相同就加 xCount = x2; /x坐标变 while (arrayQizi+xCount, yCount = qizi) ziCount+; if (ziCount = 5

13、) MessageBox.Show(qiziName + "获胜", "游戏结束", MessageBoxButtons.OK, MessageBoxIcon.Information); /垂直方向判断 向上向下找,x坐标不变,y坐标+1或-1 xCount = x2; /x、y坐标表示 yCount = y2; ziCount = 1; while (arrayQizixCount, -yCount = qizi) ziCount+; yCount = y2; while (arrayQizixCount, +yCount = qizi) ziCoun

14、t+; if (ziCount = 5) MessageBox.Show(qiziName + "获胜", "游戏结束", MessageBoxButtons.OK, MessageBoxIcon.Information); /方向判断 向左上找,向右下找 ,x和y同时+1或-1 xCount = x2; yCount = y2; ziCount = 1; while (arrayQizi-xCount, -yCount = qizi) ziCount+; xCount = x2; yCount = y2; while (arrayQizi+xCount

15、, +yCount = qizi) ziCount+; if (ziCount = 5) MessageBox.Show(qiziName + "获胜", "游戏结束", MessageBoxButtons.OK, MessageBoxIcon.Information); /方向判断 向右上找,向左下找 ,x+1或-1,y-1或+1 xCount = x2; yCount = y2; ziCount = 1; while (arrayQizi+xCount, -yCount = qizi) ziCount+; xCount = x2; yCount =

16、y2; while (arrayQizi-xCount, +yCount = qizi) ziCount+; if (ziCount = 5) MessageBox.Show(qiziName + "获胜", "游戏结束", MessageBoxButtons.OK, MessageBoxIcon.Information);(4)游戏开始及判断哪方先下private void 开始ToolStripMenuItem_Click(object sender, EventArgs e) isStrart = true; if (qiziStart) qizi

17、Name = "黑方下子" else qiziName = "白方下子" 开始ToolStripMenuItem.Enabled = false; 清盘ToolStripMenuItem.Enabled = true; 黑子先下ToolStripMenuItem.Enabled = false; 白子先下ToolStripMenuItem.Enabled = false; (5)清盘功能private void 清盘ToolStripMenuItem_Click(object sender, EventArgs e) isStrart = false;

18、arrayQizi = new int17, 17; if (qiziStart) 黑子先下ToolStripMenuItem.Checked = true; 白子先下ToolStripMenuItem.Checked = false; else 黑子先下ToolStripMenuItem.Checked = false; 白子先下ToolStripMenuItem.Checked = true; Rectangle rec = new Rectangle(20, 20, 450, 450); this.Invalidate(rec); 开始ToolStripMenuItem.Enabled

19、= true; 黑子先下ToolStripMenuItem.Enabled = true; 白子先下ToolStripMenuItem.Enabled = true; 清盘ToolStripMenuItem.Enabled = false; (6)退出功能private void 退出WToolStripMenuItem_Click(object sender, EventArgs e) DialogResult close = MessageBox.Show("您是否要退出?", "信息提示", MessageBoxButtons.OKCancel,

20、MessageBoxIcon.Information); if (close = DialogResult.OK) Application.Exit(); (7)悔棋功能private void 悔棋ToolStripMenuItem_Click(object sender, EventArgs e) if (hei != Point.Empty && bai != Point.Empty) if (qizi = 1 ) /qizi=1或者2判断先走白的 还是先走黑的,1黑的先走,1就变成了2(该白的走了) 现在我悔棋,实际上是黑的悔的,所以在悔过之后,把它变回来,它再次走的时

21、候,绘制的还是黑的。 arrayQizibai.X, bai.Y = 0; qizi = 2; else arrayQizihei.X, hei.Y = 0; qizi = 1; Rectangle rec1 = new Rectangle(20, 20, 450, 450); this.Invalidate(rec1); (8)认输功能private void 认输ToolStripMenuItem_Click(object sender, EventArgs e) if (MessageBox.Show(qiziName + ",确定认输吗?", "警告&qu

22、ot;, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) = DialogResult.OK) if (qiziName = "黑方") qiziName = "白方" else qiziName = "黑方" MessageBox.Show(qiziName + "获胜", "游戏结束", MessageBoxButtons.OK, MessageBoxIcon.Information); isStrart = false; (9)退出界

23、面private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) DialogResult close = MessageBox.Show("您是否要退出?", "信息提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (close = DialogResult.OK) Application.Exit(); private void Fivechess_FormClosed(object sender, F

24、ormClosedEventArgs e) if (MessageBox.Show("欢迎下次光临!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information) = DialogResult.OK) Application.Exit(); 程序开发结果截图:(1) 登录界面(提示控件里面有账号密码提示)(2) 然后跳转到五子棋游戏界面(3) 游戏开局(黑子先下)(4) 悔棋(白子悔棋)(5) 游戏结束(黑方获胜)(6) 认输(白方认输)(7) 退出游戏程序开发遇到的困难:由于刚开始对c#不是很明

25、白,只对vc和vb有些了解,做这个程序还是困难很大的,基本上初期做的时候都是靠百度才能进行。从最基础的背景添加,Button,TextBox,Label等基础控件的使用,都是自己在制作编写“学生管理系统”时慢慢摸索出来的。当然最难的还是五子棋游戏的制作编写过程,期间百度了好多有关五子棋制作的思路及代码,然后就开始慢慢摸索。在编写游戏规则那一块的时候,尝试了很多代码,最后还是靠同学的帮助才完成它。程序开发体会;通过这次练习,我对c#有了进一步的认识,也从最初的什么都不会,慢慢学会了如何做一些基础的编程。由于当初的基础不牢固,很多概念还不是很明白,在做五子棋游戏的时候,我又通过上网查询等途径搜索资

26、料,在提高编程能力的同时,也提高了寻找信息、筛选信息的能力。附录1: “ YXD自制五子棋”代码(-)登录界面代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace Fivechess public partial class Login : Form private UserI

27、nfo uiLogin; public Login(ref UserInfo ui) InitializeComponent(); uiLogin = ui; private void Login_Load(object sender, EventArgs e) skinEngine1.SkinDialogs = false; this.skinEngine1.SkinFile = ".Wave.ssk" private void button1_Click(object sender, EventArgs e) if (txtName.Text = "yanxu

28、dong" && txtPassword.Text = "yxd") uiLogin.UserName = txtName.Text; uiLogin.Password = txtPassword.Text; this.DialogResult = DialogResult.OK; else MessageBox.Show("登录失败", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); private void button2_Click(object

29、 sender, EventArgs e) this.Close(); private void txtName_TextChanged(object sender, EventArgs e) private void label2_Click(object sender, EventArgs e) public class UserInfo private string strUserName; private string strPassword; public string UserName get return strUserName; set strUserName = value;

30、 public string Password get return strPassword; set strPassword = value; public UserInfo() strUserName = "" strPassword = "" (二)五子棋游戏代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.T

31、ext;using System.Windows.Forms;using System.Media;using System.IO;using System.Collections;namespace Fivechess public partial class Fivechess : Form public Fivechess() InitializeComponent(); int qizi = 1; /定义棋子,1为黑2为白 bool isStrart = false; bool qiziStart; string qiziName; /棋子名称 int, arrayQizi = new

32、 int17, 17; /数组存棋子 Point hei = Point.Empty; /坐标记录黑棋上次下的位置 Point bai = Point.Empty; /记录白旗上次下的位置 /private void Fivechess_Load(object sender, EventArgs e) / / skinEngine1.SkinDialogs = false; / this.skinEngine1.SkinFile = ".Wave.ssk" / SoundPlayer msc = new SoundPlayer(".1.wav"); /

33、msc.Play(); / private void Fivechess_FormClosed(object sender, FormClosedEventArgs e) if (MessageBox.Show("欢迎下次光临!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information) = DialogResult.OK) Application.Exit(); private void Fivechess_Paint(object sender, PaintEventArgs e) Grap

34、hics g = this.CreateGraphics(); #region 绘制棋盘 Pen p = new Pen(Color.Black); for (int i = 0; i < 16; i+) /线与线之间的间隔为30 Point p1 = new Point(30, 30 * i); Point p2 = new Point(450, 30 * i); g.DrawLine(p, p1, p2); for (int i = 0; i < 16; i+) Point p1 = new Point(30 * i, 30); Point p2 = new Point(30

35、* i, 450); g.DrawLine(p, p1, p2); #endregion #region 当有棋子后,完成棋子重绘 for (int i = 0; i < 16; i+) for (int j = 0; j < 16; j+) SolidBrush sb; Rectangle rec = new Rectangle(i * 30 - 10, j * 30 - 10, 20, 20); if (arrayQizii, j = 1) /判断当前点是黑子和白子 sb = new SolidBrush(Color.Black); g.FillEllipse(sb, rec)

36、; else if (arrayQizii, j = 2) sb = new SolidBrush(Color.White); g.FillEllipse(sb, rec); #endregion g.Dispose(); private void Fivechess_MouseDown(object sender, MouseEventArgs e) #region 绘制棋子 if (!isStrart) /判断棋局是否开始 return; /求矩形的X坐标,画到交叉点上 int x1 = e.X % 30; /往哪个点靠 int x2 = e.X / 30; if (x1 > 10

37、&& x1 < 20) /不绘制任何图形 return; else if (x1 >= 20) x2+; int recX = x2 * 30; /绘制另一个点 /求矩形的Y坐标 int y1 = e.Y % 30; int y2 = e.Y / 30; if (y1 > 10 && y1 < 20) return; else if (y1 >= 20) y2+; int recY = y2 * 30; /得到坐标 /记录上一个位置是下的位置 if (qizi = 1) hei = new Point(x2, y2); else b

38、ai = new Point(x2, y2); /判断当前位置是否有棋子 if (arrayQizix2, y2 > 0) MessageBox.Show("已经有棋子了", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; else arrayQizix2, y2 = qizi; int r = 10; /圆的半径 Rectangle rec = new Rectangle(recX - r, recY - r, r * 2, r * 2); /圆的外切矩形,圆心点, 宽和高

39、 SolidBrush sb = new SolidBrush(Color.Black); /刷子得到棋子的颜色 if (qizi = 2) sb = new SolidBrush(Color.White); Graphics g = this.CreateGraphics(); /画棋子. g.FillEllipse(sb, rec); g.Dispose(); #endregion #region 判断输赢 int ziCount = 1; /棋子声明 qiziName = "黑方" if (qizi = 2) qiziName = "白方" ; /水平方向判断 向左向右找,y坐标不变,x坐标+1或-1 int xCount = x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论