《面向对象期中作业五子棋程序设计作业》.docx
- 文档编号:7001672
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:24
- 大小:72.47KB
《面向对象期中作业五子棋程序设计作业》.docx
《《面向对象期中作业五子棋程序设计作业》.docx》由会员分享,可在线阅读,更多相关《《面向对象期中作业五子棋程序设计作业》.docx(24页珍藏版)》请在冰豆网上搜索。
《面向对象期中作业五子棋程序设计作业》
面向对象期中作业
——五子棋程序设计
一、五子棋的由来
五子棋是我国古代的、传统的黑白棋种之一,大约在南北朝时期随围棋一起先后传入朝鲜、日本等地。
五子棋在日本叫“连珠棋”。
通过一系列的规则变化使连珠五子棋这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋。
二、五子棋的棋盘
棋盘正中一点为“天元”。
棋盘两端的横线称端线。
棋盘左右最外边的两条纵线称边线。
从两条端线和两条边线向正中发展而纵横交叉在第四条线形成的四个点称为“星”。
天元和星应在棋盘上用小圆点标出。
以持黑方为准,棋盘上的纵轴线从左到右用英文字母A~O标记。
横行线从远到近用阿拉伯数字1~15标记。
纵横轴上的横纵线交叉点分别用横纵线标记的名称合写成。
三、五子棋规则
1、行棋顺序
黑先、 白后,从天元开始相互顺序落子。
2、判断胜负
最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。
黑棋禁手判负(Lose),白棋无禁手。
黑棋禁手包括“三、三”(DoubleThree)(包括“四、三、三”)、“四、四” (DoubleFour)(包括“四、四、三”)、“长连”(Overline)。
黑棋只能以“四、三”取胜。
如分不出胜负,则定为平局(Draw)。
五连与禁手同时形成,先五为胜。
黑方禁手形成时,白方应立即指出。
若白方未发现或发现后未指明而继续应子,则不能判黑方负。
3、规则的解释
术语介绍:
A、阳线和阴线
1、阳线:
棋盘上可见的横纵直线。
2、阴线:
棋盘上无实线连接的隐形斜线。
B、连:
在棋阳线和阴线的任意一条线上形成的有5个或5个以上的同色棋子不间隔地紧紧相连。
1、五连:
在棋盘上形成的5个同色棋子的"连"。
2、长连:
在棋盘上形成的6个或6个以上同色棋子的"连"。
C、"四"包括"活四"和"冲四"。
1、活四:
在棋盘某一条阳线或阴线上有同色4子不间隔地紧紧相连,且在此4子两端延长线上各有一个无子的交叉点与此4子紧密相连。
2、冲四:
除"活四"外的,再下一着棋便可形成五连,并且存在五连的可能性的局面。
3、白棋再下一着可形成长连的局面也视为"四"。
D、"三"指活三,包括"连三"和"跳三"。
1、连三:
在棋盘某一条阳线或阴线上有同色三子相连,且在此三子两端延长线上有一端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。
2、跳三:
中间仅间隔一个无子交叉点的连三,但两端延长线均至少有一个无子的交叉点与此三子相连。
E、禁手:
对局中禁止使用的着法。
1、黑棋禁手包括"三三"、"四四"和"长连"。
1.1三三:
由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方"活"的局面。
1.2四四:
由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方"四"的局面。
2、白棋无禁手。
F、"四三":
指某一方同时具备两个先手,其中一个是"四",一个是"活三"。
先手:
对方必须应答的着法,其中"冲四"称为绝对先手。
G、三手可交换:
是指黑棋下盘面第3着棋后,白方在应白④之前,如感觉黑方棋形不利于己方,可提出交换,即执白棋一方变为执黑棋一方,而黑方不可以不换。
H、五手两打:
是指黑棋在下盘面上关键的第5手棋时,必须下两步棋,让白棋在这两步棋中任选一步,然后再继续对弈。
一般说来,白棋肯定拿掉对白方不利的一点,而保留对黑方较为不利的那点让黑方行棋。
四、UML图
五、功能介绍
开始:
游戏设置,点击开始或选择新游戏菜单方能开始游戏。
暂停和继续:
是用时间计数器来规定没有棋手有15秒钟的下棋思考时间,期间可以暂停时间和继续时间,15秒倒计时结束,还未下棋系统将其至为自动放弃,系统判定此局为负。
历史记录:
历史纪录中记录了棋手每次下棋,所落子的位置,这样是棋手可查询本盘棋所有落子的位置。
悔棋:
在感觉落子有误时,方可使用悔棋功能,每执行一次,系统将把执行前所下的一步棋,将其清除,使得下棋更人性化。
六、代码及注释
usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
usingSystem.Data;
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.Text;
usingSystem.IO;
usingSystem.Threading;
namespacegame
{
///
///fivechess的摘要说明。
///
publicclassfivechess:
System.Windows.Forms.Form
{
privateSystem.Windows.Forms.MainMenumainMenu1;
privateSystem.Windows.Forms.MenuItemmenuItem1;
privateSystem.Windows.Forms.MenuItemmenuItem5;
privateSystem.Windows.Forms.MenuItemmenuItem6;
privateSystem.ComponentModel.IContainercomponents;
privateSystem.Windows.Forms.ImageListimageList1;
privateconstintNone=-1;//没有棋子
privateconstintWhite=0;//代表白棋
privateconstintBlack=1;//代表黑棋
privateinttimecount=15;
privateint[,]checkerBoard=newint[15,15];//棋盘(用来保存每一个棋子)
privateintnextPlayer;//下一个选手
boolsj=true;
boolstart=false;
privateintPlayer
{
get
{
returnnextPlayer;
}
set
{
nextPlayer=value;
ReDrawNextPlayerMark();
}
}
privateSystem.Windows.Forms.MenuItemmenuItem9;//下一次该黑棋还是白棋下
privateStackHistory;//下棋的历史记录
privateSystem.Windows.Forms.MenuItemmenuItem2;
privateSystem.Windows.Forms.GroupBoxgroupBox2;
privateSystem.Windows.Forms.ListBoxlstHistory;
privateSystem.Windows.Forms.GroupBoxgroupBox1;
privateSystem.Windows.Forms.TextBoxTime;
privateSystem.Windows.Forms.Buttonstop;
privateSystem.Windows.Forms.Buttongoon;
privateSystem.Windows.Forms.Labellb;
privateSystem.Windows.Forms.ButtonstartBT;
privateSystem.Windows.Forms.Timertimer1;
publicfivechess()
{
//
//RequiredforWindowsFormDesignersupport
//
InitializeComponent();
//
//TODO:
AddanyconstructorcodeafterInitializeComponentcall
//
//checkerBoard=newint[15,15];
History=newStack();
Player=White;//默认设置为白棋先下
Reset();
}
///
///清理所有正在使用的资源。
///
protectedoverridevoidDispose(booldisposing)
{
if(disposing)
{
if(components!
=null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#regionWindowsFormDesignergeneratedcode
///
///RequiredmethodforDesignersupport-donotmodify
///thecontentsofthismethodwiththecodeeditor.
///
privatevoidInitializeComponent()
{
ponents=newSystem.ComponentModel.Container();
System.Resources.ResourceManagerresources=newSystem.Resources.ResourceManager(typeof(fivechess));
this.menuItem9=newSystem.Windows.Forms.MenuItem();
this.menuItem5=newSystem.Windows.Forms.MenuItem();
this.menuItem6=newSystem.Windows.Forms.MenuItem();
this.menuItem1=newSystem.Windows.Forms.MenuItem();
this.mainMenu1=newSystem.Windows.Forms.MainMenu();
this.menuItem2=newSystem.Windows.Forms.MenuItem();
this.imageList1=newSystem.Windows.Forms.ImageList(ponents);
this.groupBox2=newSystem.Windows.Forms.GroupBox();
this.lstHistory=newSystem.Windows.Forms.ListBox();
this.groupBox1=newSystem.Windows.Forms.GroupBox();
this.lb=newSystem.Windows.Forms.Label();
this.Time=newSystem.Windows.Forms.TextBox();
this.stop=newSystem.Windows.Forms.Button();
this.goon=newSystem.Windows.Forms.Button();
this.timer1=newSystem.Windows.Forms.Timer(ponents);
this.startBT=newSystem.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="新游戏";
this.menuItem5.Click+=newSystem.EventHandler(this.menuItem5_Click);
//
//menuItem6
//
this.menuItem6.Index=2;
this.menuItem6.Text="退出";
this.menuItem6.Click+=newSystem.EventHandler(this.menuItem6_Click);
//
//menuItem1
//
this.menuItem1.Index=0;
this.menuItem1.MenuItems.AddRange(newSystem.Windows.Forms.MenuItem[]{
this.menuItem5,
this.menuItem9,
this.menuItem6});
this.menuItem1.Text="游戏";
//
//mainMenu1
//
this.mainMenu1.MenuItems.AddRange(newSystem.Windows.Forms.MenuItem[]{
this.menuItem1,
this.menuItem2});
//
//menuItem2
//
this.menuItem2.Index=1;
this.menuItem2.Text="悔棋";
this.menuItem2.Click+=newSystem.EventHandler(this.menuItem2_Click);
//
//imageList1
//
this.imageList1.ColorDepth=System.Windows.Forms.ColorDepth.Depth24Bit;
this.imageList1.ImageSize=newSystem.Drawing.Size(20,20);
this.imageList1.ImageStream=((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor=System.Drawing.Color.Transparent;
//
//groupBox2
//
this.groupBox2.Controls.Add(this.lstHistory);
this.groupBox2.Cursor=System.Windows.Forms.Cursors.Hand;
this.groupBox2.Font=newSystem.Drawing.Font("宋体",10.5F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,((System.Byte)(0)));
this.groupBox2.ImeMode=System.Windows.Forms.ImeMode.Off;
this.groupBox2.Location=newSystem.Drawing.Point(5,116);
this.groupBox2.Name="groupBox2";
this.groupBox2.Size=newSystem.Drawing.Size(212,204);
this.groupBox2.TabIndex=5;
this.groupBox2.TabStop=false;
this.groupBox2.Text="历史记录";
//
//lstHistory
//
this.lstHistory.ItemHeight=14;
this.lstHistory.Location=newSystem.Drawing.Point(12,19);
this.lstHistory.Name="lstHistory";
this.lstHistory.Size=newSystem.Drawing.Size(187,172);
this.lstHistory.TabIndex=0;
//
//groupBox1
//
this.groupBox1.Controls.Add(this.startBT);
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=newSystem.Drawing.Font("宋体",10.5F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,((System.Byte)(0)));
this.groupBox1.ImeMode=System.Windows.Forms.ImeMode.Off;
this.groupBox1.Location=newSystem.Drawing.Point(321,0);
this.groupBox1.Name="groupBox1";
this.groupBox1.Size=newSystem.Drawing.Size(231,338);
this.groupBox1.TabIndex=0;
this.groupBox1.TabStop=false;
//
//lb
//
this.lb.Location=newSystem.Drawing.Point(20,37);
this.lb.Name="lb";
this.lb.Size=newSystem.Drawing.Size(93,18);
this.lb.TabIndex=9;
this.lb.Text="思考倒计时:
";
//
//Time
//
this.Time.Location=newSystem.Drawing.Point(112,32);
this.Time.Name="Time";
this.Time.Size=newSystem.Drawing.Size(76,23);
this.Time.TabIndex=8;
this.Time.Text="";
//
//stop
//
this.stop.Location=newSystem.Drawing.Point(146,70);
this.stop.Name="stop";
this.stop.Size=newSystem.Drawing.Size(48,27);
this.stop.TabIndex=7;
this.stop.Text="暂停";
this.stop.Click+=newSystem.EventHandler(this.stop_Click);
//
//goon
//
this.goon.Location=newSystem.Drawing.Point(87,73);
this.goon.Name="goon";
this.goon.Size=newSystem.Drawing.Size(46,27);
this.goon.TabIndex=6;
this.goon.Text="继续";
this.goon.Click+=newSystem.EventHandler(this.goon_Click);
//
//timer1
//
this.timer1.Interval=1000;
this.timer1.Tick+=newSystem.EventHandler(this.timer1_Tick);
//
//startBT
//
this.startBT.Location=newSystem.Drawing.Po
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象期中作业五子棋程序设计作业 面向 对象 期中 作业 五子棋 程序设计