首页 > 学技术 > 技术网文 > C/C++ > 正文

[原创] 俄罗斯方块加了简单的网络功能(附源码加了注释)


来源 chinaunix.net kuqin整理

程序的编写大概花去了我一个多星期的时间,程序有很多细节没有考虑也还很不完善。以后有时间或有心情的时候我会考虑把代码移植到win下,不过如果大家有兴趣的话,也可以尝试自己移植一下,我会非常感谢谢,呵呵

由于工作一直很忙,等有时间会给代码加上注释。

为了方便大家看代码,这里简单说一下移植的原理。

 
在程序里,我对输入输出采用了重定向的方法,网络功能时把输入输出重定向到远端,本地显示时就重定向到本地。

在本地进行显示的时我没有直接对X进行读写,而是通过了中间层对显示buf进行操作,所以在linux下我用x11给中间层提供了一个显示buf.

位图的拷贝填充两个函数都是自己写的,另外显示的分数也是自己写的,所以在移植的过程中都不需要考虑这些问题, 因此移植的过程中对显示方面给程序提供一个win下的显示buf就可以了, 当然要移植到win下还需要再考虑消息机制的问题.
 

用法:
解开压缩包直接make

./block 单机
./block -w 单机双人. 
./block -s [IP]服务端. 
./block -c [IP] 客户端

运行的时候一定要起X,linux新手只要知道进入图形界面就可以了。

网络功能客户端需要按空格做准备.

[ 本帖最后由 bierdaci 于 2006-10-19 16:30 编辑 ]

block

block

russia.tar.gz

russia.tar.gz



 mq110 回复于:2006-07-22 13:40:25

不GPL?


 bierdaci 回复于:2006-07-22 13:40:28

对了最重要的忘说了,要用linux系统还要起X才能玩,如果找不到libX11库可以自己指定下,用LD_LIBRARY_PATH=[路径名]


 bierdaci 回复于:2006-07-22 13:41:10

引用:原帖由 mq110 于 2006-7-22 13:40 发表
不GPL? 


哈哈,就是写着玩,没啥GPL的


 bierdaci 回复于:2006-07-22 13:52:22

引用:原帖由 mq110 于 2006-7-22 13:40 发表
不GPL? 


能玩吗?帮我测试下


 bierdaci 回复于:2006-07-22 14:32:00

没人帮我测试吗?刚才有人说在fedora 3下不能玩,我的环境是redhat 4 和fedora 5


 liubinbj 回复于:2006-07-22 16:01:07

能玩!也好像没什么bug,建议楼主增加颜色,看着都一样的灰色有点疲劳。还有当前级别显示积分显示,多少分过级后速度加快等等...

鼓励。当然要放出代码来,否则就不够厚道了。


 dozec 回复于:2006-07-22 19:50:13

fc5环境下可以玩


 bierdaci 回复于:2006-07-22 20:59:34

引用:原帖由 liubinbj 于 2006-7-22 16:01 发表
能玩!也好像没什么bug,建议楼主增加颜色,看着都一样的灰色有点疲劳。还有当前级别显示积分显示,多少分过级后速度加快等等...

鼓励。当然要放出代码来,否则就不够厚道了。 



代码是一定要放的,但不是现在.工作够烦的, 加了一天的班, 刚才抽空改了一个大BUG,再重新发给大家呵呵

[ 本帖最后由 bierdaci 于 2006-7-22 21:02 编辑 ]

block


 bierdaci 回复于:2006-07-22 21:04:52

引用:原帖由 liubinbj 于 2006-7-22 16:01 发表
能玩!也好像没什么bug,建议楼主增加颜色,看着都一样的灰色有点疲劳。还有当前级别显示积分显示,多少分过级后速度加快等等...

鼓励。当然要放出代码来,否则就不够厚道了。 



显示分数还有上一个方块今天晚上如果来的及就加上,目前我设的是5分过级速度加快


 liubinbj 回复于:2006-07-22 22:51:29

发现一个BUG,最大化有问题。
希望下一个版本相对完善!


 rushrush 回复于:2006-07-23 12:59:00

不放代码.. 偶们怀疑你文件里有后门... 哈哈

就先不下载了...


 deiney 回复于:2006-07-23 19:03:37

怎么打开啊?


 gothicane 回复于:2006-07-24 09:23:47

呵呵  好玩    我记得QT里也有个俄罗斯方块的例子


 bierdaci 回复于:2006-07-24 12:37:08

更新啦


 deiney 回复于:2006-07-24 13:10:43

要用什么打开来啊???


 bierdaci 回复于:2006-07-24 17:07:23

引用:原帖由 deiney 于 2006-7-24 13:10 发表
要用什么打开来啊??? 


晕,不会用linux啊
可以直接双击打开,或者在虚拟终端里输入./block,如果提示权限不够,可以chmod +x block


 bierdaci 回复于:2006-08-21 11:01:27

up


 coco520 回复于:2006-08-21 13:14:47

可以玩


 net_robber 回复于:2006-08-21 14:16:14

上班的时候不能玩

下班回家没有网络,不能下载


 bierdaci 回复于:2006-08-21 16:33:34

好像没几个人玩


 epegasus 回复于:2006-08-22 20:17:53

引用:原帖由 rushrush 于 2006-7-23 12:59 发表
不放代码.. 偶们怀疑你文件里有后门... 哈哈

就先不下载了... 


很难说,以前我的机子还好的,自从运行了这个后,就成了肉机,被用来攻击公司的总网关服务器,搞的上面的都找我了,不过可能与这哥们的程序无关,但是这东西,很难讲清楚

[ 本帖最后由 epegasus 于 2006-8-22 20:19 编辑 ]


 bierdaci 回复于:2006-08-23 09:30:29

引用:原帖由 epegasus 于 2006-8-22 20:17 发表

很难说,以前我的机子还好的,自从运行了这个后,就成了肉机,被用来攻击公司的总网关服务器,搞的上面的都找我了,不过可能与这哥们的程序无关,但是这东西,很难讲清楚 



晕,我还没那么牛X呢,代码我发了, 你得替我讲清楚哦


 converse 回复于:2006-08-23 12:46:33

good,支持原创.


 senfe 回复于:2006-08-23 12:55:21

想下载了看看,但是,不允许


 xiaoyao4005 回复于:2006-08-23 19:20:44

我什么时候也能做个游戏玩玩啊 
本人是新手,刚学linux编程,努力学习中。。。。。。。。。




引用:原帖由 bierdaci 于 2006-7-22 13:38 发表
花了三天写了个俄罗斯方块先发过来给大家玩玩,现在功能很简单,代码先不发了,等把网络功能加上了,界面完善了再把代码一起发过来.
如果工作不忙,大概一个星期后就可以发过来了:)


由于最近工作一直很忙,已经没 ... 




 book11 回复于:2006-08-24 10:45:33

我顶你个肺!


 bierdaci 回复于:2006-08-24 11:05:05

引用:原帖由 book11 于 2006-8-24 10:45 发表
我顶你个肺! 



哈哈,我也顶你个肺


 beetleleo 回复于:2006-08-24 15:15:15

辛苦了,呵呵,顶一个


 自由骆驼 回复于:2006-09-06 11:49:07

可以学习用


 liuke432 回复于:2006-09-27 14:43:28

请问楼主 这么多源程序文件 你是用vi编辑,gdb调试的吗?


 bierdaci 回复于:2006-09-27 22:46:09

引用:原帖由 liuke432 于 2006-9-27 14:43 发表
请问楼主 这么多源程序文件 你是用vi编辑,gdb调试的吗? 



是啊, 都沉的没影了竟然又被老兄顶上来了,呵呵


 bill15963 回复于:2006-09-27 22:58:04

怎么不能下载附件?


 wyong 回复于:2006-10-18 13:09:56

下来,研究研究


 bierdaci 回复于:2006-10-18 16:36:52

改了下说明,自己顶下


 bierdaci 回复于:2006-10-19 16:31:08

加了注释自己顶下


 iunotellu 回复于:2006-10-21 18:52:15

为什么提示说我权限不够呢/


 sickcat2004 回复于:2006-12-14 17:30:31

我顶你个肺呀,在CU混两年啦,积分还不够下载这个东东。。。。。。寒。。。


 2eye 回复于:2006-12-14 19:08:58

说是加了注释,没看到有几行注释啊。

看不太明白。
typedef struct _Player          Player;

……

struct _Player {
    int type;
    int status;

    int x, y;
    int direct;

    int grade, old_grade;
    int level;

    int solidify;

    Shape * cur_shape;
    Shape * next_shape;

    Mtime time;
    Mtime speed;
    Mtime slice;

    Block blocks[4];
    Uchar next_matrix[4][4];
    Uchar block_map[BLOCK_MAP_H][BLOCK_MAP_W];

    DataBuffer * event_buf;
};

先typedef然后再定义都可以吗?




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=796501
转载请注明作者名及原文出处



收藏本页到: