某大神网站发现2048一枚

news/2024/5/8 20:22:28/文章来源:https://blog.csdn.net/mayuko2012/article/details/40052401

在论坛发现2048的C语言的源代码。

真心佩服大神的创作。

复制一起学习。

//=============================================================================//Console2048://C语言写的一个手机游戏2048的控制台版。//作者:0xAA55//QQ:838816058//论坛:www.技术宅的结界.com//2048原版作者://Gabriele Cirulli//2048原版网址://http://gabrielecirulli.GitHub.io/2048///=============================================================================#include<time.h>//time#include<stdio.h>//printf,fputc,fputs#include<conio.h>//getch#include<stdlib.h>//rand,srand#include<signal.h>//siginttypedef unsigned int    UINT;//存储矩阵的数字的变量类型#define MATRIX_LINES    4   /*矩阵的行数*/#define MATRIX_ROWS     4   /*矩阵的列数*/#define NEW_BASE        2   /*添加的新数字的最小值*/#define NEW_RANGE       2   /*添加的新数字的范围*/int     g_Quit=0;           //是否退出size_t  g_Score=0;          //分数size_t  g_HighestScore=0;   //最高分数UINT    g_uGameMatrix[MATRIX_LINES][MATRIX_ROWS]={0};//“矩阵”size_t  g_NewX,g_NewY;//最新添加的数字的位置//=============================================================================//ShowMatrix://将“矩阵”显示出来。//-----------------------------------------------------------------------------void ShowMatrix(){size_t x,y;fputs("-------------------------------------------------------------------------------\n",stdout);for(y=0;y<MATRIX_LINES;y++){for(x=0;x<MATRIX_ROWS;x++){if(g_uGameMatrix[y][x]){if(x==g_NewX&&y==g_NewY)//如果这个数是新添加的printf("[%d]\t",g_uGameMatrix[y][x]);//加个方括号elseprintf("%d\t",g_uGameMatrix[y][x]);}elsefputc('\t',stdout);}fputc('\n',stdout);}}//=============================================================================//ShowHowToPlay://将“玩法”显示出来。//-----------------------------------------------------------------------------void ShowHowToPlay(){fputs("-------------------------------------------------------------------------------\n""[W]:move up\n""[S]:move down\n""[A]:move left\n""[D]:move right\n""[X]:Exit\n""HOW TO PLAY: Move the tiles. When two tiles with the same number touch, they\n""merge into one!\n",stdout);}//=============================================================================//ShowStatus://显示状态//-----------------------------------------------------------------------------void ShowStatus(){printf("-------------------------------------------------------------------------------\n""Your score:%d\tHighest score:%d\n",g_Score,g_HighestScore);}//=============================================================================//MoveUp://全部数字往上移,但是不合并//-----------------------------------------------------------------------------int MoveUp(){size_t x,y;unsigned Moves;int Moved=0;do{Moves=0;for(y=1;y<MATRIX_LINES;y++){for(x=0;x<MATRIX_ROWS;x++){UINT*pUpper=&g_uGameMatrix[y-1][x];if(g_uGameMatrix[y][x]&&!*pUpper){*pUpper=g_uGameMatrix[y][x];g_uGameMatrix[y][x]=0;Moves++;Moved=1;continue;}}}}while(Moves);return Moved;}//=============================================================================//CombineUp://全部数字往上合并//-----------------------------------------------------------------------------int CombineUp(){int Moved=0;size_t x,y;for(y=1;y<MATRIX_LINES;y++){for(x=0;x<MATRIX_ROWS;x++){UINT*pUpper=&g_uGameMatrix[y-1][x];if(g_uGameMatrix[y][x]&&g_uGameMatrix[y][x]==*pUpper){g_Score+=*pUpper<<=1;//累加到总分g_uGameMatrix[y][x]=0;Moved=1;continue;}}}return Moved;}//=============================================================================//MoveDown://全部数字往下移//-----------------------------------------------------------------------------int MoveDown(){size_t x,y;unsigned Moves;int Moved=0;do{Moves=0;for(y=MATRIX_LINES-1;y--;){for(x=0;x<MATRIX_ROWS;x++){UINT*pLower=&g_uGameMatrix[y+1][x];if(g_uGameMatrix[y][x]&&!*pLower){*pLower=g_uGameMatrix[y][x];g_uGameMatrix[y][x]=0;Moves++;Moved=1;continue;}}}}while(Moves);return Moved;}//=============================================================================//CombineDown://全部数字往下合并//-----------------------------------------------------------------------------int CombineDown(){int Moved=0;size_t x,y;for(y=MATRIX_LINES-1;y--;){for(x=0;x<MATRIX_ROWS;x++){UINT*pLower=&g_uGameMatrix[y+1][x];if(g_uGameMatrix[y][x]&&g_uGameMatrix[y][x]==*pLower){g_Score+=*pLower<<=1;//累加到总分g_uGameMatrix[y][x]=0;Moved=1;continue;}}}return Moved;}//=============================================================================//MoveLeft://全部数字往左移//-----------------------------------------------------------------------------int MoveLeft(){size_t x,y;unsigned Moves;int Moved=0;do{Moves=0;for(x=1;x<MATRIX_ROWS;x++){for(y=0;y<MATRIX_LINES;y++){UINT*pLeft=&g_uGameMatrix[y][x-1];if(g_uGameMatrix[y][x]&&!*pLeft){*pLeft=g_uGameMatrix[y][x];g_uGameMatrix[y][x]=0;Moves++;Moved=1;continue;}}}}while(Moves);return Moved;}//=============================================================================//CombineLeft://全部数字往左合并//-----------------------------------------------------------------------------int CombineLeft(){int Moved=0;size_t x,y;for(x=1;x<MATRIX_ROWS;x++){for(y=0;y<MATRIX_LINES;y++){UINT*pLeft=&g_uGameMatrix[y][x-1];if(g_uGameMatrix[y][x]&&g_uGameMatrix[y][x]==*pLeft){g_Score+=*pLeft<<=1;//累加到总分g_uGameMatrix[y][x]=0;Moved=1;continue;}}}return Moved;}//=============================================================================//MoveRight://全部数字往右移//-----------------------------------------------------------------------------int MoveRight(){size_t x,y;unsigned Moves;int Moved=0;do{Moves=0;for(x=MATRIX_ROWS-1;x--;){for(y=0;y<MATRIX_LINES;y++){UINT*pRight=&g_uGameMatrix[y][x+1];if(g_uGameMatrix[y][x]&&!*pRight){*pRight=g_uGameMatrix[y][x];g_uGameMatrix[y][x]=0;Moves++;Moved=1;continue;}}}}while(Moves);return Moved;}//=============================================================================//CombineRight://全部数字往右合并//-----------------------------------------------------------------------------int CombineRight(){int Moved=0;size_t x,y;for(x=MATRIX_ROWS-1;x--;){for(y=0;y<MATRIX_LINES;y++){UINT*pRight=&g_uGameMatrix[y][x+1];if(g_uGameMatrix[y][x]&&g_uGameMatrix[y][x]==*pRight){g_Score+=*pRight<<=1;//累加到总分g_uGameMatrix[y][x]=0;Moved=1;continue;}}}return Moved;}//=============================================================================//GetZeroCount://取得零的数量//-----------------------------------------------------------------------------size_t GetZeroCount(){size_t x,y,count=0;for(y=0;y<MATRIX_LINES;y++){for(x=0;x<MATRIX_ROWS;x++){if(!g_uGameMatrix[y][x])count++;}}return count;}//=============================================================================//AddNum://随机找到零然后改成随机的数字,返回非零成功。//-----------------------------------------------------------------------------int AddNum(UINT iNum){size_t ZeroCount=GetZeroCount();//取得零的数量if(ZeroCount){size_t PosAdd=rand()%ZeroCount;//添加的位置(在第X个零处添加)size_t x,y;for(y=0;y<MATRIX_LINES;y++){for(x=0;x<MATRIX_ROWS;x++){if(!g_uGameMatrix[y][x])//找到零{if(!PosAdd)//计数已到{g_uGameMatrix[y][x]=iNum?iNum:NEW_BASE<<(rand()%NEW_RANGE);//添加新数字g_NewX=x;g_NewY=y;return ZeroCount;}PosAdd--;//否则计数还没到。}}}}return 0;}//=============================================================================//GetBiggest://取得最大的数字//-----------------------------------------------------------------------------UINT GetBiggest(){size_t x,y;UINT uBiggest=0;for(y=0;y<MATRIX_LINES;y++){for(x=0;x<MATRIX_ROWS;x++){if(g_uGameMatrix[y][x]>uBiggest)uBiggest=g_uGameMatrix[y][x];}}return uBiggest;}//=============================================================================//NewGame://重置为一场新的游戏//-----------------------------------------------------------------------------void NewGame(){size_t x,y,count=0;for(y=0;y<MATRIX_LINES;y++){for(x=0;x<MATRIX_ROWS;x++)g_uGameMatrix[y][x]=0;}AddNum(0);AddNum(0);g_Score=0;}//=============================================================================//GameOver://判断游戏是否结束,返回1表示游戏结束//-----------------------------------------------------------------------------int GameOver(){size_t x,y;if(GetZeroCount())//还有空位,没有结束return 0;for(y=0;y<MATRIX_LINES;y++){for(x=1;x<MATRIX_ROWS;x++){if(g_uGameMatrix[y][x]==g_uGameMatrix[y][x-1])return 0;//横向有相等的}}for(y=1;y<MATRIX_LINES;y++){for(x=0;x<MATRIX_ROWS;x++){if(g_uGameMatrix[y][x]==g_uGameMatrix[y-1][x])return 0;//纵向有相等的}}return 1;}//=============================================================================//SigProc://信号处理程序//-----------------------------------------------------------------------------void SigProc(int iSig){switch(iSig){case SIGINT:fputs("Ctrl+C catched.\n",stdout);g_Quit=1;break;}}int main(int argc,char**argv){signal(SIGINT,SigProc);srand((unsigned)time(NULL));//先初始化随机数种子,以免每次玩游戏效果都一样。NewGame();do{int Moved=0;if(g_Score>g_HighestScore)g_HighestScore=g_Score;ShowStatus();ShowMatrix();ShowHowToPlay();switch(getch()){case 'w':case 'W':Moved =MoveUp();Moved|=CombineUp();Moved|=MoveUp();break;case 's':case 'S':Moved =MoveDown();Moved|=CombineDown();Moved|=MoveDown();break;case 'a':case 'A':Moved =MoveLeft();Moved|=CombineLeft();Moved|=MoveLeft();break;case 'd':case 'D':Moved =MoveRight();Moved|=CombineRight();Moved|=MoveRight();break;case 'x':case 'X':case 3://getch的时候按下Ctrl+Craise(SIGINT);break;}if(Moved)AddNum(0);//至少要动了才能添加新的数字if(GameOver()){if(g_Score>g_HighestScore)g_HighestScore=g_Score;ShowStatus();ShowMatrix();printf("Game over.\n""Your score is %d.\n",g_Score);fputs("Try again?[Y/N]\n",stdout);AskRetry:   switch(getch()){case 'y':case 'Y':NewGame();break;case 'n':case 'N':case 3://getch的时候按下Ctrl+Craise(SIGINT);g_Quit=1;break;default:goto AskRetry;}}}while(!g_Quit);return 0;}



转自:http://www.0xaa55.com/thread-599-1-1.html

@ Mayuko 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_848795.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分分钟搞定Wordpress网站HTTPS升级

序 自从浏览器开始主动提示网站不安全开始&#xff0c;我就一直想找机会把博客站aTechie做一下升级&#xff0c;终于……终于这次找到机会了&#xff08;太懒了&#xff0c;哈哈哈&#xff09;。 关于HTTPS 先用一张图片来直观展现HTTPS的原理 简单的说&#xff0c;HTTPS的…

ecs 对比 本地服务器_阿里云服务器建站、心选建站、定制建站有什么区别,如何选择...

使用阿里云建网站的三种方式购买云服务器手动建站、云速成美站模板建站或者选择阿里云定制建站三种方式&#xff0c;下面为你们分享利用阿里云建立网站的三种方式及优点对比&#xff1a;服务器阿里云建站方法汇总网站使用阿里云建站能够有三种方式&#xff0c;阿里云第一种是购…

JS--网站统计中的数据收集原理及实现

来源&#xff1a;http://blog.codinglabs.org/articles/how-web-analytics-data-collection-system-work.html 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具&#xff0c;比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访…

某个在线学习网站提交学习进度的方式

没到月底&#xff0c;领导要求我们完成公司网站的学习进度&#xff0c;于是想搞清楚这个在线学习网站更新学习进度的方法&#xff0c;可以快速更新学习进度&#xff0c;算是解决了学习任务的紧迫性。一开始看到一个按键&#xff0c;当学习快结束是&#xff0c;网站会提示”我已…

网站用户登录过程中的cookie的作用

测试一个学习平台项目时&#xff0c;需要验证用户账号是否可以正常登录。使用jmeter工具测试&#xff0c;fiddler辅助查看请求和响应消息。 开始的想法很简单&#xff0c;在登录页面查看到&#xff0c;点击登录按键会出发一个POST请求&#xff0c;想通过jmeter模拟post请求&am…

网站jar包功能分析

agileggfw.agilemgr.jar包引用了HibernateTransactionManager和FreeMarkerViewResolver 还不清楚做什么的 agileggfw.captcha.jar包引用jcaptcha-1.0.jar&#xff0c;作用是生成验证码&#xff1a; JCaptcha 简介 <?xml version"1.0" encoding"UTF-8&qu…

网站引导功能实现

网站新上线一个功能&#xff0c;往往会有一些引导功能&#xff0c;其实很简单&#xff0c;就是一些做好的图片通过css,js控制&#xff0c;拼接在一起。 上一些来自百度网的截图&#xff0c;一看就明白。

每个软件开发人员都应关注的7个网站

1. DEV社区 这是一个伟大的网站&#xff0c;可以随时了解最新技术以及下一轮繁荣。您可以关注自己感兴趣的主题。文章和视频的供稿将根据您的喜好生成。 只需访问网站并搜索您想要探索的技术和概念。您将获得许多相同的文章&#xff0c;视频和播客教程。它的技术新闻版块将使您…

测试基于php的购物网站,基于ThinkPHP开发的购物网站-微淘淘开发笔记

历经半个多月的断断续续的编写&#xff0c;一款基于ThinkPHP的购物网站开发完成并完成了初步的测试检测与修复&#xff0c;这款程序可以称之为到现在为止完全我自己独立编写完成的最大规模的一个 PHP 程序&#xff0c;为其起名叫做微淘淘&#xff0c;随便起的。由于使用的 TP 开…

html页面去空白页,通过Iframe在A网站页面内嵌入空白页面的方式,跨域获取B网站的数据返回给A网站!_html/css_WEB-ITnose...

以下代码只是为演示该方法具体是如何操作的&#xff0c;实际的意义并不大。其实这个方法还可以解决很多方面的跨域操作&#xff0c;以下两点为我工作中遇到的情况&#xff01;比如A系统中打开B系统页面的时候&#xff0c;获取B系统页面高度&#xff0c;A系统中可以动态设置窗口…

程序员本地网站

这道题要求从本地访问&#xff0c;打开burpsuite抓包&#xff0c;加上&#xff1a;X-Forwarded-For: 127.0.0.1 就好了 X-Forwarded-For: 简称XFF头&#xff0c;它代表客户端&#xff0c;也就是HTTP的请求端真实的IP&#xff0c;只有在通过了HTTP 代理或者负载均衡服务器时才会…

推荐几个正经网站,让你的数据结构和算法学习事半功倍!

前言 相信对于大部分程序员来说&#xff0c;数据结构和算法学起来是比较难的&#xff0c;但是它在工作中又是非常的重要&#xff0c;可以说是开发中的一块基石。 所以为了更好的学习和理解数据结构和算法&#xff0c;当时我是趁着双十一搞活动买了几本算法书&#xff0c;打算一…

AboutDNN网站链接交换图标

重新设计一个AboutDNN.com网站的图标。 标准的88*31像素的图标&#xff1a; 图片地址&#xff1a;http://www.aboutdnn.cn/logo/AboutDNN_com_88_31.gif 图片地址&#xff1a;http://www.aboutdnn.cn/logo/aboutdnn_com_120_30.gif 图片地址&#xff1a;http://www.aboutdnn.cn…

介绍一个不错的图书下载网站-顺便推荐几本书

站长肯定是个程序员&#xff0c;因为注册该网站的时候居然要做一程序题&#xff0c;像面试一样&#xff0c;很有意思。这个网站上几乎有所有计算机方面有点名的著作&#xff0c;而且站长非常勤奋&#xff0c;差不多天天都有新书上传。这个站名叫皮皮书屋&#xff0c;地址&#…

大型高性能网站的十项规则【转】

在我们公司ChinaNetCloud&#xff0c;见 过多种不同类型的网站和系统&#xff0c;有好也有差。其中有些系统拥有良好的服务器/网络架构&#xff0c;并且进行了合理的调整和监控 &#xff1b;然而一般的系统都会有安全和性能上的 问题&#xff0c;不能良好运行&#xff0c;也无法…

linux网站服务

文章目录linux网站服务概念名词网站架构静态站点Apache虚拟主机动态网站部署论坛系统discuz部署博客系统wordpresslinux网站服务 概念 名词 HTML HyperText Markup Language超文本标记语言。网页 使用HTML,PHP,JAVA语言格式书写的文件&#xff0c;网页就是服务器把html文件拷…

如何构建一个优秀的移动网站?谷歌专家教你25招(四)[转]

▌16、在需要选择日期的时候&#xff0c;提供一个可视化日历 当用户在移动网站上预定航班时&#xff0c;很难确定“下周的某一天”是几月几号&#xff0c;所以你需要提供一个可视化日历供用户勾选日期。这样用户就不需要离开你的网站&#xff0c;然后在打开手机上的日历App应用…

_00019 Storm架构介绍和Storm获取案例(简单的官方网站Java案例)

博文作者&#xff1a;妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com&#xff08;个人链接&#xff09; 博客地址&#xff1a;http://blog.csdn.net/u012185296博文标题&#xff1a;_00019 Storm的体系结构介绍以及Storm入门案例(官网上的简单Java案例)个性签名&#x…

大数据实训05--网站离线日志分析实战

用户行为分析 是指在获得网站访问量基本数据的情况下&#xff0c;对有关数据进行统计、分析&#xff0c;从中发现用户访问网站的规律&#xff0c;并将这些规律与网络营销策略等相结合&#xff0c;从而发现目前网络营销活动中可能存在的问题&#xff0c; 并为进一步修正或重新制…

科研网站推荐

科研网站推荐学习网站综述参考文献科研工具实用工具流程图二维码学习网站 廖雪峰的官方网站国家自然科学基金委员会项目公布 综述 paper-digest &#xff1a;输入论文DOI号&#xff0c;AI生成文章介绍PAPER DIGEST &#xff1a;输入研究方向&#xff0c;AI寻找相关论文并将其…