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库。这框架写出来都能当毕业设计了。


推荐阅读:
相关文章