1、Linus用c語言創建了Linux。

2、OpenGL都是c語言式的介面。

3、libEvent、libUv都是c寫成的。

上述

第1點,說明c其實能做的事情比你能想像的多。

第2點,是客戶端可以用的圖形庫,比較底層。跟c語言一樣,自己不封裝好一定數量的庫時,做事情比較繁瑣。

第3點,libEvent、libUv都是伺服器端可用的高並發庫。

所以,純c的話,使用2和3,花點時間,做出一個桌游demo完全沒有問題。

後記:

底下有人評論讓我先看一下「大一」這個字眼,然後再回答c能不能。即使有這樣善意的提示,我還是想說:c當然能。如果硬要扯上「大一」, 我只能說我不能,不代表人家不能。

如果脫離C的話,有很多解決方案可以幫助快速的做出遊戲,這裡不多寫,我在知乎的很多回答都是關於遊戲開發的,你可以參考我的其他帖子。


可以,如果你只是交作業的話直接裸寫socket,區域網內一個當主機一個當客戶端,用戶手動輸入ip連接就行。然後自定義個簡單的協議,比如「長度指令參數」這種。我大一的時候就和室友一起這麼寫過對戰的植物大戰殭屍。不過僅限交作業,這麼寫出來最多就是個玩具的程度。


和我大一當時的時候想法一樣,哈哈,覺得寫出來的遊戲一起在線上玩才有意思,單人版沒有成就感。大學之前一點也沒有接觸過計算機,大一上學期學了些 C++,大一下學期接觸了圖形界面的編程,主要學習了 MFC。但對網路當時還是很陌生,自己摸索著寫了一個貪吃蛇的網路對戰,但只支持區域網內對戰。

貪吃蛇雙人對戰

我當時其實是想在整個網路上對戰的,然後經過自己的不斷折騰,和同學測試,慢慢的才明白了原來有一個叫做內網 ip 、公網 ip 的東西。

我們在運營商裝一條寬頻,然後連到家裡會通過路由器。連到家裡的寬頻有一個 ip,然後通過路由器又分成很多 ip,一般是 192.168.X.X 的形式,這樣很多人就可以一起上網了。

這個 ip 就是內網 ip,可以看到這個 ip 不是唯一的,你和我的 ip 可能都是 192.168.31.2。所以無法通過這個 ip 直接在互聯網上通信,只能在區域網內通信,也就是連同一個路由器的不同設備之間通信。

我們現在大部分還是使用 IPv4,要想在互聯網上通信,每個人都需要一個 ip 地址。由於當時設計 IPv4 的時候沒有想到互聯網發展成現在這樣,ip 地址的數量很有限,現在不可能每個人都有一個 ip。所以一般我們家裡即使不用路由器,運行商分配的給我們依舊是一個內網 ip,10.0.X.X 的形式,別人是無法直接訪問的。

我們之所以能上網,其實會有一個 NAT 轉換的東西。因為我們是內網 ip,當我們上網的時候,內網 ip 會先轉換成公網 ip,然後訪問公網上的各種服務,瀏覽網頁,看視頻等等。但內網 ip 是無法直接和內網 ip 通信的,而大多數人家裡的寬頻其實都是內網 ip。

所以如果想實現網路對戰,如果是區域網內的對戰,可以像我之前那樣,直接使用 C 語言提供的 socket 編程進行通信,比較簡單,只要大家都連了校園網,就在一個區域網內了,也就可以互相遊戲了。

但如果想不同區域網之間進行對戰,可以買阿里雲或者騰訊雲的雲伺服器,伺服器是擁有公網 ip的。 A 和 B 之間傳輸數據,可以讓 A 把數據發給伺服器,伺服器把數據轉給 B。同樣的,B 把數據發給伺服器,伺服器再把數據轉給 A。

如果知道了內網 ip 和公網 ip 這個事,就可以進行多人在線遊戲了。我沒用 C 語言寫過網路對戰的東西,分享一下思路。

首先,肯定得實現單機版的邏輯,你需要找一個 C 語言的 GUI 庫,編寫界面和邏輯。

然後就是網路傳輸數據,我也不清楚目前多人遊戲使用的是什麼協議,你可以網上搜搜。

我之前寫過一個棋類對戰的遊戲,使用的是 websocket 協議。你需要實現 websocket 伺服器端中轉數據的邏輯,還有客戶端連接 websocket 邏輯,你可以查查 C 語言怎麼用。

建議可以先找個聊天室的 demo,研究一下怎麼傳輸數據,可以參考我之前寫棋類對戰遊戲的一個思路,不過是用 js 寫的。

windliang:WebSocket: 從狼吃羊說起?

zhuanlan.zhihu.com圖標

當然可以,20幾年前的mudos,就是c語言


可以但是你可能不會,學習周期很長。

假設你完成了單機模式下的所有問題。記住要真去寫試一試,圖形庫配置,演算法,簡單AI怎麼寫都可能遇到問題。計算好時間。能不能完成,寫不完要不要備選方案。要熱愛折騰,不然還是水個管理系統吧。

我大一c語言課設用ege圖形庫寫帶簡單AI的五子棋來著。也寫了xx管理系統,反正一會的事,怕五子棋後頭寫崩了。

如果要寫網路功能。我的建議

因為c課設,一般是不讓你調用花里胡哨的庫的。老師也沒想讓你寫多麼高大上。

一般服務端是放linux的, linux和windows的網路編程api是不一樣的。你萬一找錯了教程可能會疑惑。

所以要注意去搜索windows c網路編程。

然後配置環境,記得好像要windows.h吧。怎麼鏈接。。。

大一可能沒有計算機網路基礎,可能會有一些影響,但是我目測了下問題可能不大。可能還會激發你學網路的興趣。遇到不懂的名詞去搜。

如果這些都成功了,你能達到的效果是主機a往主機b發了一個字元串。反過來也一樣。

這樣你實現了點對點通信。能寫出雙人遊戲。你的課設遊戲也差不多了。

不會寫網路功能可以搜遊戲 幀同步 狀態同步

總之我覺得有時間就不要怕折騰。

分割線。。。。。。。。。。

網路編程問題很多的,我就不和你提概念了。

1,如果你遇到了收數據不完整的情況。

就寫成一直發但是直到收到結束符#才算收完。

move,up#move,down#move,left

這個字元串表示玩家向上一步,向下一步,向左一步。大概這個意思。別認為你發多長,對面就一定能一次收到這麼長。有興趣了解下網路粘包。我這是跳過了原理,現象直接告訴你解決方案之一。畢竟你大一。

2,如果你想把他從雙人遊戲寫成多人遊戲。你還要用c。要寫一個框架,這就很難了。。。建議系統學習 計算機網路 ,《Unix網路編程》前八章,《linux多線程伺服器編程》陳碩 muduo庫。這框架寫出來都能當畢業設計了。


推薦閱讀:
相关文章