面向对象期中作业-五子棋程序设计作业_第1页
面向对象期中作业-五子棋程序设计作业_第2页
面向对象期中作业-五子棋程序设计作业_第3页
面向对象期中作业-五子棋程序设计作业_第4页
面向对象期中作业-五子棋程序设计作业_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象期中作业五子棋程序设计一、五子棋的由来 五子棋是我国古代的、传统的黑白棋种之一,大约在南北朝时期随围棋一起先后传入朝鲜、日本等地。五子棋在日本叫“连珠棋”。通过一系列的规则变化使连珠五子棋这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋。二、五子棋的棋盘 棋盘正中一点为“天元”。棋盘两端的横线称端线。棋盘左右最外边的两条纵线称边线。从两条端线和两条边线向正中发展而纵横交叉在第四条线形成的四个点称为“星”。天元和星应在棋盘上用小圆点标出。 以持黑方为准,棋盘上的纵轴线从左到右用英文字母AO标记。横行线从远到近用阿拉伯数字115标记。纵横轴上的横纵线交

2、叉点分别用横纵线标记的名称合写成。三、五子棋规则 1、行棋顺序 黑先、白后,从天元开始相互顺序落子。 2、判断胜负 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。 黑棋禁手判负(Lose),白棋无禁手。黑棋禁手包括“三、三”(Double Three)(包括“四、三、三”)、“四、四”(Double Four)(包括“四、四、三”)、“长连”(Overline)。黑棋只能以“四、三”取胜。 如分不出胜负,则定为平局(Draw)。 五连与禁手同时形成,先五为胜。 黑方禁手形成时,白方应立即指出。若白方未发现或发现后未指明而继续应子,则不能判黑方负。 3、规则的解释 术语介绍: 、

3、阳线和阴线 1、 阳线:棋盘上可见的横纵直线。 2、 阴线:棋盘上无实线连接的隐形斜线。 、连:在棋阳线和阴线的任意一条线上形成的有5个或5个以上的同色棋子不间隔地紧紧相连。 1、 五连:在棋盘上形成的5个同色棋子的连。 2、 长连:在棋盘上形成的6个或6个以上同色棋子的连。 、四包括活四和冲四。 1、活四:在棋盘某一条阳线或阴线上有同色4子不间隔地紧紧相连,且在此4子两端延长线上各有一个无子的交叉点与此4子紧密相连。 2、冲四:除活四外的,再下一着棋便可形成五连,并且存在五连的可能性的局面。 3、 白棋再下一着可形成长连的局面也视为四。 、三指活三,包括连三和跳三。 1、连三:在棋盘某一条阳

4、线或阴线上有同色三子相连,且在此三子两端延长线上有一端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。 2、跳三:中间仅间隔一个无子交叉点的连三,但两端延长线均至少有一个无子的交叉点与此三子相连。 、禁手:对局中禁止使用的着法。 1、黑棋禁手包括三三、四四和长连。 1.1 三三:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方活的局面。 1.2 四四:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方四的局面。 2、白棋无禁手。 、四三:指某一方同时具备两个先手,其中一个是四,一个是活三。 先手:对方必须应答的着法,其中冲四称为绝对先手。 、三手可交换:是指黑棋下盘面第3着

5、棋后,白方在应白之前,如感觉黑方棋形不利于己方,可提出交换,即执白棋一方变为执黑棋一方,而黑方不可以不换。 、五手两打:是指黑棋在下盘面上关键的第5手棋时,必须下两步棋,让白棋在这两步棋中任选一步,然后再继续对弈。一般说来,白棋肯定拿掉对白方不利的一点,而保留对黑方较为不利的那点让黑方行棋。四、UML图五、功能介绍开始:游戏设置,点击开始或选择新游戏菜单方能开始游戏。暂停和继续:是用时间计数器来规定没有棋手有15秒钟的下棋思考时间,期间可以暂停时间和继续时间,15秒倒计时结束,还未下棋系统将其至为自动放弃,系统判定此局为负。历史记录:历史纪录中记录了棋手每次下棋,所落子的位置,这样是棋手可查询

6、本盘棋所有落子的位置。悔棋:在感觉落子有误时,方可使用悔棋功能,每执行一次,系统将把执行前所下的一步棋,将其清除,使得下棋更人性化。六、代码及注释using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Net;using System.Net.Sockets;using System.Text;using System.IO;using System.Thread

7、ing;namespace game/ / fivechess 的摘要说明。/ public class fivechess : System.Windows.Forms.Formprivate System.Windows.Forms.MainMenu mainMenu1;private System.Windows.Forms.MenuItem menuItem1;private System.Windows.Forms.MenuItem menuItem5;private System.Windows.Forms.MenuItem menuItem6;private System.Com

8、ponentModel.IContainer components;private System.Windows.Forms.ImageList imageList1;private const int None = -1;/没有棋子private const int White = 0;/代表白棋private const int Black = 1;/代表黑棋private int timecount=15;private int ,checkerBoard = new int 15, 15;/棋盘(用来保存每一个棋子)private int nextPlayer;/下一个选手bool s

9、j = true;bool start = false;private int Playergetreturn nextPlayer;setnextPlayer = value;ReDrawNextPlayerMark();private System.Windows.Forms.MenuItem menuItem9;/下一次该黑棋还是白棋下private Stack History;/下棋的历史记录private System.Windows.Forms.MenuItem menuItem2;private System.Windows.Forms.GroupBox groupBox2;pr

10、ivate System.Windows.Forms.ListBox lstHistory;private System.Windows.Forms.GroupBox groupBox1;private System.Windows.Forms.TextBox Time;private System.Windows.Forms.Button stop;private System.Windows.Forms.Button goon;private System.Windows.Forms.Label lb;private System.Windows.Forms.Button startBT;

11、private System.Windows.Forms.Timer timer1;public fivechess()/ Required for Windows Form Designer support/InitializeComponent();/ TODO: Add any constructor code after InitializeComponent call/checkerBoard = new int 15,15;History = new Stack();Player = White;/默认设置为白棋先下Reset();/ / 清理所有正在使用的资源。/ protect

12、ed override void Dispose( bool disposing )if( disposing )if(components != null)components.Dispose();base.Dispose( disposing );#region Windows Form Designer generated code/ / Required method for Designer support - do not modify/ the contents of this method with the code editor./ private void Initiali

13、zeComponent()ponents = new System.ComponentModel.Container();System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(fivechess);this.menuItem9 = new System.Windows.Forms.MenuItem();this.menuItem5 = new System.Windows.Forms.MenuItem();this.menuItem6 = new System.Windo

14、ws.Forms.MenuItem();this.menuItem1 = new System.Windows.Forms.MenuItem();this.mainMenu1 = new System.Windows.Forms.MainMenu();this.menuItem2 = new System.Windows.Forms.MenuItem();this.imageList1 = new System.Windows.Forms.ImageList(ponents);this.groupBox2 = new System.Windows.Forms.GroupBox();this.l

15、stHistory = new System.Windows.Forms.ListBox();this.groupBox1 = new System.Windows.Forms.GroupBox();this.lb = new System.Windows.Forms.Label();this.Time = new System.Windows.Forms.TextBox();this.stop = new System.Windows.Forms.Button();this.goon = new System.Windows.Forms.Button();this.timer1 = new

16、System.Windows.Forms.Timer(ponents);this.startBT = new System.Windows.Forms.Button();this.groupBox2.SuspendLayout();this.groupBox1.SuspendLayout();this.SuspendLayout();/ / menuItem9/ this.menuItem9.Index = 1;this.menuItem9.Text = -;/ / menuItem5/ this.menuItem5.Index = 0;this.menuItem5.Text = 新游戏;th

17、is.menuItem5.Click += new System.EventHandler(this.menuItem5_Click);/ / menuItem6/ this.menuItem6.Index = 2;this.menuItem6.Text = 退出;this.menuItem6.Click += new System.EventHandler(this.menuItem6_Click);/ / menuItem1/ this.menuItem1.Index = 0;this.menuItem1.MenuItems.AddRange(new System.Windows.Form

18、s.MenuItem this.menuItem5, this.menuItem9, this.menuItem6);this.menuItem1.Text = 游戏;/ / mainMenu1/ this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem this.menuItem1, this.menuItem2);/ / menuItem2/ this.menuItem2.Index = 1;this.menuItem2.Text = 悔棋;this.menuItem2.Click += new System.E

19、ventHandler(this.menuItem2_Click);/ / imageList1/ this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit;this.imageList1.ImageSize = new System.Drawing.Size(20, 20);this.imageList1.ImageStream = (System.Windows.Forms.ImageListStreamer)(resources.GetObject(imageList1.ImageStream);thi

20、s.imageList1.TransparentColor = System.Drawing.Color.Transparent;/ / groupBox2/ this.groupBox2.Controls.Add(this.lstHistory);this.groupBox2.Cursor = System.Windows.Forms.Cursors.Hand;this.groupBox2.Font = new System.Drawing.Font(宋体, 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUni

21、t.Point, (System.Byte)(0);this.groupBox2.ImeMode = System.Windows.Forms.ImeMode.Off;this.groupBox2.Location = new System.Drawing.Point(5, 116);this.groupBox2.Name = groupBox2;this.groupBox2.Size = new System.Drawing.Size(212, 204);this.groupBox2.TabIndex = 5;this.groupBox2.TabStop = false;this.group

22、Box2.Text = 历史记录;/ / lstHistory/ this.lstHistory.ItemHeight = 14;this.lstHistory.Location = new System.Drawing.Point(12, 19);this.lstHistory.Name = lstHistory;this.lstHistory.Size = new System.Drawing.Size(187, 172);this.lstHistory.TabIndex = 0;/ / groupBox1/ this.groupBox1.Controls.Add(this.startBT

23、);this.groupBox1.Controls.Add(this.lb);this.groupBox1.Controls.Add(this.Time);this.groupBox1.Controls.Add(this.stop);this.groupBox1.Controls.Add(this.goon);this.groupBox1.Controls.Add(this.groupBox2);this.groupBox1.Cursor = System.Windows.Forms.Cursors.Hand;this.groupBox1.Font = new System.Drawing.F

24、ont(宋体, 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (System.Byte)(0);this.groupBox1.ImeMode = System.Windows.Forms.ImeMode.Off;this.groupBox1.Location = new System.Drawing.Point(321, 0);this.groupBox1.Name = groupBox1;this.groupBox1.Size = new System.Drawing.Size(231,

25、 338);this.groupBox1.TabIndex = 0;this.groupBox1.TabStop = false;/ / lb/ this.lb.Location = new System.Drawing.Point(20, 37);this.lb.Name = lb;this.lb.Size = new System.Drawing.Size(93, 18);this.lb.TabIndex = 9;this.lb.Text = 思考倒计时:;/ / Time/ this.Time.Location = new System.Drawing.Point(112, 32);th

26、is.Time.Name = Time;this.Time.Size = new System.Drawing.Size(76, 23);this.Time.TabIndex = 8;this.Time.Text = ;/ / stop/ this.stop.Location = new System.Drawing.Point(146, 70);this.stop.Name = stop;this.stop.Size = new System.Drawing.Size(48, 27);this.stop.TabIndex = 7;this.stop.Text = 暂停;this.stop.C

27、lick += new System.EventHandler(this.stop_Click);/ / goon/ this.goon.Location = new System.Drawing.Point(87, 73);this.goon.Name = goon;this.goon.Size = new System.Drawing.Size(46, 27);this.goon.TabIndex = 6;this.goon.Text = 继续;this.goon.Click += new System.EventHandler(this.goon_Click);/ / timer1/ t

28、his.timer1.Interval = 1000;this.timer1.Tick += new System.EventHandler(this.timer1_Tick);/ / startBT/ this.startBT.Location = new System.Drawing.Point(28, 72);this.startBT.Name = startBT;this.startBT.Size = new System.Drawing.Size(45, 26);this.startBT.TabIndex = 10;this.startBT.Text = 开始;this.startB

29、T.Click += new System.EventHandler(this.startBT_Click);/ / fivechess/ this.AccessibleDescription = ;this.AllowDrop = true;this.AutoScale = false;this.AutoScaleBaseSize = new System.Drawing.Size(10, 25);this.BackgroundImage = (System.Drawing.Image)(resources.GetObject($this.BackgroundImage);this.Clie

30、ntSize = new System.Drawing.Size(549, 331);this.Controls.Add(this.groupBox1);this.Cursor = System.Windows.Forms.Cursors.Hand;this.Font = new System.Drawing.Font(Microsoft Sans Serif, 16F);this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;this.ImeMode = System.Windows.Forms.ImeM

31、ode.Off;this.MaximizeBox = false;this.Menu = this.mainMenu1;this.Name = fivechess;this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;this.Text = 五子棋;this.groupBox2.ResumeLayout(false);this.groupBox1.ResumeLayout(false);this.ResumeLayout(false);#endregion/ / The main entry point

32、 for the application./ STAThread/ / 应用程序的主入口点。/ /STAThreadstatic void Main() Application.Run(new fivechess();/退出菜单private void menuItem6_Click(object sender, System.EventArgs e)this.Close();/新游戏菜单private void menuItem5_Click(object sender, System.EventArgs e)if(History.Count 0) this.Reset();timer1.S

33、top();this.Time.Text = ;if(this.lstHistory.Items.Count != 0)this.lstHistory.Items.Clear();start = true;this.timer1.Start();if(this.lstHistory.Items.Count != 0)this.lstHistory.Items.Clear();/重载重画函数protected override void OnPaint(PaintEventArgs e)System.Drawing.Graphics g = this.CreateGraphics();for(i

34、nt x = 0; x 15; x+)for(int y= 0; y 15; y+)if(checkerBoard y, x != None)DrawChess(new Point(x, y), checkerBoard y, x );ReDrawNextPlayerMark();base.OnPaint(e);/重载鼠标按下事件protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e) base.OnMouseDown(e);if(start)if(sj)switch( e.Button )/take

35、left button downcase MouseButtons.Left:if( (History.Count = 0) & (2 e.X) & (e.X 22) & (309 e.Y) & (e.Y 329) ) Player = (Player = White)? Black: White;elseAddChess( MToA( new Point(e.X, e.Y) ) );break;/take right button downcase MouseButtons.Right:/OnRButtonDown(new Point(e.X,e.Y);break;elseMessageBo

36、x.Show(请选择“开始!”);/把鼠标坐标转换成棋盘坐标private Point MToA(Point p)return new Point( (p.X - 15) / 20, (p.Y - 6) / 20);/开始新的棋局,所有数据复位并重画棋盘private void Reset()for( int i = 0; i 15; i+ )for( int j = 0; j 15; j+)checkerBoardi,j = None;History.Clear();/清空历史记录DrawCheckerBoard();/重画棋盘/重画棋盘private void DrawCheckerBoa

37、rd()this.BackColor = System.Drawing.SystemColors.Desktop;this.BackColor = System.Drawing.SystemColors.Control;/重画下一个选手的标志棋子private void ReDrawNextPlayerMark()System.Drawing.Graphics g = this.CreateGraphics();imageList1.Draw(g, 2, 309, 20, 20, Player);/在棋盘上画一个棋子private void DrawChess(Point pCoordinat

38、es,int iPlayer)System.Drawing.Graphics g = this.CreateGraphics();imageList1.Draw(g, 15 + pCoordinates.X * 20, 6 + pCoordinates.Y * 20, 20, 20, iPlayer);/在指定的棋盘坐标位置添加一个棋子private void AddChess(Point p)/判断是否超出边界if( (p.X 14) | (p.Y 14) ) return;/判断该位置有无棋子if( checkerBoard p.Y, p.X != None ) return;/如果已经有

39、了棋子则退出(这颗棋不能下)DrawChess( p,Player );if(Player = White)/该白棋下checkerBoard p.Y, p.X = White;this.lstHistory.Items.Add(白棋:+横:+(p.X+1).ToString()+,纵:+(15-p.Y).ToString();Player = Black;timer1.Stop();timecount=15;timer1.Start();elsecheckerBoard p.Y, p.X = Black;this.lstHistory.Items.Add(黑棋:+横:+(p.X+1).ToS

40、tring()+,纵:+(15-p.Y).ToString();Player = White;timer1.Stop();timecount=15;timer1.Start();History.Push( new Point(p.X, p.Y) );/添加历史记录CheckGameResult( p );/棋手悔棋/private void menuItem2_Click(object sender, System.EventArgs e)if(History.Count 0)this.timer1.Stop();Point p = (Point)History.Pop();checkerBo

41、ard p.Y, p.X = None;nextPlayer = (Player = White)? Black: White;int x = this.lstHistory.Items.Count;this.lstHistory.Items.RemoveAt(x-1);DrawCheckerBoard();this.timer1.Start();elsethis.timer1.Stop();MessageBox.Show(请下棋吧,已经没有可悔的棋子了!);/棋手思考时间的限定/private void timer1_Tick(object sender, System.EventArgs

42、e)Time.Text = timecount.ToString();if(timecount 0) this.Reset();timer1.Stop();timecount=15;this.Time.Text = ;start = false;if(Player = Black)timer1.Stop();MessageBox.Show(时间到,白方胜!);if(History.Count 0) this.Reset();timer1.Stop();timecount=15;this.Time.Text = ;start = false;elsetimecount-;/开始按钮private

43、 void startBT_Click(object sender, System.EventArgs e)if(History.Count 0) this.Reset();timer1.Stop();this.Time.Text = ;if(this.lstHistory.Items.Count != 0)this.lstHistory.Items.Clear();start = true;this.timer1.Start();if(this.lstHistory.Items.Count != 0)this.lstHistory.Items.Clear();/时间继续/private void goon_Click(object sender, System.EventArgs e)timer1.Start();sj = true;/时间暂停/private vo

温馨提示

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

评论

0/150

提交评论