freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)---中國(guó)象棋網(wǎng)上對(duì)弈系統(tǒng)-畢業(yè)設(shè)計(jì)(已改無(wú)錯(cuò)字)

2023-03-03 04:53:52 本頁(yè)面
  

【正文】 PhotoShop 中手工繪制保存為 bmp 格式(注意:格點(diǎn)間距應(yīng)保持 50 象素),在 WM_PAINT 消息響應(yīng)中交由 BitBlt() 函數(shù)輸出至窗口。窗口中的按鈕,對(duì)話框等則在 WM_CREATE 消息響應(yīng)中創(chuàng)建。 棋盤(pán)的繪制 使用 photoshop 繪制 帶有底紋 棋盤(pán), 保存為 bmp 格式 , 并且設(shè)置每一格的增量為 50 像素 ,便于棋盤(pán) 上每個(gè)格點(diǎn) 坐標(biāo)的表示 。 在 WM_PAINT 消息響應(yīng)中交由 BitBlt()函數(shù)輸出至窗口 。如圖: 華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 13 圖 32 棋盤(pán) 棋子的繪制及初始化 在 Windows 中有各種圖形用戶界面 GUI(Graphics User Interface)對(duì)象,當(dāng)我們?cè)谶M(jìn)行繪圖時(shí)就需要利用這些對(duì)象。 窗口中的 開(kāi)始 (重設(shè) )按鈕負(fù)責(zé)初始化棋盤(pán),通過(guò)調(diào)用 InitChessBoard()函數(shù)來(lái)實(shí)現(xiàn):InitChessBoard()函數(shù)中首先通過(guò)一個(gè) for 循環(huán)將棋盤(pán) 90 個(gè)格點(diǎn)的屏幕坐標(biāo)賦值給xArray[i][j]和 yArray[i][j],同樣用一個(gè) for 循環(huán)給 InfoArray[i][j]賦值 — 全部清零,再按照棋盤(pán)棋子的初始位置給 InfoArray[i][j]賦上相應(yīng)的值(如 InfoArray[0][0]=InfoArray[8][0]=11,表示黑方兩個(gè)車(chē)位)。 完成上述操作后調(diào)用 InvalidateRect(hWnd,NULL,1)函數(shù)更新視圖,當(dāng)調(diào)用這個(gè)函數(shù)的時(shí)候, Windows 會(huì)在 WM_PAINT 消息響應(yīng)中完成對(duì)窗口的重繪,我們?cè)诖思尤肜L制棋子函數(shù) — DrawChessman()。這個(gè)函數(shù)只是繪制棋子的一個(gè)入口,具體過(guò)程如下: DrawChessman()→Draw()→Graphics() 華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 14 其中 DrawChessman()函數(shù)通過(guò)一個(gè) for 循環(huán)遍歷數(shù)組 InfoArray,傳遞 InfoArray[i][j]數(shù)值并調(diào)用 Draw()函數(shù) → Draw()函數(shù)根據(jù) InfoArray[i][j]的數(shù)值選擇所要繪制的棋子,并將信息傳遞給函數(shù) Graphics()→ Graphics()根據(jù)傳遞過(guò)來(lái)的信息(包括繪制點(diǎn)坐標(biāo)信息,所繪棋子信息)調(diào)用繪圖函數(shù) Ellipse()和 TextOut()來(lái)完成棋子最終在窗口中的顯示。 Ellipse()和TextOut()均為系統(tǒng)函數(shù),前者用來(lái)繪制橢圓,后者用與輸出字符,兩個(gè)函 數(shù)配合即可繪制出棋子。 圖 33 棋盤(pán)初始化 動(dòng)態(tài)顯示 有時(shí)候當(dāng)用戶拿起棋子后,不一定急著放下去,而短暫的思考后未必能記得住剛剛拿起的棋子是哪顆,應(yīng)該給拿起的棋子做非常規(guī)顯示,本系統(tǒng)采用動(dòng)態(tài)顯示。這段動(dòng)態(tài)顯示的代碼應(yīng)該放在 WM_MOUSEMOVE 消息響應(yīng)中,如果一時(shí)忘記自己選擇了那顆棋子,只要移動(dòng)一下鼠標(biāo),拿起的棋子就會(huì)動(dòng)態(tài)顯示,而條件就是變量 get=1(在操作時(shí)為其賦值 )。當(dāng)用戶移動(dòng)鼠標(biāo)時(shí),根據(jù) get 是否為 1 判斷是否調(diào)用 DynamicChessman 來(lái) 實(shí)現(xiàn)棋子動(dòng)態(tài)顯示。來(lái)看一下 DynamicChessman,它帶有兩個(gè)參數(shù) Prei 和 Prej,即棋子的坐標(biāo) i,j 值,根據(jù)這個(gè)值可以得到該棋子屏幕坐標(biāo) Array[Prei][Prej], 棋子信息 InfoArray[Prei][Prej]。 動(dòng)態(tài)顯示就是通過(guò)一個(gè) for 循環(huán)將棋子的底格半徑( EllipseSize)由 23 以步進(jìn) 1 增長(zhǎng)至 28,字體大小 FontSize 由 30 以步進(jìn) 2 增長(zhǎng)至 40,如此循環(huán)。 開(kāi)始 void InitChessBoard()實(shí)現(xiàn)對(duì)棋盤(pán)各格點(diǎn)初始化(InfoArray賦值 ) InvalidateRect(hWnd,NULL,1)刷新視圖 WM_PAINT 消息響應(yīng)中調(diào)用繪制棋子入 口函數(shù) DrawChessman()繪制棋位對(duì)應(yīng) 棋子 繪制棋位對(duì)應(yīng)棋子 void Draw(int x,int y,int info)傳遞繪制信息 void Graphics()完成最終圖形繪制 華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 15 回看 功能 為了方便玩家 ,本系 統(tǒng)還加入了會(huì)看功能,使玩家可以回看對(duì)方剛走過(guò)的起步。玩家落棋后 ,將棋子原坐標(biāo) ( xArray[Prei] [Prej], yArray[Prej] [Prei]) 和更新后的坐標(biāo) ( xArray[i][j],xArray[i][j]) , 分別保存在( xArray[ReplayX1][ReplayY1], yArray[ReplayX1][ReplayY1])和( xArray[ReplayX2][ReplayY2], yArray[ReplayX2][ReplayY2]), 玩家選擇 回看時(shí)系統(tǒng)調(diào)用所保存的兩個(gè)坐標(biāo)點(diǎn), 調(diào)用函數(shù) Polyline()將其用白線連接,以提示玩家 。 圖 34 回看 規(guī)則設(shè)置 在對(duì)局時(shí) ,由執(zhí)紅棋的一方先走,雙方輪流各走一步,直至分出勝負(fù)為止。輪到走棋的一方,將某個(gè)棋子從一個(gè)交叉點(diǎn)到另一個(gè)交叉點(diǎn),或者吃掉對(duì)方棋子而占領(lǐng)交叉點(diǎn),都算走了一步。雙方各走一步,成為一回合。 任何棋子在走動(dòng)時(shí),如果一方棋子可以到達(dá)的位置有對(duì)方的棋子,就可以把對(duì)方棋子拿出棋盤(pán) (稱為吃子 )而換上自己的棋子。只有炮的 吃子 方式與它的走法不同:它和對(duì)方棋子之間必須隔一個(gè)子(無(wú)論是自己的還是對(duì)方的),具備此條件才能 吃掉人家。一定要注意,中隔一個(gè)棋子,這個(gè) 棋子俗稱 “ 炮架子 ” 。 一方的棋子 攻擊對(duì)方的將(帥),并且在下一步能把它吃掉,俗稱“將軍”。被“將華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 16 軍”的一方必須立即“應(yīng)將”,即用自衛(wèi)的步法曲化解被“將軍”的狀態(tài)。如果被“將軍”而無(wú)法“應(yīng)將”,就算被“將死”,輸?shù)舯揪帧]喌阶咂宓囊环綄ⅲ◣洠╇m沒(méi)被對(duì)方“將軍”,卻被禁在一個(gè)位置上無(wú)路可走,同時(shí)己方其他棋子也都不能動(dòng),就算被“困死”,同樣輸?shù)舯揪帧? 將(帥) :將和帥是棋中的首腦,是雙方竭力爭(zhēng)奪的目標(biāo)。它只能在“九宮”之內(nèi)活動(dòng),可上可下,可左可右,每次走動(dòng)只能按豎線和橫線走動(dòng)一格。江河帥不能在同一豎線上直接面對(duì), 否則判走方輸棋。 士(仕):士(仕)是將(帥)的貼身保鏢,它也只能在“九宮”內(nèi)走動(dòng)。它的行棋路徑只能是“九宮”內(nèi)的斜線。 象(相):象(相)的主要作用是防守,保護(hù)自己的將(帥)。它的走法是每次循對(duì)角線走兩格。俗稱“象走田”。象(相)的活動(dòng)范圍限于“河界”以內(nèi)的本方陣地,不能過(guò)河,且如果它走的“田”字中央有一個(gè)棋子的時(shí)候,就不能走,俗稱“塞象眼”。 車(chē):車(chē)在象棋中威力最大,無(wú)論橫線、豎線均可行走,只要無(wú)子阻攔,部署不受限制。因此一車(chē)可以控制十七個(gè)點(diǎn),故有“一車(chē)十子寒”之稱。 炮:炮在不吃子的時(shí)候,走動(dòng)與車(chē)完全 相同。 馬:馬在走動(dòng)的方法是一直一斜,即先橫著或豎著走一格,然后再斜著走一個(gè)對(duì)角線,俗稱“馬走日”。馬一次可走的選擇點(diǎn)可以達(dá)到四周的八個(gè)點(diǎn)。故有“八面威風(fēng)”之說(shuō)。如果在要去得方向有別的棋子擋住,馬就無(wú)法走過(guò)去,俗稱“蹩馬腿”。 卒(兵): 兵(卒)在未過(guò)河前,只能向前一步步走,過(guò)河以后,除不能后退外,允許左右移動(dòng),但也只能一次一步,即使這樣,兵(卒)的威力也大大增強(qiáng),故有 “ 過(guò)河的卒子頂半個(gè)車(chē) ” 之說(shuō) 馬走日字,相 飛 田字 ,七種棋子,七種不同的走法,映射到程序中來(lái),必須有一個(gè)函數(shù)來(lái)約束其行動(dòng)。本 系統(tǒng)中的運(yùn)用 bool型 ChessRule()函數(shù)來(lái)設(shè)置規(guī)則約束,當(dāng)用戶點(diǎn)擊拿起棋子,在再次點(diǎn)擊目的地時(shí)程序?qū)⒄{(diào)用 函數(shù) ChessRule()來(lái)判斷著法是否可行,不可行返回 false,反之則返回 true。函數(shù)的參數(shù) (x1,y1)為原棋子坐標(biāo), (x2, y2)為目的坐標(biāo) ,info1,2 為兩坐標(biāo)點(diǎn)信息,當(dāng) info1表示的棋子顏色同與 info2時(shí)(紅色值: 17,黑色值: 1117),即“吃”己方子,直接返回 false。 將(帥): 首先判斷走步是超出活動(dòng)范圍,將(帥)的活動(dòng)范圍為“九宮”,當(dāng) x23或 x25超出活動(dòng) 范圍,同理 y2 y27時(shí),系統(tǒng)提示玩家走棋出錯(cuò)。若在活動(dòng)范圍之內(nèi),根據(jù)規(guī)則,當(dāng) |x2x1|=1且 y1=y2時(shí),走棋成功。同理,當(dāng) |y1y2|=1且 x1=x2時(shí),走棋成功。 其他走棋系統(tǒng)提示走棋出錯(cuò)。 士(仕):同 將(帥) 相同,判斷是否在在“九宮”之內(nèi)。 若超出活動(dòng)范圍,系統(tǒng)提示走棋錯(cuò)誤。 若在活動(dòng)范圍之內(nèi),根據(jù)規(guī)則,當(dāng) |x2x1|=1且 |y2y1|=1時(shí)走棋成功。華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 17 其他走棋系統(tǒng)提示走棋出錯(cuò)。 象(相): 首先判斷走步是否超出活動(dòng)范圍, 象(相) 的活動(dòng)范圍為本方陣地,紅相得活動(dòng)范圍為 x24,黑象的活動(dòng)范圍 為 x25。 若超出活動(dòng)范圍,系統(tǒng)提示走棋錯(cuò)誤。 若在活動(dòng)范圍之內(nèi), 根據(jù)規(guī)則,當(dāng) |x2x1|= |y2y1|=2時(shí),判斷是否“塞象眼”,InfoArray[(x1+x2)/2][(y1+y2)/2]=0時(shí) ,表示沒(méi)有塞象眼, 走棋成功 ,否則系統(tǒng)提示走棋錯(cuò)誤 。 車(chē): 當(dāng) 不滿足 x1=x2或 y1=y2時(shí) , 系統(tǒng)提示走棋錯(cuò)誤。當(dāng)滿足條件時(shí),判斷兩子之間是否還有其他棋子存在, 用 for循環(huán) 語(yǔ)句 對(duì)格點(diǎn)( xArray[x1][y1], yArray[x1][y1])和格點(diǎn)( xArray[x2][y2], yArray[x2][y2])之間的所有格點(diǎn)進(jìn)行 掃描,若之間所有格點(diǎn)的類型值 InfoArray[i][j]=0, 表示兩子之間沒(méi)有其他棋子, 則走棋成功 , 反之提示走棋錯(cuò)誤 。 馬:當(dāng) 不滿足 |x2x1|= |y2y1|=2或 |x2x1|= |y2y1|=1時(shí), 系統(tǒng)提示走棋錯(cuò)誤。當(dāng)滿足條件時(shí), 判斷是否蹩馬腿 ,蹩馬腿則提示走棋錯(cuò)誤。 x2x1=2時(shí) , InfoArray[x21][y1]=0表示沒(méi)有蹩馬腿,可以走棋; x2x1=2時(shí), InfoArray[x11][y1]=0表示沒(méi)有蹩馬腿,可以走棋; y2y1=2時(shí), InfoArray[x1][y21]=0表示沒(méi)有蹩馬腿,可以走棋; y2y1=2時(shí),InfoArray[x1][y11]=0表示沒(méi)有蹩馬腿,可以走棋。 炮: 當(dāng) 沒(méi)有吃子 時(shí) , InfoArray[x2][y2]=0算法與車(chē)相同。當(dāng)吃子時(shí), InfoArray[x2][y2]的值不為 0,用 for循環(huán)語(yǔ)句對(duì) 格點(diǎn)( xArray[x1][y1], yArray[x1][y1])和格點(diǎn)( xArray[x2][y2],yArray[x2][y2])之間的所有格點(diǎn)進(jìn)行掃描,若兩格點(diǎn)之間有一個(gè)格點(diǎn)有棋子,即只存在一個(gè) InfoArray[i][j]的值不為 0,則走棋成功,反之提示走棋錯(cuò)誤。 卒(兵) : 紅 兵 因?yàn)椴荒芎笸?,則 y1y2。當(dāng)過(guò)界后可以左右移動(dòng),但每次只能移動(dòng)一個(gè)格點(diǎn),所以當(dāng) y15時(shí),滿足 x1=x y1y2=1或 |x1x2|= y1=y2。當(dāng)不過(guò)界即 y14時(shí),滿足 x1=x y1y2=1。同理可以指定黑卒的規(guī)則。 當(dāng)調(diào)用 函數(shù) ChessRule()時(shí) 根據(jù)的 InfoArray的 值用一個(gè) switch選擇語(yǔ)句來(lái)選擇棋子對(duì)應(yīng)的規(guī)則, 規(guī)則正確返回 true值,程序更新 InfoArray信息 ( InfoArray[Prei][ Prej]=0;InfoArray[i][j]=info1) 調(diào)用 InvalidateRect函數(shù)來(lái)更新視圖,并等待用戶的下一步操作。 定義info2表示移動(dòng)前 InfoArray[i][j]的值, 當(dāng) info2的值為 5或 15,即吃掉的是對(duì)方將(帥),則一方勝利,變量 win=true,哪方勝利根據(jù) info2的值判斷: 5— 黑方勝利, 15— 紅方勝利,且此局結(jié)束。 網(wǎng)絡(luò)通信 本程序通過(guò)類 CComm 來(lái)實(shí)現(xiàn)通信功能: class CComm { private: 華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 18 static void *ListenThread(void *data)。 SOCKET ListenSocket。 sockaddr_in srv。 sockaddr_in client。 public: bool NewMsg。 CComm()。 ~CComm()。 bool SendMsg(char *Msg,int len,char *host,short port)。 bool Listen(int PortNum)。 } 類中函數(shù) SendMsg 和 Listen 分別負(fù)責(zé)發(fā)送和接收數(shù)據(jù),是實(shí)現(xiàn)聯(lián)機(jī)通信的關(guān)鍵。 圖 35 網(wǎng)絡(luò)通信 數(shù)據(jù)代碼 當(dāng)一方走棋后,通過(guò) CComm 類的成員函數(shù) SendMsg 發(fā)送數(shù)據(jù)通知對(duì)方,發(fā)送的數(shù)據(jù)很簡(jiǎn)單:起始坐標(biāo),終點(diǎn)坐標(biāo)和棋子信息。這組信息被保存在 int 型變量 UpdateAllData
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1