C#课设报告书—游戏五子棋.doc_第1页
C#课设报告书—游戏五子棋.doc_第2页
C#课设报告书—游戏五子棋.doc_第3页
C#课设报告书—游戏五子棋.doc_第4页
C#课设报告书—游戏五子棋.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

课程设计说明书 NO.19五子棋1设计目的五子棋游戏不仅能增强人们的抽象思维能力、逻辑推理能力、空间想象力,提高人们的记忆力、心算能力等,而且深含哲理,有助于修身养性。五子棋既有现代休闲方式所特有的特征“短、平、快”,又有中国古典哲学所包含的高深学问“阴阳易理”。它既有简单易学的特点,为人民群众所喜闻乐见,又有深奥的技巧;既能组织举办群众性的比赛、活动,又能组织举办高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观,它是中西方文化的交融点,也是中西方文化交流的一个平台。 自从计算机作为游戏对战平台以来,各种棋类游戏如雨后春笋般纷纷冒出。五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。同时具有简单易学、既动手又动脑的特点。同时也为锻炼自己的编程能力。2功能描述本次设计的是基于Microsoft Visual Studio 2008平台所设计的五子棋游戏。用户分为持黑子方和持白子方,通过鼠标单击游戏见面中线的交叉位置下棋。由持白子一方先下,持黑子方后下。在下棋的过程中每方有30秒的考虑时间,如果超出考虑时间则由另一方开始下棋。在下棋的过程中用户可以根据自己的意愿悔棋,每悔一次棋步数减一。(1)画棋盘和棋子,并添加具有倒计时功能的时钟,当一方的等待时间超过三十秒的时候,切换到另一方下棋。(2)添加悔棋一步按钮,当一方想要悔棋时可以单击此按钮,则之前下的那步棋被撤销。(3)当有一方横向,纵向或斜向有连续的五子连成一线时,那一方获胜。(4)当有一方点击重新开局这一子菜单项时,则将重新开始一盘棋。(5)一方下一步棋则步数增一,一方悔棋一步则步数减一。(6)在游戏中,会显示当前的系统时间,也可以根据用户需求隐藏起来。3方案论证 3.1总体设计3.1.1功能框图五子棋倒计时功能判断输赢功能重新开局功能步数计算功能隐藏显示时间功能悔棋功能图1 总体功能框图3.2详细设计3.2.1程序界面设计(1)菜单设计 本五子棋游戏中共“游戏”和“帮助”两个菜单项,在“游戏”菜单项中有重新开局和退出两个子菜单,在“帮助”菜单项中有关于五子棋、技术支持、隐藏显示时间和屏保四个子菜单。(2)主窗体设计控件及相应属性如表1所示。表1 编辑控件属性控件名属性属性值Label1BackColorControlDarkLocation12,35Size401,401TabIndex1VisibleTrueLabel1BackColorControlLocation419,52Size167,30Text当前玩家:白方TabIndex4VisibleTrueLabel1BackColorControlLocation419,315Size145,30控件名属性属性值Label3Text剩余用时:TabIndex5VisibleTrueLabel4BackColorControlLocation420,365Size166,30TabIndex7Text每轮不得超时30s!VisibleTrueButton1BackColorGrayLocation522,398Size99,38TabIndex7Text每轮不得超时30s!Button2Text退出游戏Location417, 398panel1BackgroundImageSystem.Drawing.BitmapTimer1enabledTrueInterval1000ModifiersPrivate3.2.4程序功能设计 (1)在gobang类中添加下列数据成员及成员函数。private bool, chessBoard = new bool20, 20; /判断棋盘指定坐标是否被绘制 private int, chessColor = new int20, 20; /用数组记录棋子的颜色,1-白色,2-黑色 private bool IsWhite = true; /判断是否是白棋 private Stack last=new Stack(); /下棋历史记录(2)画棋盘代码如下: public void Checker(Graphics g) Pen myPen = new Pen(Color.Black); for (int i = 10; i = 400; i = i + 20) g.DrawLine(myPen, 0, i, 400, i); for (int i = 10; i 0) Point p = last.Pop(); chessBoardp.X, p.Y = false; chessColorp.X, p.Y = 0; IsWhite = !IsWhite; SolidBrush sb = new SolidBrush(Color.Gray); g.FillEllipse(sb,p.X*20,p.Y*20,20,20); (5)检查游戏结果代码如下: public bool CheckGameResult(int x, int y) /检查横向 x = (x - x % 20) / 20; y = (y - y % 20) / 20; int sum1 = 1; int sum2 = 1; int sum3 = 1; int sum4 = 1; int search = chessColorx, y; for (int i = x + 1; i = 0; i-) if (chessColori, y = search) sum1+; else break; /检查纵向 for (int i = y + 1; i = 0; i-) if (chessColorx, i = search) sum2+; else break; /检查主对角线 for (int i = x - 1, j = y - 1; i = 0 & j = 0; i-, j-) if (chessColori, j = search) sum3+; else break; for (int i = x + 1, j = y + 1; i chessColor.GetLength(0) & j chessColor.GetLength(1); i+, j+) if (chessColori, j = search) sum3+; else break; /检查副对角线 for (int i = x + 1, j = y - 1; i = 0; i+, j-) if (chessColori, j = search) sum4+; else break; for (int i = x - 1, j = y + 1; i = 0 & j = 5 | sum2 = 5 | sum3 = 5 | sum4 = 5) return true; else return false; (6)输出游戏结果代码如下: public void OutputResult(int x, int y) x = (x - x % 20) / 20; y = (y - y % 20) / 20; if (chessColorx, y = 1) MessageBox.Show(白棋获胜, 比赛结果); else MessageBox.Show(黑棋获胜, 比赛结果); (7)判断是否是白棋代码如下: public bool PlayWhite() if (IsWhite) return true; else return false; (8)更换玩家代码如下: public void ChangePlayer() IsWhite = !IsWhite; (9)判断当前一格是否已被绘制代码如下: public bool isDraw(int x, int y) return chessBoard(x - x % 20) / 20, (y - y % 20) / 20; 4运行结果与分析(1)游戏界面运行如图2、图3。图2 五子棋运行界面图3五子棋运行界面(2)游戏结束如图4所示图4游戏结束界面(3)屏保显示如图5所示图5屏保界面5心得体会在这次的C#课程设计中,我负责的是画棋子模块。当单击棋盘的时候,在棋盘上画出一个圆形带颜色的棋子,画棋子之前首先判断棋盘上的这个位置有没有被画,如果没有被画便可以画上,还要考虑,每次画的都是什么颜色的棋子,这次试验感受颇多,从中无也学到了很多书上没有的知识。也知道实践只重要性,也加深对C#的更一步了解。 在这次实训中,我对C#有了一个更深的了解认识,也对这个学期学的知识得到巩固,还尝试运行编程,虽然每次运行程序不一定会成功。通过自己上网查资料编写程序,经过多次的上机调试和上网查资料和修改,最终把最初的理论知识转化基本技能。通过这次实习,让我们初步有了编写系统的能力,我们对很多的函数有了新的认识,也学会了运用多种函数,也明白了编写软件的基本过程,和基本方法。编写软件的过程中我们又学到了曾经自己不知道的函数或是自己不会的函数的用法。这次课程设计课总的来说让我受益匪浅。这次的实训,使我对C#的学习产生浓厚的兴趣。 在这几天的编写过程中我们对c#有了更进一步的认识和了解。此次编程过程的经验和知识肯定能促进我以后的学习。此次课程设计不仅给了我们很多很好的经验,也让我们体会到了失败时的焦急和难受,也体会到了成功时的兴奋与喜悦。参考文献1 罗斌,越飞,等. Visual C# 2005编程实例精粹M. 北京: 中国水利水电出版社, 2006 .10:10-1352 陈哲,戴博,等. Visual C# 2005程序设计M.北京:清华大学出版社,2007 .7:38-2353 耿肇英,等.C#程序设计简明教程 M. 北京: 人民邮电出版社, 2007. 12:44-1564 刘甫迎、刘光会、王蓉. C#程序设计教程M.北京:电子工业出版社,2008 .9:32-1055 陈佛敏,潘春华,等. C#程序设计简明教程M.北京:人民邮电出版社,2008.11:10-1036 李旗. C#.NET程序设计M北京:机械工业出版社,2008. 7:67-2347 古万荣. Visual C#轻松入门M.北京:人民邮电出版社,2009.5:22-2128 熊壮,宋文强. C#程序设计M.北京:高等教育出版社,2010 .14:02-2719 Christian Nagel,等. C#高级编程M, 李铭,译.北京:清华大学出版社,2010. 9:32-10510 Karli Waston,等. C#高级编程M.齐立波,译. 北京:清华大学出版社,2010 .11:21-1796附录(部分源代码)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 五子棋 public partial class Form1 : Form gobang gb = new gobang(); /创建对象 private int Sec = 30; /设置游戏时间为30s private int step1 = 0, step2 = 0; /白棋和黑棋下子数 public Form1() InitializeComponent(); private void 作者WToolStripMenuItem_Click(object sender, EventArgs e) MessageBox.Show(13计算机专升本 F1383136 郭轶,版权所有); private void 关于五子棋AToolStripMenuItem_Click(object sender, EventArgs e) System.Diagnostics.Process.Start(/view/2697.htm?fr=ala0_1_1); /参照网上做法 private void 退出XToolStripMenuItem_Click(object sender, EventArgs e) this.Close(); private void 重新开局NToolStripMenuItem_Click(object sender, EventArgs e) Graphics g = this.label1.CreateGraphics(); gb.ReDrawBorad(g); step1 = step2 = 0; private void 屏保PToolStripMenuItem_Click(object sender, EventArgs e) Form2 f = new Form2(); f.Show(); private void 隐藏时间HToolStripMenuItem_Click(object sender, EventArgs e) if (this.toolStripStatusLabel2.Visible = true) this.toolStripStatusLabel2.Visible = false; else this.toolStripStatusLabel2.Visible = true; private void label1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics; Pen p = new Pen(Color.Black); gb.Checker(g); private void label1_MouseDown(object sender, MouseEventArgs e) Graphics g = this.label1.CreateGraphics(); bool isWhite = gb.PlayWhite(); if (isWhite) gb.DrawChess(g, Color.White, e.X, e.Y); step1+; this.toolStripStatusLabel3.Text = 白:+step1.ToString(); this.toolStripStatusLabel1.Text = this.label2.Text = 当前玩家:黑方; else gb.DrawChess(g, Color.Black, e.X, e.Y); step2+; this.toolStripStatusLabel4.Text =

温馨提示

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

评论

0/150

提交评论