2010-02-17 184 views
0

我一直在Qt中創建一個2D遊戲,我想讓其他人連接到託管的遊戲來玩。我會在遊戲中創建一個「服務器」並允許其他人連接到它嗎?Qt創建遊戲主機

回答

1

如果這只是一個小項目,並且你不打算通過網絡大量分發它(它聽起來不像你),那麼你可以編寫一個簡單的套接字服務器。您需要修改現有遊戲代碼,將「移動」作爲消息發送到服務器。如果你構建一個簡單的網絡協議來傳輸移動數據(如果你有野心,你可以嘗試序列化),它可能會是最簡單的。

一個簡單的井字棋遊戲的僞代碼示例:

move1 = "Move X:1:1" //placed an 'X' in square at row 1, column 1 
move2 = "Move O:1:2" //placed an 'O' in square at row 1, column 2 

reset = "Reset"  //clear the board for a new game 

...etc... 

你的遊戲代碼將需要生成這些消息。每個玩家將在他們的機器上運行你的遊戲,這將作爲客戶端。

同時,回到服務器代碼中,您需要監聽客戶端發送的移動消息。當您收到移動消息時,您需要將消息廣播到所有其他客戶端,以便可以更新主板。我建議現在移動遊戲代碼之外的服務器代碼;這將允許你設置一個專門的服務器來處理所有的套接字,然後每個想玩的人都可以簡單地將他們的客戶端連接到服務器上。

其基本思想是你的客戶端需要廣播關於它的玩家對服務器做什麼的細節,以及從服務器偵聽數據以更新關於其他玩家的細節。

你可以找到一個簡單的客戶端 - 服務器遊戲的高級算法一些很好的討論這個問題,以及:Algorithm for Client-Server Games

希望這是足以讓你開始!我用這種方法用一些簡單的遊戲(俄羅斯方塊,Pong等),使用C++/Qt,他們的工作得很好。

PS。不要讓寫你自己的服務器的想法嚇跑你。這聽起來令人生畏,但它實際上並不十分複雜(約100行代碼或更少),並且具有很好的學習體驗。

+0

非常感謝。這些信息有很大幫助。我之前編寫過套接字代碼,但沒有太多的服務器代碼,這將是一次很棒的體驗。 – BlakeWilliams

0

如果我是你,我會製造一個與「客戶」分離的服務器,但與之捆綁在一起。相信我與否,許多遊戲採取類似的方法。

1

一般來說,人們需要一些東西才能得到類似的東西。

即是一個目錄服務器。也許每個人都連接到其他玩家玩遊戲的玩家,但是你需要運行一個目錄來列出遊戲以便人們進行連接。

無論是或者你需要運行一個服務器並將它們託管在那裏。選擇是你的,第一個選擇對你來說可能是最簡單的。

+0

+1強烈建議使用公開可用的目錄服務器。 – shinkou

+0

我只是想和幾個朋友一起玩大多數局域網和一些通過互聯網輸入IP的。 – BlakeWilliams