




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年衛(wèi)生保健考試試題及答案
- 2025年小學(xué)眼睛測(cè)試題及答案
- 2025年戰(zhàn)爭(zhēng)主題考試題及答案
- 2025年泰安市一模試題及答案
- 2025年奧拉星考試題及答案
- 2025年高二會(huì)考生物試題及答案
- 機(jī)電設(shè)備故障診斷與維修 第3版 課件 第2章 機(jī)械設(shè)備狀態(tài)監(jiān)測(cè)與故障診斷技術(shù)
- 2025年廚房管理考核試題及答案
- 2025年監(jiān)察局考試試題及答案
- 2025年師生路人測(cè)試題及答案
- 房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)(2024版)危險(xiǎn)性較大的分部分項(xiàng)工程專項(xiàng)施工方案嚴(yán)重缺陷清單(試行)解讀
- 2025年包頭輕工職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)新版
- 2025年懷化師范高等??茖W(xué)校單招職業(yè)技能測(cè)試題庫(kù)帶答案
- 2025年湖北幼兒師范高等??茖W(xué)校單招職業(yè)技能測(cè)試題庫(kù)含答案
- DeepSeek-V3技術(shù)報(bào)告(中文版)
- 政治-貴州省貴陽(yáng)市2025年高三年級(jí)適應(yīng)性考試(一)(貴陽(yáng)一模)試題和答案
- 公司副總經(jīng)理英文簡(jiǎn)歷
- 2025浙江杭州地鐵運(yùn)營(yíng)分公司校園招聘665人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 第一篇 專題一 第2講 牛頓運(yùn)動(dòng)定律與直線運(yùn)動(dòng)
- 規(guī)劃高中生涯模板
- 中國(guó)卒中學(xué)會(huì)急性缺血性卒中再灌注治療指南 (2024)解讀-指南解讀系列
評(píng)論
0/150
提交評(píng)論