本科毕业设计网络五子棋Word格式.docx
《本科毕业设计网络五子棋Word格式.docx》由会员分享,可在线阅读,更多相关《本科毕业设计网络五子棋Word格式.docx(36页珍藏版)》请在冰豆网上搜索。
一类是网络五子棋游戏软件,另一类是单机版五子棋游戏软件。
为了满足五子棋玩家人群的需求,作者设计了这款电脑版的五子棋游戏软件,可以供人们闲暇时间随时随地地进行娱乐提高自己的五子棋水平,实用性强。
1.3需求分析
多五子棋主要功能如下:
(1)选择不同模式的游戏
本游戏提供单机模式和网络模式。
(2)单机模式下的人机对战
人与电脑玩。
(3)单机模式下的双人对战
人与人之间使用同一台电脑下棋。
(4)网络对战
可以联机对战且可以聊天。
(5)声音设置
自己播放背景音乐
1.4可行性分析
1.4.1技术可行性
为实现本软件的程序设计,开发该软件采用MicrosoftWindowsXP作为操作平台实现与软件用户的交互工作,同时使用主流的C#面向对象的编程语言和MicrosoftVisualStudio2005开发工具开发该软件,在技术上是可行的。
1.4.2操作可行性
现今社会,电脑的普及应用已为广大用户所接受,而C#是面向对象的主流编程语言,MicrosoftVisualStudio2005开发环境,是目前最流行的Windows平台应用程序开发环境,而且开发的系统界面简单易操作,初学者几乎不用经过培训就能操作,因此该系统是具有操作可行性。
2.总体设计
2.1系统的总体功能模块
本设计由单机模式、网络模式两大功能模块构成:
(1)单机模块
在同一台电脑上玩五子棋
(2)网络模块
不在同一台电脑上进行对弈。
五子棋游戏
图2-1系统的总体功能图
2.2系统调用图
图2-2系统调用图
3.具体系统实现功能介绍
图3系统实现功能图
3.1人机对战模块
图3-1人机对战运行时的图
人机对战主要代码如下:
privatevoidForm1_MouseDown(objectsender,System.Windows.Forms.MouseEventArgse)//实现鼠标操作的函数
{
//游戏运行核心,分别完成人机对战
//完成下棋点的确定,界面信息的更新,发送网络对战信息
if((!
win0)&
&
(!
win1)&
nowin))
//当未有一方取胜时
if(!
over)
//尚未结束
wplayers)
//不是网络对战状态
if(player1)
//该白棋走
if(x<
600&
y<
600)
//取下棋点
m=(int)Math.Floor((double)x/40);
n=(int)Math.Floor((double)y/40);
if(shifouxiazi[m,n]==2)
{
this.textBox1.Text=textBox1.Text+"
白棋:
"
+"
X"
+m+"
Y"
+n+"
\t"
;
if(label12.Text=="
白棋"
)
huihe++;
label9.Text="
+huihe;
}
else
待定"
label12.Text="
//回合数调整,先手显示
shifouxiazi[m,n]=0;
//表示该位已存白子
player1sum++;
//白子总数加1
if(((player2sum==112)&
(player1sum==113))||((player2sum==113)&
(player1sum==112)))
//如果出现平局
nowin=true;
over=true;
for(i=0;
i<
572;
i++)
//对每种获胜情况的ifwin[0,i]进行计算,可能满足的情况ifwin[0,i]++
//不能满足的情况ifwin[0,i]置7(表无效)
if(tableplayer1[m,n,i]&
ifwin[0,i]!
=7)
ifwin[0,i]++;
if(tableplayer2[m,n,i])
tableplayer2[m,n,i]=false;
ifwin[1,i]=7;
player1=false;
player2=true;
//交换下棋方
3.2双人对战模块
图3-2双人对战运行时图
单机模式中双人对战模块,两个玩家同时用同一部电脑和鼠标对弈,代码如下:
if(nplayers)
//双人对战模式下
if(player2)
//黑棋走
黑棋:
//加入历史记录
黑棋"
shifouxiazi[m,n]=1;
//表示该位已存黑子
player2sum++;
//黑子总数加1
if(tableplayer2[m,n,i]&
ifwin[1,i]!
ifwin[1,i]++;
if(tableplayer1[m,n,i])
tableplayer1[m,n,i]=false;
ifwin[0,i]=7;
player1=true;
player2=false;
//交换下棋权利
3.3Playingtable模块
图3-3Playingtable运行时图
Playingtable模块属于网络对战模式,显示用户进入房间后看到的界面,并根据收发的信息作对应处理还有聊天的功能,代码如下:
//设置Label控件的文本信息
///<
/summary>
privatevoidSetLabel(Labellabel,stringstr)
if(label.InvokeRequired==true)
this.Invoke(labelDelegate,label,str);
label.Text=str;
summary>
///设置应该谁落子的提示信息
publicvoidSetLabelGo(stringstr,intdownIndex)
SetLabel(labelGo,str);
this.downIndex=downIndex;
///设置开始游戏标志
publicvoidStart(boolisStart)
isPlaying=isStart;
publicvoidAskTie(stringstr)
if(str!
=side.ToString())
stringreply="
False"
stringsideString=str=="
0"
?
"
黑方"
:
白方"
if(MessageBox.Show(sideString+"
请求和棋,同意吗?
"
MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
reply="
True"
SendToServer(string.Format("
Reply,{0},{1},{2}"
tableIndex,side,reply));
publicvoidReplyTie(stringaskSide,stringstr)
if(str=="
Restart("
);
if(askSide!
stringsideString=askSide=="
MessageBox.Show(sideString+"
不同意和棋!
privatevoidSetButton(Buttonbutton,boolflag)
if(button.InvokeRequired==true)
this.Invoke(buttonDelegate,button,flag);
button.Enabled=flag;
if(flag==true)
button.ForeColor=Color.Black;
publicvoidSetPictureBoxImage(PictureBoxpictureBox,Imageimage)
if(pictureBox.InvokeRequired==true)
this.Invoke(setPictureBoxDelegate,pictureBox,image);
pictureBox.Image=image;
///向棋盘上放置棋子
publicvoidSetChess(inti,intj,intChessColor)
//--------此句仅用于观察接收的信息,需要观察时可以去掉注释-------------//
AddToRichTextBox(string.Format("
{0}:
{1},{2}"
ChessColor,j,i));
//---------------------------------------------------------------------//
grid[i,j]=ChessColor;
pictureBoxBoard.Invalidate();
publicvoidRestart(stringstr)
="
MessageBox.Show(str,"
MessageBoxButtons.OK,MessageBoxIcon.Warning);
ResetGrid();
if(side!
=2)
SetButton(buttonStart,true);
privatevoidResetGrid()
for(inti=0;
=grid.GetUpperBound(0);
for(intj=0;
j<
=grid.GetUpperBound
(1);
j++)
grid[i,j]=ChessColor.None;
///初始化棋盘上各棋子的位置
paramname="
str"
>
以/分开的棋子位置字符串<
/param>
publicvoidInitializeGrid(stringstr)
string[]splitString=str.Split('
/'
intk=0;
grid[i,j]=int.Parse(splitString[k]);
k++;
///Paint事件
privatevoidpictureBoxBoard_Paint(objectsender,PaintEventArgse)
Graphicsg=e.Graphics;
if(grid[i,j]!
=ChessColor.None)
if(grid[i,j]==ChessColor.Black)
g.DrawImage(blackBitmap,(i+1)*20,(j+1)*20);
g.DrawImage(whiteBitmap,(i+1)*20,(j+1)*20);
///单击发送按钮触发的事件
privatevoidbuttonSend_Click(objectsender,EventArgse)
//字符串格式:
Talk,桌号,对话内容
Talk,{0},{1}"
tableIndex,textBox1.Text));
textBox1.Clear();
///对话内容改变时触发的事件
privatevoidtextBox1_KeyPress(objectsender,KeyPressEventArgse)
if(e.KeyChar==(char)Keys.Enter)
///单击开始按钮触发的事件
privatevoidbuttonStart_Click(objectsender,EventArgse)
Start,{0},{1}"
tableIndex,side));
buttonStart.ForeColor=SystemColors.GrayText;
buttonStart.Enabled=false;
///单击求和按钮触发的事件
privatevoidbuttonAskTie_Click(objectsender,EventArgse)
AskTie,{0},{1}"
///在棋盘上按下鼠标左键时触发的事件
privatevoidpictureBoxBoard_MouseDown(objectsender,MouseEventArgse)
if(isPlaying==true)
intx=e.X/20-1;
inty=e.Y/20-1;
(x<
0||x>
14||y<
0||y>
14))
if(grid[x,y]==ChessColor.None&
downIndex==side)
//发送格式:
UnsetDot,桌号,座位号,行,列,颜色
SendToServer(string.Format(
SetChess,{0},{1},{2},{3},{4}"
tableIndex,side,x,y,side));
if(radioButtonSound.Checked==true)
chessSound.Play();
///设置用户进入房间看到的信息
userTypeString"
用户类型(黑方,白方,旁观)<
names"
昵称(格式:
黑方名/白方名/旁观名)<
publicvoidS