摘 要:文章是應用C#語言來完成網(wǎng)絡五子棋的設計實現(xiàn),其中完成了網(wǎng)絡五子棋的界面設計、網(wǎng)絡通信類的設計實現(xiàn),以及游戲勝負的設計實現(xiàn)等主要功能模塊。
關鍵詞:C#;網(wǎng)絡;五子棋
五子棋起源于中國古代的黑白棋種之一,經(jīng)過多年的一系列變化,使得這一簡單游戲變得復雜化、規(guī)范化,最終成為今天的職業(yè)連珠五子棋,同時也是一項國際比賽項目。五子棋不僅能增強思維能力,提高智力,并且富有哲理,有助于修身養(yǎng)性;既具有簡單易學的特性,又有深奧的技巧和高水平的國際比賽。而隨著網(wǎng)絡的普及,網(wǎng)絡游戲迅猛發(fā)展,一些小型的網(wǎng)絡游戲受到用戶的熱衷,如五子棋、圍棋、象棋等。文章主要應用C#語言完成網(wǎng)絡五子棋游戲的設計實現(xiàn)。
1 網(wǎng)絡五子棋游戲的功能需求
網(wǎng)絡五子棋游戲需要具備如下基本功能:
1.1 該游戲能夠在局域網(wǎng)上運行,游戲雙方具有相同的界面。
1.2 “選擇白棋”或“選擇黑棋”,然后查找局域網(wǎng)中的在線玩家進行連接。
1.3 黑棋先行,黑白棋子交替進行,任何一方不可以連下兩步棋。
1.4 程序能夠判斷哪方獲勝,一旦某方獲勝,程序結束,開始下一局。
2 界面設計
五子棋游戲規(guī)定,任何一方棋子落下后是不需要再動的,所以棋盤可以采取一張棋盤圖片,其中方格的大小為20*20像素,黑子和白子也分別使用20*20的圖片。在程序中應用ImageList控件的Draw方法來實現(xiàn)對黑子和白子的管理,即在指定位置顯示指定的圖像。該方法在本程序中的使用格式如下:
public void Draw(Graphics g, int x, int y, int width,int height, int index) { }
3 監(jiān)聽類和發(fā)送類設計
監(jiān)聽類主要監(jiān)聽對方發(fā)過來的消息,然后交給信息處理方法DoInformation,該方法會根據(jù)不同的消息內(nèi)容作出相應處理。發(fā)送類主要完成數(shù)據(jù)發(fā)送,如客戶IP信息,連接信息,下棋信息,退出信息等信息的發(fā)送。其中監(jiān)聽類的主要功能代碼如下:
private void Listener() //監(jiān)聽方法
{ try { tcpLisn=new TcpListener(5858); tcpLisn.Start();
while(listenerRun)
{ Socket sk=tcpLisn.AcceptSocket(); tring remote=sk.RemoteEndPoint.ToString();
Byte[] stream=new Byte[80]; int i=sk.Receive(stream);
string msg=System.Text.Encoding.UTF8.GetString(stream);
AddChessEventArgs arg=new AddChessEventArgs();
arg.site=msg; OnAddChess(this,arg) }......
發(fā)送類的主要功能代碼如下:
public void Send(string stream) { try { TcpClient tcpclt = new TcpClient(obj,5858);
NetworkStream netStream = tcpclt.GetStream();
StreamWriter streamwrite = new StreamWriter(netStream);
streamwrite.Write(stream); streamwrite.Flush();
streamwrite.Close(); tcpclt.Close(); }......
4 消息出來方法設計
設計一個信息處理方法DoInformation,用來處理Listener對象收到對方發(fā)送過來的消息,該方法會根據(jù)字符串中包含的CONN(連接)、SITE(對方下棋)或QUIT(對方退出),來進行相應不同的處理。主要功能代碼如下所示:
public void InformationDo(object sender, AddChessEventArgs e)
{ ...... switch (sp)
{ case \"SITE\": x = Convert.ToInt32(sp[1]) / 100;
y = Convert.ToInt32(sp[1]) % 100; Point p = new Point(x,y);
if (Convert.ToInt32(sp[2]) == 0)
{ str = \"white\"; type = WHITE; rdoWhite.Enabled = 1; }
else { str = \"black\"; type = BLACK; rdoBlack.Enabled = 1;}
AddChess(p,type); DrawNextPlayerMark(); ......
5 游戲的勝負設計實現(xiàn)
根據(jù)五子棋的游戲規(guī)則,5個同色棋子先連成一條線的一方獲勝,其中連線方式有四種:橫、豎、左對角線、右對角線。所以在程序設計時,需要以剛下的棋子為中心,分別檢查其所在行、列、左對角線、右對角線四個方向有沒有連成5個同色的棋子。
nt x, y,n, LastPlayer=(nextPlayer==WHITE)?BLACK:WHITE;
n=1; //查看該行有沒有5個同色棋子 y = LastPoint.Y;
for (x = LastPoint.X - 1; x >= 0; x--)
{ if (GameBoard[y, x] == LastPlayer) n++; else break; }
for (x = LastPoint.X + 1; x < 15; x++)
{ if (GameBoard[y, x] == LastPlayer) n++; else break; }
if (n >= 5) { WhoWin(LastPlayer); return; }
6 結束語
網(wǎng)絡五子棋游戲是被廣大用戶熟識的益智小游戲,文章主要應用C#語言來實現(xiàn)了該游戲的界面設計、網(wǎng)絡通信等主要功能框架。
參考文獻
[1]呂尚榕,基于flash的五子棋軟件的設計與實現(xiàn)[D].復旦大學, 2012.
[2]陳青華.C#網(wǎng)絡開發(fā)項目教程[M].電子工業(yè)出版社,2012.