13KB的代码能做什么?有些人可是弄出了一个完整的游戏!

大家好,我是TJ

一个励志推荐10000款开源项目与工具的程序员

8f941e64782c1753357829aab54bea54.png

这年头一个程序猿自己开发个小游戏已经不是啥稀罕事,前两天有一个好朋友给TJ君介绍了一款游戏,像素级的,通过键盘操作,有简单的武器系统及多人模式,看上去也算满精致的,TJ君先放一段自己试玩的动图给大伙瞅瞅:

3de5bcec4073573afa6adfd0c224fff6.gif

这款可爱游戏的名字叫做Space Huggers,游戏有不同的关卡,不同的士兵及对应的攻击效果,整体感觉呢是中规中矩,小伙伴们肯定要奇怪了,难道今天TJ君要推荐的就是这款游戏吗?好像。。。太平平无奇了点吧。

的确,这款游戏估计对于一些资深的程序猿来说并不是很难得事情,但这款游戏的特点是在于他的大小

你敢想象这款看上去基本游戏‍功能都完备的游戏,整体容量只有13KB吗?

42430ada54fecb878bc4e168ec3e1b8e.png

对的你没看错,是13KB,不是MB不是GB,是KB!

现在的游戏随着技术的发展动不动就是几十G,前段时间的仙剑7,TJ君买了一个,安装完大概70G的容量吧。

d0d2e998354b3e798963c566b8b4032a.png

虽然说是像素级别的游戏,但是往往也是几百几十MB,13KB?小伙伴们你们多久没下载一张只有13KB的图片了?更别提这13KB里面要完成各种音效、物理效果、重力系统、敌人系统、生命系统,让玩家还能玩的津津有味?

8fb907a0e77bca7a4d4886452bdb22a1.png

网上常看到有人说 贫穷限制了我的想象力,TJ君只想说技术限制了我的想象力。。。

ccdc87ea795af20cb5f608c5ebee8a22.pngd70bef6c8794c47e71b1f272b11580d7.png

毕竟自己做不到不代表别人做不到,对吧?像这样只有13KB大小却能好好玩一番的游戏不止这一个,小伙伴们肯定要奇怪了,怎么大伙都说好了吗?看谁的游戏做的更小?

25ffe627af8d17097279d02106b615f0.png

这么想的小伙伴,恭喜你答对了!其实上面这款游戏来自于2021Js13kGames大赛,这个大赛每年都会举办一次,至今已经举办了10次,参赛要求很简单,只要你能在规定时间内用JavaScript做出一款不大于13KB的HTML游戏即可!

0d045b8c82531f9865a743fe5e8fb363.png 964d1775f01d3658fbbc416e5900530b.png

嗯嗯,上面这个看着还不错的游戏,可是全都是用JavaScript写的哦!想想自己的JavaScript水平,写出来的东西的效果及大小,再看看别人家的,TJ君真是无地自容。。。

fee0abde240f49c80807b6cbaf197e0b.pngcd354e92e28391c07fa57517c1e00a20.png

关于这个大赛,TJ君觉得难点就在于游戏的大小,举办者肯定也是希望参赛者能挑战自己的极限,把大小定在13KB这样一个上世纪的大小,要知道,一个FC游戏的ROM,可能都要比这个大,看看FC上超级马里奥大小:

25a67330ac497f7a33c865e621cc1de5.png

所以对于参赛者来说,也是对自身开发水平的一次极致提炼,TJ君看下来,参赛者往往在以下几个方面进行游戏体积的压缩:

画面

首当其中的,肯定就是游戏画面了,13KB的游戏,基本都是像素或者简单的图片组成的游戏了,比如参赛者会用一些在线的像素图像制造工具,制造自己需要的素材。

声音

画面之后,自然是对声音的处理,一个没有背景音效的游戏难以被称之为一个好的游戏,但是如果需要各种音轨又会徒增游戏的容量,所以同样的,参赛者会找一些可以在线生成简单音效并转化为JavaScript语言的工具,尽量让自己的作品的音效简单而又好听。

引擎

解决了画面和声音之后,就要考虑游戏引擎的问题了,所幸业界专门有一些轻量级的注重小体积的游戏引擎,能满足游戏世界基本的使用需要

除了上述这些方面,开发者还需要关注自己的代码有没有换行之类无用的代码内容,毕竟在13KB面前,要节省一切能节省的空间。

看完这些令人乍舌的方方面面,TJ君也对自己平时编码过程中一些习惯进行了思考,或许在我们平常的开发过程中,对于空间的损耗不需要像这些开发者这样极致的节省,但TJ君觉得平时编写的代码中可以改进的地方还是有不少的。

想更多的了解下这款游戏的源码,想看下到底13KB包含了哪些代码语句的,或者想知道更多其他13KB游戏的,可以关注TJ君回复13KB获取项目开源地址,说不定明年的2022Js13kGames大赛,就能看到你的身影咯!

点击下方卡片,关注公众号“TJ君

回复“13KB”,获取仓库地址

关注我,每天了解一个牛x、好用、有趣的东东

往期推荐

不加班、正常双休过周末,这样的公司有没有?955企业清单大揭秘!

两款自动检测代码工具与插件,开源真香

IDEA高颜值之最吸引小姐姐插件集合!让你成为人群中最靓的那个崽!

开源低代码场景化工作台,自动给你生成代码

完善的仿京东电商开源项目

莆田系医院大揭秘!开源清单、自动提示插件,这个项目样样都有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C语言的KB级数据分包、组包的代码示例: ``` // 数据分包函数 int pack_data(char *data, int data_len, char *pack_buf, int pack_size) { int i, pack_num, last_pack_size, offset; pack_num = data_len / pack_size; last_pack_size = data_len % pack_size; if (last_pack_size > 0) pack_num++; for (i = 0; i < pack_num; i++) { offset = i * pack_size; if (i == pack_num - 1 && last_pack_size > 0) { // 最后一个包不足pack_size字节,填充0 memset(pack_buf + i * pack_size, 0, pack_size); memcpy(pack_buf + i * pack_size, data + offset, last_pack_size); } else { memcpy(pack_buf + i * pack_size, data + offset, pack_size); } } return pack_num; } // 数据组包函数 int unpack_data(char *pack_buf, int pack_num, char *unpack_buf, int pack_size) { int i, data_len, last_pack_size, offset; data_len = (pack_num - 1) * pack_size; last_pack_size = pack_size; if (*(pack_buf + (pack_num - 1) * pack_size) == 0) { last_pack_size = strlen(pack_buf + (pack_num - 1) * pack_size) + 1; } data_len += last_pack_size; for (i = 0; i < pack_num; i++) { offset = i * pack_size; if (i == pack_num - 1 && last_pack_size > 0) { memcpy(unpack_buf + offset, pack_buf + offset, last_pack_size); } else { memcpy(unpack_buf + offset, pack_buf + offset, pack_size); } } return data_len; } ``` 使用示例: ``` #define PACK_SIZE 64 char data[1024] = "This is a test data."; char pack_buf[PACK_SIZE * 16]; char unpack_buf[1024]; int pack_num, unpack_len; pack_num = pack_data(data, strlen(data), pack_buf, PACK_SIZE); printf("pack_num=%d\n", pack_num); unpack_len = unpack_data(pack_buf, pack_num, unpack_buf, PACK_SIZE); printf("unpack_len=%d, unpack_buf=%s\n", unpack_len, unpack_buf); ``` 上述代码中,pack_data函数将data数据分包存储到pack_buf中,每个包大小为PACK_SIZE字节;unpack_data函数将pack_buf中的数据组包存储到unpack_buf中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值