999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于游戲化學習的編程教學模式研究

2022-09-19 09:10:12張立立徐博文楊金柱高東博
高教學刊 2022年26期
關鍵詞:界面用戶系統

張立立,徐博文,楊金柱*,王 彤,高東博

(1.東北大學 計算機科學與工程學院 計算機國家級實驗教學示范中心,沈陽 110819;2.中核控制系統工程有限公司,北京 102400)

學習利用cpp 知識、參考Qt 手冊,綜合運用計算機網絡,操作系統原理(多線程同步),數據結構,數據庫技術,MVC 設計模式,面向對象程序設計方法,軟件工程學科等知識開發實際系統。熟悉應用軟件的開發過程,要求軟件界面美觀,操作簡便,符合象棋棋牌室的實際游戲場景。

基于以上基本教學要求,本文開發了一套象棋棋牌室游戲系統,課程目標是通過學生熟悉的網絡游戲入手,逐步完善游戲功能,讓學生在編程學習中建立信心和成就感,從而對編程產生興趣,進行更深入的研究和探索。

一、系統功能介紹

系統由服務器、客戶端兩部分組成,客戶端具有選座界面、對局界面。

用戶啟動客戶端軟件之后,客戶端顯示界面并自動嘗試與服務器建立連接,若連接成功,界面顯示“已連接”;若連接失敗,系統顯示“未連接”,用戶可以通過“重新連接”按鈕來重新連接服務器。

服務器連接成功后,用戶可以輸入用戶名、密碼向服務器發送登錄請求,服務器校驗后向客戶端發送成功/失敗反饋。若已有客戶端使用此用戶名登錄,則不可以重復登陸。

完成登陸后,系統顯示當前登錄的用戶名和積分。此時,客戶端顯示選座界面,用戶可以:(1)創建比賽對局(房間);(2)取消創建的對局(房間);(3)加入已有的對局(房間);(4)觀戰正在進行的對局。

當找到對手(加入房間/創建的房間被加入)或選擇觀戰模式之后,界面切換到對局界面。非觀戰模式下,用戶可以依據棋規移動棋子,移動不符合棋規時,系統不響應。

雙人對戰過程中如果某一方獲勝,對戰終止。

此時,勝負兩方分別加減積分,客戶端返回選座界面;如果有一方點擊“退出/認輸”按鈕,則判定這一方為負,其他同上。觀戰過程中,點擊“退出/認輸”按鈕,客戶端返回選座界面。流程如圖1 所示。

圖1 系統功能流程圖

二、系統詳細設計及方案

整個系統由一個中心服務器和若干個客戶端組成。用戶功能上主要有對局系統和棋牌室座位管理系統兩部分。

服務器和客戶端均利用C++和Qt 框架編寫。為了實現了多人時操作、客戶端網絡通信不影響用戶操作,使用了多線程技術。服務器和客戶端之間采用TCP 協議進行通信,服務器采用改進過的bio 模式,即為每個客戶端連接建立兩個線程分別用來收發網絡消息。

選座系統、棋規判定系統和棋盤模型等均位于服務器端。客戶端部分除了網絡模塊之外,僅保存視圖。服務器端連接mysql 數據庫存儲用戶名、密碼和積分信息。

(一)Qt 簡介

Qt 是一個跨平臺的C++應用程序開發框架。它提供給開發者建立圖形用戶界面所需的功能,廣泛用于開發GUI 程序,也可用于開發非GUI 程序。Qt 是完全面向對象的,很容易擴展,并且允許真正地組件編程。

(二)網絡通信及消息處理

服務器端由一個線程負責建立TCP 連接,連接建立成功后,開啟兩個新的線程用來進行socket 通信。

一個線程用于向客戶端發送數據,相當于“生產者消費者”模型中的消費者。在沒有需要發送的消息時利用Qt 框架的WaitCondition 等待(相當于優化后的自旋鎖,可以有效降低cpu 使用率)。當需要發送消息時,其他線程設置好此消息線程對象的消息內容成員,并喚醒此線程(相當于打開自旋鎖),就可以實現消息發送。在使用Qt 的信號與槽連接時,使用Qt::Dirrectconnection連接方案,否則會因為目標線程阻塞而無法喚醒線程發送消息。

另一個線程用于接收客戶端數據,對于每一次接收的數據。利用Qt 的信號與槽機制注冊到UserConnection類的doRecv 函數。這樣就形成了如下設計。

每個抽象的UserConnection 對應一個實際的用戶連接。

所有連接(UserConnection)共享一個RoomManager類的對象roommanager。

所有連接(UserConnection)共享一個數據庫操作類。

每個連接有一個獨立的連接抽象層(組合了收發線程的TCPConnection 類)用于管理收發線程。

對于服務器的消息發送,調用連接抽象層的send函數即可向客戶端發送消息。

對于服務器的消息接收,直接回調doRecv 函數,相應的業務就可以在此函數中得到處理,而無需考慮網絡具體實現。

用這樣類似java web 中servlet 的方式可以對底層的網絡部分更好地封裝,降低耦合便于拓展。

客戶端的網絡模塊設計與服務器類似,只是不同于服務器多個連接,客戶端僅有收發兩個線程。

(三)對局系統的實現

系統整體采用mvc 設計模式,便于降低代碼耦合性,有利于組件的重用。如圖2 所示。

圖2 mvc 設計模式

客戶端的ChessView 等類繼承自Qt 的Widget,用來與用戶交互。

服務器的ChessField 類是棋盤模型,棋規判定、勝負判定等業務邏輯在此類中實現。這個類聚合了抽象類ChessPiece 的不同實現,對應不同種類的棋子。每個子類有各自的邊界判斷,移動判斷函數。

控制器為上文提到的UserConnection 類。

(四)座位管理系統的實現

每一個UserConnection 中都有一個相同的Room-Manager 類指針指向一個共享的RoomManager 對象,程序截圖如圖3 所示。

圖3 RoomManager 類指針函數程序

可以看到:該類提供了新建房間、加入房間、觀看對局等接口,接收的參數是User,用戶連接使用時通過傳入this 指針就可以實現操作。

存儲的數據結構使用了鍵值對(QMap),其結果如圖4 所示。

圖4 QMap 結構圖

對于一個沒有對手的“單人房間”,在room_struct 當中存放兩個nullptr,這時鍵UserConnection 代表房間,作為房間句柄。

“加入比賽”時,為新加入的人也創建一個鍵值對,即一個“房間”分配兩個空間,這樣可以更加高效地定位棋盤模型和對手。

調用roomInfo 函數不直接返回該數據結構,而是將冗余的第二份房間信息去除,這樣得到的QMap 的鍵UserConnection 可以唯一標識一個房間,作為房間句柄使用。程序截圖如圖5 所示。

圖5 QMap 的鍵函數程序

這個類同時也維護用戶列表,提供重復登陸判斷等接口。

三、系統測試

(一)系統調試和難點分析

1.并發過程中數據一致性問題

問題描述:調試時,程序運行過程中出現非預期的不合理結果。比如修改某些數據不生效等情況。

原因:roommanager 共享對象在多線程環境下有可能同時被多個線程同時寫入,進而出現數據一致性問題。

解決方案:roommanager 等多線程共享對象,在需要寫入時需要用Qt 提供的QMutex 互斥鎖對給資源加鎖,在修改完成后釋放互斥鎖,在此過程中其他的線程將不能進行修改。

2.客戶端連接釋放問題

問題描述:調試過程中,客戶端程序突然終止連接后,服務器程序常常無響應或是異常終止。而作為一個服務器,因為某客戶端的某些行為導致崩潰是不能接受的。

原因:C++語言是不同于java 一類具有垃圾回收器的編程語言,需要手動管理內存及相應的資源。在客戶端中斷連接以后,必須要結束為該用戶創建的連接線程,釋放內存,清除所有此用戶的對局狀態信息,同時從已登陸用戶列表中移除該用戶。

解決方案:必須找到合理的方式釋放資源。

在線程創建過程中將RecvThread 類的die 信號與TCPConnection 類的析構方法連接。當檢測到客戶端連接中斷后,RecvThread 發出die 信號。這時,首先析構TCPConnection 對象,在~TCPConnection()中析構User-Connection 類的對象。

為了清除所有此用戶的對局狀態信息,同時從已登陸用戶列表中移除該用戶:UserConnection 類的析構方法調用RoomManager::logoff,此函數釋放所有包含UserConnection 的對局。并在users:QSet 中刪除這個User,從而實現將該用戶標記為非登陸狀態。

完成以上這些之后,關閉TCPSendThread 線程,由于此線程處于阻塞狀態(等待網絡消息的生產者生產消息),故不能直接結束線程。使用Qt 提供的terminate()函數強制終止線程有會帶來一系列的問題,比如影響到其他正常運行的線程。故設計了如圖6 所示的interrupt 方法。

圖6 interrupt 方法程序設計

最后,需要終止TCPRecvThread。

(二)系統運行界面

圖7 為系統登錄界面,正確輸入用戶名和密碼后,點擊登錄按鈕,可以進入到選座系統界面,如圖8 所示。

圖7 系統登錄成功界面

圖8 選座系統界面

選座完成后,點擊建立房間,進入對戰模式,如圖9所示。

圖9 對戰界面

四、結束語

本文給出了使用C++和Qt 技術進行象棋棋牌室游戲軟件的設計方案,詳細介紹了系統各部分的功能原理、運行流程及具體的實現方案,最后對系統各個功能進行測試。本設計案例重在鞏固學生對理論知識的理解,讓學生明白只有通過實踐才能驗證所學所得、才能熟練掌握課程知識。在實踐中多層次全方位的學習知識、在實踐中加深對所學知識的印象,鍛煉軟件開發的能力,以及對系統調試和解決實際問題的能力。

猜你喜歡
界面用戶系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
國企黨委前置研究的“四個界面”
當代陜西(2020年13期)2020-08-24 08:22:02
基于FANUC PICTURE的虛擬軸坐標顯示界面開發方法研究
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
人機交互界面發展趨勢研究
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
主站蜘蛛池模板: 国产欧美日韩另类| 国产午夜精品鲁丝片| 久久精品电影| 中文字幕久久亚洲一区| 欧美精品一二三区| 国产成人凹凸视频在线| 色哟哟色院91精品网站| 国产黄在线观看| 国产一区二区人大臿蕉香蕉| 国产菊爆视频在线观看| 色综合热无码热国产| 99无码熟妇丰满人妻啪啪 | 午夜欧美在线| 国产精品夜夜嗨视频免费视频| 亚洲天堂免费在线视频| 国产精品妖精视频| 亚洲日本中文字幕天堂网| 欧美日韩国产在线播放| 午夜福利无码一区二区| 国产美女一级毛片| 69国产精品视频免费| 久久黄色小视频| 欧美激情视频一区| 精品少妇人妻av无码久久| 毛片卡一卡二| 国产一区在线视频观看| 91久久国产成人免费观看| 亚洲色图综合在线| 成年人国产网站| 久操中文在线| 手机精品福利在线观看| 亚洲男人天堂网址| 国产成人狂喷潮在线观看2345| 国产成本人片免费a∨短片| 国内精品九九久久久精品| 国产啪在线91| 在线观看av永久| 超清无码熟妇人妻AV在线绿巨人| 久久天天躁夜夜躁狠狠| 中文字幕免费播放| 中文字幕久久波多野结衣| 99久久国产综合精品女同| 国产乱子伦手机在线| 色综合手机在线| 91欧美在线| 日本一区二区三区精品AⅤ| 国产第一页亚洲| 3p叠罗汉国产精品久久| 国产精品嫩草影院av| 精品一区二区三区四区五区| 国产精品三区四区| 亚洲天堂自拍| 特级做a爰片毛片免费69| 色婷婷狠狠干| 亚洲成肉网| 夜夜高潮夜夜爽国产伦精品| 亚洲视频欧美不卡| 久久久91人妻无码精品蜜桃HD | 男女精品视频| 国产成人调教在线视频| 亚洲精品制服丝袜二区| 97国产在线视频| 日本精品一在线观看视频| 成人日韩精品| 久久伊人操| 国产99精品久久| 日韩精品无码不卡无码| 亚洲成综合人影院在院播放| 日本国产精品一区久久久| 三上悠亚在线精品二区| 国产精品网拍在线| 欧美福利在线播放| 一级毛片在线免费视频| 久久这里只有精品8| 亚洲日韩精品欧美中文字幕| 免费jjzz在在线播放国产| 91午夜福利在线观看精品| 57pao国产成视频免费播放| 蜜桃视频一区二区三区| www.av男人.com| 欧美成人精品在线| 伊人婷婷色香五月综合缴缴情|