一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符
Jay Chan 用
C 语言写的一个迷你版 2048 游戏,仅仅有 487 个字符。
来围观吧
- M[16],X=16,W,k;main(){T(system("stty cbreak")
- );puts(W&1?
- "WIN":"LOSE");}K[]={2,3,1};s(f,d,i
- ,j,l,P){for(i=4;i--;)for(j=k=l=0;k<4;)j<4?
- P=M
- [w(d,i,j++)],W|=P>>11,l*P&&(f?M[w(d,i,k)]=l<<
- (l==P):0,k++),l=l?P?l-P?P:0:l:P:(f?M[w(d,i,k)
- ]=l:0,++k,W|=2*!l,l=0);}w(d,i,j){return d?w(d
- -1,j,3-i):4*i+j;}T(i){for(i=X+rand()%X;M[i%X]
- *i;i--);i?
- M[i%X]=2<<rand()%2:0;for(W=i=0;i<4;
- )s(0,i++);for(i=X,puts("\e[2J\e[H");i--;i%4||
- puts(""))printf(M[i]?"%4d|":" |",M[i]);W-2
- ||read(0,&k,3)|T(s (1,K[(k>>X)%4]));}
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <time.h>
- #define GRID_LEN 16
- int M[GRID_LEN];
- int X = GRID_LEN;
- int W;
- int k;
- int K[] = { 2, 3, 1 };
- int w (int d, int i, int j)
- {
- if (d <= 0) {
- return 4 * i + j;
- }
- return w (d - 1, j, 3 - i);
- }
- void s (int f, int d)
- {
- int i = 4, j, l, P;
- for (; i--;) {
- j = k = l = 0;
- for (; k < 4;) {
- if (j < 4) {
- P = M[w (d, i, j++)];
- W |= P >> 11;
- l *P && (f ? M[w (d, i, k)] = l << (l == P) : 0, k++);
- l = l ? (P ? (l - P ?
- P : 0) : l) : P;
- }
- else {
- f ? M[w (d, i, k)] = l : 0;
- ++k;
- W |= 2 * !l;
- l = 0;
- }
- }
- }
- }
- void T ()
- {
- int i = X + rand () % X;
- for (; M[i % X] * i; i--);
- i ? M[i % X] = 2 << rand () % 2 : 0;
- W = i = 0;
- for (; i < 4; i++) {
- s (0, i);
- }
- // Prints the tiles onto the terminal
- i = X;
- puts ("\e[2J\e[H");
- for (; i--;) {
- if (M[i]) {
- printf ("%4d|", M[i]);
- } else {
- printf ("%s", " |");
- }
- // every 4th cell is followed by a line-break
- if (0 == (i & 3)) {
- putchar ('\n');
- }
- }
- // read input from keyboard
- if (!(W - 2)) {
- read (0, &k, 3);
- s (1, K[(k >> X) % 4]);
- T ();
- }
- }
- int main (void)
- {
- // Uses stty to clear the screen in preparation for the game
- //system ("stty cbreak");
- /* Intializes random number generator */
- srand ((unsigned) time (NULL));
- T ();
- // Game has finished by this point
- // If win, display "WIN". Otherwise, display "LOSE".
- puts (W & 1 ? "WIN" : "LOSE");
- return 0;
- }
一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符的更多相关文章
- Cocos2d-x 3.x版2048游戏开发
Cocos2d-x 3.x版2048游戏开发 本篇博客给大家介绍怎样高速开发2048这样一款休闲游戏,理解整个2048游戏的开发流程.从本篇博客你将能够学习到下面内容: 这里注明一下,本教程来自极客学 ...
- 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...
- Koa源码解析,带你实现一个迷你版的Koa
前言 本文是我在阅读 Koa 源码后,并实现迷你版 Koa 的过程.如果你使用过 Koa 但不知道内部的原理,我想这篇文章应该能够帮助到你,实现一个迷你版的 Koa 不会很难. 本文会循序渐进的解析内 ...
- ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程
从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...
- php调用一个c语言写的接口问题
用php调用一个c语言写的soap接口时,遇到一个问题:不管提交的数据正确与否,都无法请求到接口 1.用php标准的soap接口去请求 2.拼接xml数据去请求 以上两种方式都不正确 解决办法:php ...
- 用C语言写一个“事件”的模拟程序
源:用C语言写一个“事件”的模拟程序 Example.c //定义一个函数指针 func int (*func) (void); //调用该函数相当于触发了事件. //该事件触发后,会检查函数指针fu ...
- 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(八)
[重构](续) 牌的表示: 一副牌有52张,可用一整数数组描述.但是由于在游戏过程中牌数在不断减少,所以用一表示剩余张数的整数和一整数数组共同描述.C99支持一种变量长度数组,但用在这里并没有什么特别 ...
- 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧拿出来拍啊
花10天时间用C语言做了个小站 http://tieba.yunxunmi.com/index.html 简称: 云贴吧 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧 ...
随机推荐
- 基于Qt的FreeType字体轮廓解析
一.本文目的 以前的文档中.详细的介绍了FreeType开源字体引擎库的基础知识.基本用法.但并未详细的阐明在TurboCG中.是如何解析出一个文字的轮廓的,本文集中阐述.怎么样使用FreeType开 ...
- CSS实现强制换行-------Day 78
事实上最早的时候也考虑过这个问题,当时还在想须要判定文字的长度么,实在是傻到极点了,原来CSS中本来就有这个样式设置的.而今天正好看到了有这么一篇介绍.细致看了下,感觉还不错,这里也把实验的结果记录下 ...
- 【Cocos2d-x游戏引擎开发笔记(25)】XML解析
原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/9128819 XML是一种非常重要的文件格式,由于C++对XML的支持非常完善 ...
- windows api 梳理
PathMatchSpec Function Searches a string using a Microsoft MS-DOS wild card match type. Syntax BOOL ...
- Android 系统api实现定位及使用百度提供的api来实现定位
目前在国内使用定位的方法主要是 1. Android系统提供的 LocationManager locationManager = (LocationManager) getSystemService ...
- EasyUI - 一般处理程序 返回 Json值
使用 一般处理程序(ashx)返回Json值. 原始Json数组的格式: [ { ", "name":"张三", "sex":&q ...
- Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码
主要难点在于设置recv()与send()的超时时间,具体要注意的事项,请看代码注释部分,下面是代码: #include <stdio.h> #include <sys/types. ...
- iTextSharp使用字体设置摘录
用iTextSharp做pdf转换的时候,需要添加水印.文字水印的时候,需要设置字体,查了下文档.摘录下解决方案. iText中输出中文,有三种方式: 1.使用iTextAsian.jar中的字体 ...
- 我是如何同时拿到阿里和腾讯offer的
前言 三月真是一个忙碌的季节,刚刚开学就需要准备各种面试和笔试(鄙视).幸运的是,在长达一个月的面试内推季之后,终于同时拿到了阿里和腾讯的offer,还是挺开心的.突而想起久未更新的博客,就冒昧学一学 ...
- android.graphics.Color
该类定义的都是些static常量和函数,这些函数都是为了创建和转化成int型的color.颜色是由int型的数表示,由4个字节组成,分别是A R G B,这个int型的值是确定的,透明度的值只能存 ...