版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計說明書</b></p><p> 2010-2011學年第 一 學期</p><p><b> 目 錄</b></p><p> 1.課程設計內(nèi)容4</p><p> 2.課程設計目的4</p><p><b&
2、gt; 3.背景知識4</b></p><p> 4.工具/準備工作5</p><p> 5.設計步驟與方法5</p><p> 5.1.服務器端編程5</p><p> 5.1.1.服務器具體實現(xiàn)步驟如下:5</p><p> 5.1.1.1.玩家信息6</p&g
3、t;<p> 5.1.1.2.游戲桌位信息6</p><p> 5.1.1.3.公用的方法7</p><p> 5.1.1.4.玩家房間狀態(tài)信息8</p><p> 5.1.1.5.登錄窗體事件9</p><p> 5.1.1.6.五子棋主要代碼15</p><p> 5.
4、2.客戶端編程21</p><p> 5.2.1.客戶端具體實現(xiàn)步驟如下:21</p><p> 5.2.1.1.游戲室21</p><p> 5.2.1.2.游戲界面及窗體事件34</p><p> 6.設計結果及分析44</p><p> 7.設計結論45</p>&
5、lt;p> 8.問題及心得體會45</p><p> 9.對本設計過程及方法、手段的改進建議45</p><p> 10.參考文獻45</p><p> 11.課程設計評價(教師)45</p><p><b> 網(wǎng)絡五子棋</b></p><p><b>
6、 課程設計內(nèi)容</b></p><p> 五子棋游戲以其優(yōu)秀的傳統(tǒng)知識跟智慧深受廣大玩家的喜愛,編制五子棋程序因其規(guī)則簡單而大受編程者的歡迎,然而它卻要求程序員對五子棋規(guī)則有相當深入的了解。網(wǎng)絡五子棋的主要內(nèi)容是:根據(jù)五子棋的基本規(guī)則,要讓對方客戶端知道該在哪一點下子,就要根據(jù)盤面的形勢,并把棋盤棋子的重新繪制,也就是更新該點的位置,然后再通過監(jiān)聽網(wǎng)絡傳遞的消息,直到新的位置放在棋盤的什么位置上,
7、在進行修改,并通過計算,判定游戲的獲勝方和游戲的結束與否.,因此玩家就能反復的通過網(wǎng)絡進行聯(lián)機游戲。</p><p><b> 課程設計目的</b></p><p> 為了更深入地理解TCP協(xié)議的具體應用編程技巧,本設計使用功能強大的VS2008開發(fā)工具和C#開發(fā)語言,開發(fā)出一個擁有自己特色的五子棋程序,其中VS2008是一個能開放代碼的開發(fā)工具,基本C#的擴展平
8、臺。就該五子棋程序來講,它只是一個框架和一組服務,用于通過插件,組件,控件構建開發(fā)環(huán)境。</p><p> 對于游戲,要求能夠達到以下功能:</p><p> (1).服務器可以同時服務多桌,每桌允許兩個玩家通過internet對弈。</p><p> (2)允許玩家自由選擇坐在哪里一桌的哪一方。如果兩個玩家坐在同一桌,雙方老師應能看到對方的狀態(tài)。兩個玩家均單
9、擊開始按鈕后,游戲才開始。</p><p> (3)游戲開始后,由黑色棋子的玩家先下棋。</p><p> (4)每當玩家走完一步棋子后,都檢測相當顏色的棋子是否已經(jīng)相鄰的出現(xiàn)達到五個,即游戲結束。</p><p> (5)同一桌的玩家可以聊天。</p><p><b> 背景知識</b></p>
10、<p> 同步工作方式,利用TCP編寫程序執(zhí)行到發(fā)送,接收或監(jiān)聽語句時,在未完成工作前是不會往下執(zhí)行,即處于阻塞狀態(tài),這樣的TCP協(xié)議有利于編寫五子棋這樣的回合制游戲。采用Socket類編程,運用了系統(tǒng)提供相應的方法。邏輯關系上,都會涉及服務器,客戶端這兩個概念。</p><p><b> 工具/準備工作</b></p><p> 資源方法有棋盤,黑白
11、棋子,還有游戲室的位置頭像如下圖:</p><p><b> 設計步驟與方法</b></p><p><b> 服務器端編程</b></p><p> 服務器啟動后,需要創(chuàng)建一個線程專門用于監(jiān)聽玩家連接請求。在監(jiān)聽線程中,服務器一旦接受一個連接,就創(chuàng)建一個線程與該玩家對應的線程,用于接收該玩家發(fā)送的信息,并根據(jù)玩家發(fā)
12、送的信息來提供相應的服務。有多少個玩家就得創(chuàng)建多少個對應的線程。直到玩家退出游戲室,其對應的線程才終止。</p><p> 服務器必須限制進入游戲室的玩家數(shù)量,具體多少,可以由服務器的啟動來設置。</p><p> 服務器具體實現(xiàn)步驟如下:</p><p> 創(chuàng)建一個命名為GameServer的Windows應用程序,將Form1.cs改名為FormServe
13、r.cs,界面設計如下:</p><p><b> 玩家信息</b></p><p> 在資源管理器中,添加User.cs,用于保存與該玩家的通信所需要的信息。代碼如下:</p><p> class User</p><p><b> {</b></p><p>
14、 public readonly TcpClient client;</p><p> public readonly StreamReader sr;</p><p> public readonly StreamWriter sw;</p><p> public string userName;</p><p> public
15、User(TcpClient client)</p><p><b> {</b></p><p> this.client = client;</p><p> this.userName = "";</p><p> NetworkStream netStream = client.Get
16、Stream();</p><p> sr = new StreamReader(netStream, System.Text.Encoding.Default);</p><p> sw = new StreamWriter(netStream, System.Text.Encoding.Default);</p><p><b> }</b
17、></p><p><b> 游戲桌位信息</b></p><p> 在資源管理器中,添加Player.cs,用于保存已經(jīng)坐到游戲桌位上玩家的情況。代碼如下:</p><p> class Player</p><p><b> {</b></p><p>
18、private User user;</p><p> public User GameUser</p><p><b> {</b></p><p><b> get</b></p><p> {return user; }</p><p><b> s
19、et</b></p><p> {user = value; }</p><p><b> }</b></p><p> public bool Start</p><p> {get{return start; }</p><p> set{start = value; }
20、</p><p><b> }</b></p><p> public Player()</p><p><b> {</b></p><p> start = false;</p><p> user = null;</p><p><
21、;b> }</b></p><p><b> }</b></p><p><b> 公用的方法</b></p><p> 在資源管理器中添加類文件Service.cs,用于提供公用的方法。代碼如下:</p><p> class Service</p>&l
22、t;p><b> {</b></p><p> private ListBox listbox;</p><p> private delegate void AddListBoxItemCallback(string str);</p><p> private AddListBoxItemCallback addListBox
23、ItemCallback;</p><p> public Service(ListBox listbox)</p><p><b> {</b></p><p> this.listbox = listbox;</p><p> addListBoxItemCallback = new AddListBoxIt
24、emCallback(AddListBoxItem);</p><p><b> }</b></p><p> public void AddListBoxItem(string str)</p><p><b> {</b></p><p> if (listbox.InvokeRequi
25、red == true)</p><p><b> {</b></p><p> listbox.Invoke(addListBoxItemCallback, str);</p><p><b> }</b></p><p><b> else</b></p>
26、;<p><b> {</b></p><p> if (listbox.IsDisposed == false)</p><p><b> {</b></p><p> listbox.Items.Add(str);</p><p> listbox.SelectedInd
27、ex = listbox.Items.Count - 1;</p><p> listbox.ClearSelected();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><
28、;p><b> 玩家房間狀態(tài)信息</b></p><p> 在資源管理器中添加一個類文件GameRoom.cs,用來保存玩家游戲的順序分配及判定輸贏。代碼如下:</p><p> class GameRoom</p><p><b> {</b></p><p> private G
29、obangBoard gameBoard = new GobangBoard();</p><p> public GobangBoard GameBoard</p><p><b> {</b></p><p><b> get</b></p><p><b> {</b&
30、gt;</p><p> return gameBoard;</p><p><b> }</b></p><p><b> }</b></p><p> /// <summary></p><p> /// 向listbox中添加顯示信息以及向客戶發(fā)送
31、信息</p><p> /// </summary></p><p> private ListBox listbox;</p><p> private Service service;</p><p><b> //構造函數(shù)</b></p><p> public Gam
32、eRoom(ListBox listbox)</p><p><b> {</b></p><p> this.listbox = listbox;</p><p> gamePlayer[0] = new Player();</p><p> gamePlayer[1] = new Player();</
33、p><p> service = new Service(listbox);</p><p> //將棋盤上的棋子全部清除</p><p> gameBoard.InitializeBoard();</p><p><b> }</b></p><p> public void SetChe
34、ss(int i, int j, int chessColor)</p><p><b> {</b></p><p> //發(fā)送格式:SetChess,行,列,顏色</p><p> gameBoard.Grid[i, j] = chessColor;</p><p> gameBoard.NextIndex
35、= gameBoard.NextIndex == 0 ? 1 : 0;</p><p> service.SendToRoom(this, string.Format("SetChess,{0},{1},{2}", i, j, chessColor));</p><p> if (gameBoard.IsWin(i, j))</p><p>
36、<b> {</b></p><p> ShowWin(chessColor);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p>
37、service.SendToRoom(this, "NextChess," + gameBoard.NextIndex);</p><p><b> }</b></p><p><b> }</b></p><p> private void ShowWin(int chessColor)<
38、/p><p><b> {</b></p><p> gamePlayer[0].Start = false;</p><p> gamePlayer[1].Start = false;</p><p> gameBoard.InitializeBoard();</p><p> //發(fā)送格
39、式:Win,勝方棋子顏色</p><p> service.SendToRoom(this, string.Format("Win,{0}", chessColor));</p><p><b> }</b></p><p><b> }</b></p><p><b
40、> 登錄窗體事件</b></p><p> 在FormServer的代碼編輯下,添加對應的控件代碼,源程序如下:</p><p> public partial class FormServer : Form</p><p><b> {</b></p><p> private int po
41、rt = 51888;</p><p> private TcpListener myListener;</p><p> private Service service;</p><p> public FormServer()</p><p><b> {</b></p><p>
42、InitializeComponent();</p><p> listBoxStatus.HorizontalScrollbar = true;</p><p> service = new Service(listBoxStatus);</p><p><b> }</b></p><p> private
43、void FormServer_Load(object sender, EventArgs e)</p><p><b> {</b></p><p> listBoxStatus.HorizontalScrollbar = true;</p><p> IPAddress[] addrIP = Dns.GetHostAddresses(
44、Dns.GetHostName());</p><p> localAddress = addrIP[0];</p><p> buttonStop.Enabled = false;</p><p><b> }</b></p><p> private void buttonStart_Click(object
45、 sender, EventArgs e)</p><p><b> {</b></p><p> if (int.TryParse(textBoxMaxTables.Text, out maxRoomNumbers) == false ||</p><p> int.TryParse(textBoxMaxUsers.Text, out
46、maxUsers) == false)</p><p><b> {</b></p><p> MessageBox.Show("請輸入在規(guī)定范圍內(nèi)的正整數(shù)");</p><p><b> return;</b></p><p><b> }</b>
47、</p><p> if (maxUsers < 1 || maxUsers > 500)</p><p><b> {</b></p><p> MessageBox.Show("允許進入的人數(shù)只能在1-300之間");</p><p><b> return;<
48、/b></p><p><b> }</b></p><p> if (maxRoomNumbers < 1 || maxRoomNumbers > 100)</p><p><b> {</b></p><p> MessageBox.Show("允許開出的房間
49、數(shù)只能在1-100之間");</p><p><b> return;</b></p><p><b> }</b></p><p> textBoxMaxUsers.Enabled = false;</p><p> textBoxMaxTables.Enabled = fals
50、e;</p><p><b> //初始化數(shù)組</b></p><p> gameRoom = new GameRoom[maxRoomNumbers];</p><p> for (int i = 0; i < maxRoomNumbers; i++)</p><p><b> {</b&
51、gt;</p><p> gameRoom[i] = new GameRoom(listBoxStatus);</p><p><b> }</b></p><p> myListener = new TcpListener(localAddress, port);</p><p> myListener.Sta
52、rt();</p><p> service.AddListBoxItem(string.Format(</p><p> "{0:yyyy年M月d日(dddd)h點m分} 開始在{1}:{2}監(jiān)聽客戶連接",</p><p> DateTime.Now, localAddress, port));</p><p>
53、 //創(chuàng)建一個線程監(jiān)聽客戶端連接請求</p><p> ThreadStart ts = new ThreadStart(ListenClientConnect);</p><p> Thread myThread = new Thread(ts);</p><p> myThread.Start();</p><p> butto
54、nStart.Enabled = false;</p><p> buttonStop.Enabled = true;</p><p><b> }</b></p><p> private void buttonStop_Click(object sender, EventArgs e)</p><p><
55、b> {</b></p><p> service.AddListBoxItem(string.Format("目前連接用戶數(shù):{0}", userList.Count));</p><p> service.AddListBoxItem(string.Format(</p><p> "{0:yyyy年M月d
56、日(dddd)h點m分} 開始停止服務,并依次使用戶退出。",</p><p> DateTime.Now));</p><p> StopCLientAndListener();</p><p> buttonStart.Enabled = true;</p><p> buttonStop.Enabled = false
57、;</p><p> textBoxMaxUsers.Enabled = true;</p><p> textBoxMaxTables.Enabled = true;</p><p><b> }</b></p><p> private void StopCLientAndListener()</p&g
58、t;<p><b> {</b></p><p> for (int i = 0; i < userList.Count; i++)</p><p><b> {</b></p><p> userList[i].client.Close();</p><p><b
59、> }</b></p><p> myListener.Stop();</p><p><b> }</b></p><p> private void ListenClientConnect()</p><p><b> {</b></p><p&g
60、t; while (true)</p><p><b> {</b></p><p> TcpClient newClient = null;</p><p><b> try</b></p><p><b> {</b></p><p>
61、newClient = myListener.AcceptTcpClient();</p><p><b> }</b></p><p><b> catch</b></p><p><b> {</b></p><p><b> break;</b&g
62、t;</p><p><b> }</b></p><p> ParameterizedThreadStart pts = new ParameterizedThreadStart(ReceiveData);</p><p> Thread threadReceive = new Thread(pts);</p><p
63、> User user = new User(newClient);</p><p> threadReceive.Start(user);</p><p> userList.Add(user);</p><p> service.AddListBoxItem(string.Format("[{0}]連接服務器成功。",</
64、p><p> newClient.Client.RemoteEndPoint));</p><p> service.AddListBoxItem(string.Format("當前連接用戶數(shù):{0}", userList.Count));</p><p><b> }</b></p><p>&l
65、t;b> }</b></p><p> private void ReceiveData(object obj)</p><p><b> {</b></p><p> User user = (User)obj;</p><p> TcpClient client = user.client
66、;</p><p> bool normalExit = false;</p><p> bool exitWhile = false;</p><p> while (exitWhile == false)</p><p><b> {</b></p><p> string rece
67、iveString = null;</p><p><b> try</b></p><p><b> {</b></p><p> receiveString = user.sr.ReadLine();</p><p><b> }</b></p>&l
68、t;p><b> catch</b></p><p><b> {</b></p><p> service.AddListBoxItem("接收數(shù)據(jù)失敗");</p><p> RemovePlayerfromRoom(user);</p><p><b&g
69、t; }</b></p><p> if (receiveString == null)</p><p><b> {</b></p><p> if (normalExit == false)</p><p><b> {</b></p><p>
70、if (client.Connected == true)</p><p><b> {</b></p><p> service.AddListBoxItem(string.Format(</p><p> "與{0}失去聯(lián)系,已終止接收該用戶信息",</p><p> client.Cli
71、ent.RemoteEndPoint));</p><p> } </p><p> RemovePlayerfromRoom(user);</p><p><b> }</b></p><p><b> break;</b></p>
72、<p><b> }</b></p><p> string[] splitString = receiveString.Split(',');</p><p> int tableIndex = -1; //桌號</p><p> int side = -1; //座位號</
73、p><p> int anotherSide = -1; //對方座位號</p><p> string sendString = "";</p><p> /// <summary></p><p> /// 循環(huán)檢測該用戶是否坐到某游戲桌上</p><p> /// <
74、;/summary></p><p> private void RemovePlayerfromRoom(User user)</p><p><b> {</b></p><p> for (int i = 0; i < gameRoom.Length; i++)</p><p><b>
75、 {</b></p><p> if (gameRoom[i].BlackPlayer.GameUser != null)</p><p><b> {</b></p><p> if (gameRoom[i].BlackPlayer.GameUser == user)</p><p><b&g
76、t; {</b></p><p> StopPlayer(i, 0);</p><p><b> return;</b></p><p><b> }</b></p><p><b> }</b></p><p> if (gam
77、eRoom[i].WhitePlayer.GameUser != null)</p><p><b> {</b></p><p> if (gameRoom[i].WhitePlayer.GameUser == user)</p><p><b> {</b></p><p> StopP
78、layer(i, 1);</p><p><b> return;</b></p><p><b> }</b></p><p><b> }</b></p><p> for (int j = 0; j < gameRoom[i].lookOnUser.Coun
79、t; j++)</p><p><b> {</b></p><p> if (gameRoom[i].lookOnUser[j] != null)</p><p><b> {</b></p><p> if (gameRoom[i].lookOnUser[j] == user)</
80、p><p><b> {</b></p><p> gameRoom[i].lookOnUser.RemoveAt(j);</p><p><b> return;</b></p><p><b> }</b></p><p><b>
81、}</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /// <summary></p><p> /// 讓第i個房間第j個座位
82、的玩家退出房間</p><p> /// </summary></p><p> private void StopPlayer(int i, int j)</p><p><b> {</b></p><p> gameRoom[i].gamePlayer[j].Start = false;<
83、/p><p> //gameRoom[i].gamePlayer[j].GameUser = null;</p><p> //發(fā)送格式:Lost,座位號,用戶名</p><p> service.SendToRoom(gameRoom[i],</p><p> string.Format("LostPlayer,{0},{1}
84、,{2}",</p><p> i, j, gameRoom[i].gamePlayer[j].GameUser.userName));</p><p><b> }</b></p><p> /// <summary></p><p> /// 獲取指定房間人員情況及昵稱字符串,每人之間用
85、/分隔。</p><p> /// 格式:黑方昵稱/白方昵稱/旁觀者昵稱/旁觀者昵稱/……</p><p> /// </summary></p><p> private string GetRoomOnlineString(int tableIndex)</p><p><b> {</b><
86、;/p><p> //此處不能用string,否則效率會很低</p><p> StringBuilder strBuilder = new StringBuilder();</p><p> GameRoom room = gameRoom[tableIndex];</p><p> for (int i = 0; i < roo
87、m.gamePlayer.Length; i++)</p><p><b> {</b></p><p> if (room.gamePlayer[i].GameUser != null)</p><p><b> {</b></p><p> strBuilder.Append(room.
88、gamePlayer[i].GameUser.userName);</p><p><b> }</b></p><p> strBuilder.Append("/");</p><p><b> }</b></p><p> for (int i = 0; i <
89、 room.lookOnUser.Count; i++)</p><p><b> {</b></p><p> strBuilder.Append(room.lookOnUser[i].userName);</p><p> strBuilder.Append("/");</p><p>&l
90、t;b> }</b></p><p> //移除最后一個/符號</p><p> strBuilder = strBuilder.Remove(strBuilder.Length - 1, 1);</p><p> return strBuilder.ToString();</p><p><b> }&
91、lt;/b></p><p> /// <summary></p><p> /// 獲取某桌棋盤上的落子情況</p><p> /// </summary></p><p> /// <param name="tableIndex">桌號(房間號)</param&g
92、t;</p><p> /// <returns>棋盤上各棋子的位置</returns></p><p> private string GetBoardGrid(int tableIndex)</p><p><b> {</b></p><p> StringBuilder sb =
93、new StringBuilder();</p><p> int[,] grid = gameRoom[tableIndex].GameBoard.Grid;</p><p> for (int i = 0; i <= grid.GetUpperBound(0); i++)</p><p><b> {</b></p>
94、<p> for (int j = 0; j <= grid.GetUpperBound(1); j++)</p><p><b> {</b></p><p> sb.Append(grid[i, j].ToString());</p><p> sb.Append("/");</p>
95、;<p><b> }</b></p><p><b> }</b></p><p> //移除最后一個"/"符號</p><p> sb = sb.Remove(sb.Length - 1, 1);</p><p> return sb.ToString
96、();</p><p><b> }</b></p><p> //關閉窗體時觸發(fā)的事件</p><p> private void FormDDServer_FormClosing(object sender, FormClosingEventArgs e)</p><p><b> {</b&
97、gt;</p><p> //在沒有單擊開始服務就直接退出時,myListener為null</p><p> if (myListener != null)</p><p><b> {</b></p><p> StopCLientAndListener();</p><p><
98、b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 五子棋主要代碼</b></p><p> 在資源管理器中生成一個類文件GobangBoard.cs,用于刷新,重畫棋盤,棋子,以及
99、玩家的輸贏判斷。代碼如下:</p><p> class GobangBoard</p><p><b> {</b></p><p><b> //無棋子</b></p><p> public const int None = -1;</p><p><b&
100、gt; //黑色棋子</b></p><p> public const int Black = 0;</p><p><b> //白色棋子</b></p><p> public const int White = 1;</p><p> //15*15的方格</p><p&
101、gt; private int[,] grid = new int[15, 15];</p><p> /// <summary></p><p><b> /// 棋盤</b></p><p> /// </summary></p><p> public int[,] Grid<
102、;/p><p><b> {</b></p><p><b> get</b></p><p><b> {</b></p><p> return grid;</p><p><b> }</b></p>&l
103、t;p><b> }</b></p><p> private int nextIndex;</p><p> /// <summary></p><p> /// 應該黑棋放子還是白棋放子</p><p> /// </summary></p><p>
104、 public int NextIndex</p><p><b> {</b></p><p><b> get</b></p><p><b> {</b></p><p> return nextIndex;</p><p><b&g
105、t; }</b></p><p><b> set</b></p><p><b> {</b></p><p> nextIndex = value;</p><p><b> }</b></p><p><b> }
106、</b></p><p><b> //構造函數(shù)</b></p><p> public GobangBoard()</p><p><b> {</b></p><p> InitializeBoard();</p><p><b> }&l
107、t;/b></p><p> /// <summary></p><p> /// 將*15的方格中的每個交叉點均設置為無棋子</p><p> /// </summary></p><p> public void InitializeBoard()</p><p><b&
108、gt; {</b></p><p> for (int i = 0; i <= grid.GetUpperBound(0); i++)</p><p><b> {</b></p><p> for (int j = 0; j <= grid.GetUpperBound(1); j++)</p>&
109、lt;p><b> {</b></p><p> grid[i, j] = None;</p><p><b> }</b></p><p><b> }</b></p><p> nextIndex = Black;</p><p>&
110、lt;b> }</b></p><p> /// <summary></p><p> /// 判斷下棋位置是否有棋子</p><p> /// </summary></p><p> public bool IsExist(int i, int j)</p><p>
111、;<b> {</b></p><p> if (grid[i, j] != None)</p><p><b> {</b></p><p> return true;</p><p><b> }</b></p><p><b>
112、 else</b></p><p><b> {</b></p><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p> /// <summary&
113、gt;</p><p> /// 獲取棋子落下后是否獲勝</p><p> /// </summary></p><p> public bool IsWin(int i, int j)</p><p><b> {</b></p><p> //與方格的第i,j交叉點向四個
114、方向的連子數(shù),依次是水平,垂直,左上右下,左下右上</p><p> int[] numbers = new int[4];</p><p> numbers[0] = GetRowNumber(i, j);</p><p> numbers[1] = GetColumnNumber(i, j);</p><p> numbers[2
115、] = GetBacklashNumber(i, j);</p><p> numbers[3] = GetSlashNumber(i, j);</p><p><b> //檢查是否獲勝</b></p><p> for (int k = 0; k < numbers.Length; k++)</p><p&g
116、t;<b> {</b></p><p> if (Math.Abs(numbers[k]) == 5)</p><p><b> {</b></p><p> return true;</p><p><b> }</b></p><p>&
117、lt;b> }</b></p><p> return false;</p><p><b> }</b></p><p> /// <summary></p><p> /// 判斷橫向相同顏色的棋子個數(shù)</p><p> /// </summar
118、y></p><p> /// <returns>同色棋子個數(shù)</returns></p><p> private int GetRowNumber(int i, int j)</p><p><b> {</b></p><p><b> //連子個數(shù)</b>
119、;</p><p> int num = 1;</p><p><b> //向右檢查</b></p><p> int x = i + 1;</p><p> while (x < 15)</p><p><b> {</b></p><
120、p> //前方棋子與i,j點不同時跳出循環(huán)</p><p> if (grid[x, j] == grid[i, j])</p><p><b> {</b></p><p><b> num++;</b></p><p><b> x++;</b></p
121、><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> break;</b></p><p><b> }</b><
122、;/p><p><b> }</b></p><p><b> //向左檢查</b></p><p> x = i - 1;</p><p> while (x >= 0)</p><p><b> {</b></p><
123、p> //前方棋子與i,j點不同時跳出循環(huán)</p><p> if (grid[x, j] == grid[i, j])</p><p><b> {</b></p><p><b> num++;</b></p><p><b> x--;</b></p
124、><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> break;</b></p><p><b> }</b><
125、;/p><p><b> }</b></p><p> return num;</p><p><b> }</b></p><p> /// <summary></p><p> /// 判斷縱向相同顏色的棋子個數(shù)</p><p>
126、 /// </summary></p><p> /// <returns>同色棋子個數(shù)</returns></p><p> private int GetColumnNumber(int i, int j)</p><p><b> {</b></p><p><b&
127、gt; //連子個數(shù)</b></p><p> int num = 1;</p><p><b> //向下檢查</b></p><p> int y = j + 1;</p><p> while (y < 15)</p><p><b> {</b
128、></p><p> //前方的棋子與i,j點不同時跳出循環(huán)</p><p> if (grid[i, y] == grid[i, j])</p><p><b> {</b></p><p><b> num++;</b></p><p><b>
129、 y++;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> break;</b></p><p><
130、b> }</b></p><p><b> }</b></p><p><b> //向上檢查</b></p><p> y = j - 1;</p><p> while (y >= 0)</p><p><b> {</
131、b></p><p> //前方的棋子與i,j點不同時跳出循環(huán)</p><p> if (grid[i, y] == grid[i, j])</p><p><b> {</b></p><p><b> num++;</b></p><p><b>
132、 y--;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> break;</b></p><p><
133、;b> }</b></p><p><b> }</b></p><p> return num;</p><p><b> }</b></p><p> /// <summary></p><p> /// 判斷左上到右下相同顏色的
134、棋子個數(shù)</p><p> /// </summary></p><p> /// <returns>同色棋子個數(shù)</returns></p><p> private int GetBacklashNumber(int i, int j)</p><p><b> {</b>
135、</p><p><b> //連子個數(shù)</b></p><p> int num = 1;</p><p><b> //右下方向</b></p><p> int x = i + 1;</p><p> int y = j + 1;</p><
136、;p> while (x < 15 && y < 15)</p><p><b> {</b></p><p> //前方的棋子與i,j點不同時跳出循環(huán)</p><p> if (grid[x, y] == grid[i, j])</p><p><b> {<
137、/b></p><p><b> num++;</b></p><p><b> x++;</b></p><p><b> y++;</b></p><p><b> }</b></p><p><b>
138、 else</b></p><p><b> {</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> //左上方
139、向(x-,y-)</p><p> x = i - 1;</p><p> y = j - 1;</p><p><b> //不超出棋格</b></p><p> while (x >= 0 && y >= 0)</p><p><b> {<
140、;/b></p><p> //前方的棋子與i,j點不同時跳出循環(huán)</p><p> if (grid[x, y] == grid[i, j])</p><p><b> {</b></p><p><b> num++;</b></p><p><b&g
141、t; x--;</b></p><p><b> y--;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><
142、;b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> return num;</p><p><b> }</b></p><p> /// <su
143、mmary></p><p> /// 判斷左下到右上相同顏色的棋子個數(shù)</p><p> /// </summary></p><p> /// <returns>同色棋子個數(shù)</returns></p><p> private int GetSlashNumber(int i, int
144、j)</p><p><b> {</b></p><p><b> //連子個數(shù)</b></p><p> int num = 1;</p><p> int x = i - 1;</p><p> int y = j + 1;</p><p&
145、gt; while (x >= 0 && y < 15)</p><p><b> {</b></p><p> if (grid[x, y] == grid[i, j])</p><p><b> {</b></p><p><b> num++;&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論