分类目录归档:我的代码

Tomb Raider – Room 151

我的数据结构大作业完成了,一个叫做Tomb Raider – Room 151的游戏,中文译名可以为盗墓者-151室。
当前发布的仅为游戏的demo版本,欢迎帮忙测试找bug,程序附带源代码!

110305修改:
1、互联网多人游戏。
2、联网聊天功能,系统消息。
3、迷宫地图自动生成器,生成了20关地图。
4、优化联网速度,使用脏列表,网络中传输每帧需要重绘的对象。
5、更成熟的复活功能。
6、Ghost、Pharaoh变得更精明。

110301修正bug:
1、单人游戏的时候隐藏的witch不会动。
2、挂掉了仍然可以装雷。
3、去掉Explosion对象,爆炸时候不会增加额外Object数目。
4、优化A*算法,去除不必要的检查。

Room 151 Network 110305 (Win32 Binary & Source Code)

运行平台: Windows XP、Vista、7
开发环境:Codelite、libSDL

玩法很简单。
Ctrl:佩剑
Alt:手枪
Space:安装定时炸弹
方向键:行走

可以联网合作游戏,进入游戏默认为单人模式,F3切换到服务器模式,F2切换到客户端模式。
命令行下执行可以加入一些参数:xxtomb [-m GameMode] [-p PlayerName] [-h HostToConnect]
GameMode可取0:单人游戏,1:服务器模式,2:客户端模式。

附带几张游戏相关的图:


继续阅读

xxftp:写了一个功能比较全面的FTP服务器小程序

新版本链接:再次400多行Python代码实现了一个FTP服务器

xxftp WIN32可执行文件及源代码下载地址:xxftp20110217

如有需要,可自行编译Linux版本!

笔记:
已经写了很多个FTPServer了。。。可以说是滚瓜烂熟,代码都可以背出来!
记得上次那个是用C#写的,不怎么好用,又吃内存,又吃CPU!
这次采用多线程写的xxftp,体积不到64KB,运行一段时间之后才占用几MB的内存,而且很好用!
对于像我这样做免费服务又节约资源的站长,适合的才是最好的!

每写一次FTPServer,较之前都有很大的,思路一次比一次清晰,代码一次比一次好看,功能一次比一次强大!
这次增加了OPTS,FEAT,EPSV,EPRT,MTDM等命令,详见源代码中的ftp.h。

这次的服务器模型跟之前写homeserver是不同的,这次不是很注重并发响应能力。之前的homeserver在启动的时候就初始化了足够的线程来等待用户请求,避免响应迟钝的现象。而xxftp服务器运行时候,启动一个守护线程用来回收超时或者已经结束的FTP连接,启动一个监听线程等待用户连接。当有连接请求时,创建一个connection对象和对应的线程去处理用户请求。
继续阅读

xxfpm: 写了一个小巧的FastCGI进程管理器

经测试,支持Win32和Linux-x86平台。对于用php的人,有了这个东西来维护一定数量的进程,就能制服经常崩溃退出的php-cgi啦!!!

Usage: xxfpm path [-n number] [-i ip] [-p port]
Manage FastCGI processes.

-n, –number number of processes to keep
-i, –ip ip address to bind
-p, –port port to bind, default is 8000
-u, –user start processes using specified linux user
-g, –group start processes using specified linux group
-r, –root change root direcotry for the processes
-h, –help output usage information and exit
-v, –version output version information and exit

第一个写得比较标准的终端应用程序,我是看了cygwin的里的一些源代码,然后学会了如何使用getopt,算是写得比较标准的,但是代码也不短。

使用例子:
xxfpm z:/php5/php-cgi.exe -n 5 -p 8080

有人问,如何给程序加入参数?这个不难,使用双引号即可,路径要用”/”而不用”\”。例如要指定php.ini的路径,可以用下面例子:
xxfpm “z:/php5/php-cgi.exe -c z:/php5/php.ini” -n 5 -i 127.0.0.1 -p 8080

继续阅读

高斯消元求解线性方程组(C++)

大一的时候在线性代数课程里学过,要选择列中最大的数作为pivot,目的是为了减少计算中产生的误差,昨晚自己写了一遍代码,发现果然如此。实践一下,更有助于学习!

测试数据:

A:
1.00 2.00 1.00 4.00
2.00 0.00 4.00 3.00
4.00 2.00 2.00 1.00
-3.00 1.00 3.00 2.00

B:
13.00
28.00
20.00
6.00

C=B/A:
3.00
-1.00
4.00
2.00

D=A*B:
113.00
124.00
154.00
61.00

继续阅读

用纯C面向过程写icefox3的代码

6月底在Ubuntu下写了个框架,这几天发现写不下去了,又重新用Codelite组建了一次代码。还是采用纯C的代码,和以前的一些代码不同之处是,这次不打算使用面向对象的思想去指导我的代码,取以代之的是马列主义和毛泽东思想。似乎觉得面向过程更适合使用异步的socket,所以这次也没必要用到多线程编程了。

其实,我一直很赞成多线程编程在大多数时候能够把很复杂的东西变得很简单,只要能把资源管理好即可。而基于事件响应的编程通常连写一个最简单的ftp服务器程序都会变得异常复杂,尤其在使用非阻塞socket的时候。我所指的复杂和简单是针对建模和代码构建方面,而不是在代码量上。阅读一个多线程ftp服务器源代码比一个单线程异步的ftp服务器源代码要轻松得多。多线程的时候你只需要知道一个线程要做什么,其它的线程都是做相同的东西了。而且这些线程的工作都是有很严谨的执行顺序,先做什么后做什么。但是单线程异步的时候情况就不同了,往往一个线程在处理一个连接请求的时候又突然进入了等待状态,而紧接着又跑去了执行别的代码,这样一来你就不容易看出程序的执行次序和所做工作的流程图。

继续阅读

晚上写了个FastCGI进程管理器

之前一直使用单个进程都php-cgi。存在一个很严重都问题就是,php-cgi不稳定导致程序异常退出时,需要外部程序重新启动php-cgi。而且因为socket还要等待一段时间才能断开,所以要等一段时间(大概30多秒)才能重新启动成功。这样就产生了一段时间无法使用php都网页,很是烦恼。之前就一直想写一个php-cgi都进程管理器。
继续阅读

HTTP优化:使用gzip压缩所有文本文件

众所周知,wordpress实在是太大了,文件也多。使用syntaxhighlighter后,还多了一堆js文件。很有必要在文件传输上进行一下优化。
一般像搜索引擎等访问量大的页面都会使用到页面压缩以减少流量和减少服务器负担。通常采用的方法是在HTTP头里加入Content-Encoding选项。
一个典型的HTTP请求:

GET / HTTP/1.1
Host: xiaoxia.org
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 Chrome/6.0.472.63 Safari/534.3
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
If-Modified-Since: Tue, 19 Oct 2010 04:33:34 GMT

继续阅读