五子棋網(wǎng)絡(luò)應(yīng)用程序開發(fā) 課程設(shè)計(jì)_第1頁(yè)
五子棋網(wǎng)絡(luò)應(yīng)用程序開發(fā) 課程設(shè)計(jì)_第2頁(yè)
五子棋網(wǎng)絡(luò)應(yīng)用程序開發(fā) 課程設(shè)計(jì)_第3頁(yè)
五子棋網(wǎng)絡(luò)應(yīng)用程序開發(fā) 課程設(shè)計(jì)_第4頁(yè)
五子棋網(wǎng)絡(luò)應(yīng)用程序開發(fā) 課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、網(wǎng)絡(luò)應(yīng)用程序開發(fā)報(bào)告1 概述游戲說(shuō)明五子棋在我國(guó)的歷史可謂是源遠(yuǎn)流長(zhǎng),喜愛(ài)它的玩家也是大有人在,是很多人的娛樂(lè)首選,也是一種競(jìng)技項(xiàng)目。但很多的五子棋軟件一般都是單機(jī)版的,游戲無(wú)法在兩個(gè)玩家之間進(jìn)行?;谏鲜鲈?,五子棋作為一個(gè)古老而又有廣泛群眾基礎(chǔ)的游戲,他的完善性無(wú)疑是家玩家有很大的影響在互聯(lián)網(wǎng)迅速發(fā)展的今天,五子棋的流行已經(jīng)不僅僅只是在現(xiàn)實(shí)生活中的面對(duì)面的娛樂(lè)競(jìng)技,在網(wǎng)上也已經(jīng)是廣大玩家的首選娛樂(lè)游戲。為適應(yīng)當(dāng)今社會(huì)五子棋軟件化的需求,通過(guò)對(duì)一般的五子棋軟件進(jìn)行設(shè)計(jì),通過(guò)本設(shè)計(jì)希望能在五子棋的軟件發(fā)展上起點(diǎn)微不足道的推動(dòng)作用。實(shí)現(xiàn)當(dāng)今社會(huì)五子棋軟件化的需求。軟件設(shè)計(jì)采用visual stu

2、dio2008版作為開發(fā)平臺(tái),運(yùn)用軟件工程的分析和編寫方法,收集主要相關(guān)文獻(xiàn)資料,對(duì)系統(tǒng)作詳細(xì)的分析和設(shè)計(jì),實(shí)現(xiàn)五子棋的基本功能需求,達(dá)到一般五子棋的游戲功能和規(guī)則設(shè)置。在設(shè)計(jì)上,主要解決的問(wèn)題有五子棋的各個(gè)方向判斷勝負(fù)算法的分析,以及五子棋中“聊天,重新開始”等基本功能的實(shí)現(xiàn)。需求分析一款游戲項(xiàng)目的確立是建立在各種各樣的需求上面的,這種需求往往來(lái)自于玩家的實(shí)際需求或者是出于公司自身發(fā)展和實(shí)力的情況,其中玩家的實(shí)際需求也就是說(shuō)市場(chǎng)需求最為重要.面對(duì)游戲擁有不同知識(shí)和理解層面的玩家,項(xiàng)目的負(fù)責(zé)人(或者游戲制作人)對(duì)玩家需求的理解程度,在很大程度上決定了此類游戲開發(fā)項(xiàng)目的成敗.因此如何更好地的了解

3、,分析,明確玩家需求,并且能夠準(zhǔn)確,清晰以文檔的形式表達(dá)給參與項(xiàng)目開發(fā)的每個(gè)成員,保證開發(fā)過(guò)程按照滿足玩家需求為目的正確項(xiàng)目開發(fā)方向進(jìn)行,是每游戲開發(fā)項(xiàng)目管理者需要面對(duì)的問(wèn)題.而作為五子棋的設(shè)計(jì)需要考慮到的最基本的需求莫過(guò)于人機(jī)對(duì)戰(zhàn)與人人對(duì)戰(zhàn)功能的實(shí)現(xiàn),當(dāng)然還有下棋過(guò)程中的下棋悔棋功能以及判斷游戲的勝負(fù)等方面的要求。當(dāng)然最好是要考慮到界面的友好性,作為一個(gè)娛樂(lè)軟件,還應(yīng)該考慮到玩家在游戲時(shí)的舒適2 實(shí)現(xiàn)2.1 設(shè)計(jì)思路2.2 具體實(shí)現(xiàn)2.2.1 界面設(shè)計(jì)界面主要分四大部分:棋盤、ip地址、棋子選擇和聊天窗口,程序運(yùn)行開始,先要輸入要連接的主機(jī)ip地址,然后選定棋子顏色,就可以下棋了。輸入文本的

4、控件我選擇了comboBox空間,在其下拉表中預(yù)先輸入一些常用的語(yǔ)句,如:你好,嗨等,這樣方便聊天。聊天記錄窗口我用了listBox,當(dāng)聊天內(nèi)容比較多時(shí),會(huì)自動(dòng)添加滾動(dòng)條,便于用戶閱讀聊天信息2.2.2按鈕功能實(shí)現(xiàn)(1)重新開始按鈕public void Restart() radBlack.Enabled = true; radWhite.Enabled = true; for(int i=0;i<Level;i+) for (int j = 0; j < Level; j+) pici, j.Image = Image.FromFile("Board.jpg"

5、;); flagi, j = false; doubleFlagi, j = false; this.AllowClick = true; private void button2_Click(object sender, EventArgs e) this.Restart(); (2)發(fā)送按鈕private void btnSend_Click(object sender, EventArgs e) String ForeStr = "rn" + txtSelfIP + "【" + DateTime.Now.ToShortDateString() +

6、" " + DateTime.Now.ToShortTimeString() + "】:rn" this.Sender.send(txtIP.Text.Trim(),txtSend.Text.Trim(), 12001); txtShow.Text += ForeStr; int BeforeIndex = txtShow.Text.Length; txtShow.Text += txtSend.Text; txtShow.Select(BeforeIndex, txtShow.Text.Length); txtShow.SelectionBackCol

7、or = Color.White; txtShow.SelectionColor = SelfFontColor; /滾動(dòng) txtShow.Select(txtShow.Text.Length, 0); txtShow.ScrollToCaret(); txtSend.Text = "" 2.2.3棋子位置判斷獲得所下的棋子位置的下標(biāo):RowIndex = (p.Location.Y - 30) / (p.Height);ColIndex = (p.Location.X - 30) / (p.Width);判斷是否有棋子添加到棋盤上,是通過(guò)Button1是否產(chǎn)生單擊事件來(lái)判

8、定的,在Button按鈕單擊事件中,編入了輸贏的判斷代碼,結(jié)果用messagebox的形式顯示出來(lái),還有一些對(duì)不合規(guī)則下棋方法的判斷及給出相應(yīng)的提示private void button1_Click(object sender, EventArgs e) if (this.AllowClick) this.radBlack.Enabled = false; this.radWhite.Enabled = false; PictureBox p = (PictureBox)sender; p.Image = Image.FromFile(PictureFileName); /獲得所下的棋子位置

9、的下標(biāo) RowIndex = (p.Location.Y - 30) / (p.Height); ColIndex = (p.Location.X - 30) / (p.Width); String Message;Message = "Pos" + Splitor + RowIndex.ToString() + Splitor + ColIndex.ToString(); /發(fā)送的信息字符串FlagRowIndex, ColIndex = true; /記錄if (this.Judge1() | this.Judge2() | this.Judge3() | this.J

10、udge4()Message += Splitor + this.WinStr; try int Port = Convert.ToInt32(txtPort.Text.Trim(); if (doubleFlagRowIndex, ColIndex) picRowIndex, ColIndex.Image = Image.FromFile(OtherPictureFileName); MessageBox.Show("不能在有棋子的地方下棋", "消息"); AllowClick = true; else Sender.send(txtIP.Text.

11、Trim(), Message, Port); Sender.send(txtIP.Text.Trim(), Message, Port); Sender.send(txtIP.Text.Trim(), Message, Port); Sender.send(txtIP.Text.Trim(), Message, Port); Sender.send(txtIP.Text.Trim(), Message, Port); AllowClick =false; catch (Exception ex) MessageBox.Show(ex.Message, "錯(cuò)誤!"); th

12、is.Restart(); doubleFlagRowIndex, ColIndex = true; /雙方記錄 if (this.Judge1() | this.Judge2() | this.Judge3() | this.Judge4() this.WinCount += 1;MessageBox.Show("勝利!勝負(fù)情況: 勝"+ WinCount.ToString()+"負(fù)"+ LoseCount.ToString(), "對(duì)戰(zhàn)結(jié)束");this.Restart(); else MessageBox.Show("

13、不能搶下棋子"); public Form1() InitializeComponent(); for (int i = 0; i < Level; i+) for (int j = 0; j < Level; j+) pici, j = new PictureBox(); pici, j.Click += new EventHandler(this.button1_Click); public void StartListen() while (true) int Port = Convert.ToInt32(txtPort.Text.Trim(); udpclient

14、 = new UdpClient(Port); IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Any, Port);try byte bytes = udpclient.Receive(ref ipendpoint); String StrReceive = ""StrReceive = Encoding.GetEncoding("gb2312").GetString(bytes, 0, bytes.Length); String parts = StrReceive.Split(Splitor); i

15、f (parts0.Equals("Pos") ReceivedRow = Convert.ToInt32(parts1); ReceivedCol = Convert.ToInt32(parts2); picReceivedRow, ReceivedCol.Invoke(new MyDelegate(this.InvokeFun); doubleFlagReceivedRow, ReceivedCol = true;try if (partsparts.Length - 1.Equals(this.WinStr) MessageBox.Show("對(duì)方勝利!勝負(fù)

16、情況: 勝" + WinCount.ToString() + " 負(fù)" + LoseCount.ToString(), "對(duì)戰(zhàn)結(jié)束"); this.LoseCount += 1; this.Restart(); catch (Exception) this.AllowClick = true; StrReceive = "" catch (Exception ex) String s = ex.Message; break; finally udpclient.Close(); /關(guān)閉UDPClient 2.2.4變量聲明#

17、region 變量聲明 Send Sender = new Send(); UdpClient udpclient, udpclient2; int Level = 30; String PictureFileName = "Black.jpg" String OtherPictureFileName = "White.jpg" public PictureBox, pic=new PictureBox30,30 ; public bool, flag=new bool30,30; public bool, doubleFlag = new bool30

18、, 30; public const char Splitor='Q' /只需要判斷自己是否勝利即可,將勝利的消息發(fā)出 /被點(diǎn)擊的元素的下標(biāo): int RowIndex, ColIndex; int ReceivedRow, ReceivedCol; Thread mythread,ChatThread; delegate void MyDelegate(); delegate void ChatDelegate(); String WinStr = "Finish" String ChatMessage = "" bool AllowC

19、lick = true; /防止搶下棋子 int WinCount = 0; int LoseCount = 0;Color SelfFontColor=Color.Blue, OtherFontColor=Color.Red; /聊天字體顏色處理 #endregion2.2.5 棋盤設(shè)計(jì)棋盤式有一個(gè)一個(gè)的picturebox,拼接而成的,每個(gè)picturebox,加載image組成棋盤方格,選用picturebox便于記錄棋子的位置,可以減少許多不必要的麻煩,具體代碼:for (int i = 0; i < Level; i+) y = i * 20; for (int j = 0;

20、j < Level; j+) x = j * 20; pici, j.SetBounds(x+30,y+30,20,20); flagi, j = false; /記錄變量 pici, j.Image = Image.FromFile("Board0.jpg"); this.Controls.Add(pici, j); 2.2.6 、四個(gè)判斷勝利與否的函數(shù)編寫了四個(gè)函數(shù),分別從橫向、縱向、上三角(2種)、下三角(2種)的角度來(lái)判斷棋子的個(gè)數(shù),若滿足5子連線,則返回勝利標(biāo)志 public bool Judge1() /橫向判斷 int count = 0; for (i

21、nt i = 0; i < Level; i+) for (int j = 0; j < Level; j+) if (flagi, j) count+; if (count >= 5) return true; else if(!flagi,j) count = 0; count = 0; return false; public bool Judge2() /縱向判斷 int count = 0; for (int i = 0; i < Level; i+) for (int j = 0; j < Level; j+) if (flagj, i) count+

22、; if (count >= 5) return true; else count = 0; count = 0; return false; public bool Judge3() /左上右下 int count = 0; /上三角 int j; for (int h = 0; h < Level - 3; h+) j=h; for(int i=0;i<Level&&j<Level;j+,i+) if (flagi,j) count+; if (count >= 5) return true; else count = 0; count = 0

23、; /下三角 for (int row = 1; row < Level - 3; row+) j = row; for (int col = 0; col < Level && j < Level; j+, col+) if (flagj, col) count+; if (count >= 5) return true; else count = 0; count = 0; return false; public bool Judge4() /左下右上 int count = 0; int h; /上下三角 for(int c=0;c<Lev

24、el-3;c+) for (int j = Level-1; j >=0; j-) h = j; for (int i = c; i < Level && h >=0; i+) if (flagi,h) count+; if (count >= 5) return true; else count = 0; h-; count = 0; return false; 2.27、聊天監(jiān)聽(tīng)public void ListenChat() while (true) try int Port = 12001; udpclient2 = new UdpClient(Port); IPEndPoint ipendpoint2 = new IPEndPoint(IPAddress.Any, P

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論