C语言-实现2048控制台版和图形界面版

2017.1 远古demo
控制台版
效果
EasyX图形界面版
在这里插入图片描述

代码段 https://github.com/PorYoung/PublicRepository/blob/master/2048_console.cpp

/************************************************************************************************************************
文件名称:main.c
文件描述:实现控制台的2048逻辑代码
编译环境:vs2015
最后修改:
<2017.1.8> <最后一次修改23:38 依然存在算法上的问题,在上下左右当中> <修改者:PorYoung>
<最近修改:2017.1.9 算法问题待定,另发现生成2和4时存在bug,整体有待优化><修改者:PorYoung>
<优化思路:①代码优化,减少函数个数;②功能优化:增加撤销功能,自动走一步功能;③算法优化:生成算法优化、移动、加法优化>
<唯一遗憾的是算法没有模块化,代码没有精简,先把存货放出来,之后有时间再慢慢修改完善吧>
*************************************************************************************************************************/#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>void Add(int dir);
void Print();
int map[4][4] = { { 0,0,0,0 }, };
void MoveRight();
void MoveLeft();
void MoveUp();
void MoveDown();void Print()
{printf("\t\t\t\t*Welcome to 2048*\n");printf("\t\t*use     to play; press \"esc\" to reset*\n");printf("\t\t\t┏━━━┳━━━┳━━━┳━━━┓\n");printf("\t\t\t┃%4d\t┃%4d\t┃%4d\t┃%4d\t┃\n", map[0][0], map[0][1], map[0][2], map[0][3]);printf("\t\t\t┃\t┃\t┃\t┃\t┃\n");printf("\t\t\t┣━━━╋━━━╋━━━╋━━━┫\n");printf("\t\t\t┃\t┃\t┃\t┃\t┃\n");printf("\t\t\t┃%4d\t┃%4d\t┃%4d\t┃%4d\t┃\n", map[1][0], map[1][1], map[1][2], map[1][3]);printf("\t\t\t┣━━━╋━━━╋━━━╋━━━┫\n");printf("\t\t\t┃\t┃\t┃\t┃\t┃\n");printf("\t\t\t┃%4d\t┃%4d\t┃%4d\t┃%4d\t┃\n", map[2][0], map[2][1], map[2][2], map[2][3]);printf("\t\t\t┣━━━╋━━━╋━━━╋━━━┫\n");printf("\t\t\t┃\t┃\t┃\t┃\t┃\n");printf("\t\t\t┃%4d\t┃%4d\t┃%4d\t┃%4d\t┃\n", map[3][0], map[3][1], map[3][2], map[3][3]);printf("\t\t\t┗━━━┻━━━┻━━━┻━━━┛\n");}void Add(int dir) //第一次进入界面 dir=0; 上 dir=1; 下 dir=2; 左 dir=3; 右 dir=4
{srand((unsigned int)time(NULL));	//随机数int num, flag;	//2,4int row, col;row = rand() % 4;	//0-3col = rand() % 4;	//0-3flag = rand() % 2;	//flag 0 1if (flag == 0)num = 2;elsenum = 4;switch (dir){case 0:map[row][col] = num; break;case 1://if (map[3][col] == 0){map[3][col] = num;}else{for (col = 0; col < 4; col)if (map[3][col] == 0) break;}break;case 2://if (map[0][col] == 0){map[0][col] = num;}else{for (col = 0; col < 4; col++){if (map[0][col] == 0) break;}}break;case 3://if (map[row][14] == 0){map[row][15] = num;}else{for (row = 0; row < 4; row++){if (map[row][16] == 0) break;         /*有疑问!!!*/}}break;case 4://if (map[row][0] == 0){map[row][0] = num;}else{for (row = 0; row < 4; row++){if (map[row][0] == 0) break;}}break;}
}//控制函数
void Move()
{char ch;int row, col;ch = _getch();switch (ch){case 72://MoveUp();break;case 80://MoveDown();break;case 75://MoveLeft();break;case 77://MoveRight();break;case 27://重置{for (row = 0; row < 4; row++){for (col = 0; col < 4; col++){map[row][col] = 0;}}Add(0);}}system("cls");
}void MoveUp()
{int temp, row, col;for (col = 0; col < 4; col++){int n = 4;while (n--){for (row = 0; row < 3; row++){if (map[row][col] == 0){for (temp = row; temp < 3; temp++){map[temp][col] = map[temp + 1][col];map[temp + 1][col] = 0;}}}}//实现加法for (row = 0; row < 3; row++){if (map[row][col] == map[row + 1][col]){map[row][col] = map[row][col] * 2;map[row + 1][col] = 0;for (temp = row + 1; temp < 3; temp++){map[temp][col] = map[temp + 1][col];map[temp + 1][col] = 0;}}}}Add(1);
}void MoveDown()
{int row, col, temp;for (col = 0; col < 4; col++){int n = 4;while (n--){for (row = 3; row > 0; row--){if (map[row][col] == 0){for (temp = row; temp > 0; temp--){map[temp][col] = map[temp - 1][col];map[temp - 1][col] = 0;}}}}//加法操作for (row = 3; row > 0; row--){if (map[row][col] == map[row - 1][col]){map[row][col] = map[row][col] * 2;map[row - 1][col] = 0;for (temp = row - 1; temp > 0; temp--){map[temp][col] = map[temp - 1][col];map[temp - 1][col] = 0;}}}}Add(2);
}void MoveLeft()
{int row, col, temp;for (row = 0; row < 4; row++){int n = 4;while (n--){for (col = 0; col < 4; col++){if (map[row][col] == 0){for (temp = col; temp < 3; temp++){map[row][temp] = map[row][temp + 1];map[row][temp + 1] = 0;}}}}//加法操作for (col = 0; col < 3; col++){if (map[row][col] == map[row][col + 1]){map[row][col] = map[row][col] * 2;map[row][col + 1] = 0;for (temp = col + 1; temp < 3; temp++){map[row][temp] = map[row][temp + 1];map[row][temp + 1] = 0;}}}}Add(3);
}void MoveRight()
{int row, col, temp;for (row = 0; row < 4; row++){int n = 4;while (n--){for (col = 3; col > 0; col--){if (map[row][col] == 0){for (temp = col; temp > 0; temp--){map[row][temp] = map[row][temp - 1];map[row][temp - 1] = 0;}}}}//加法操作for (col = 3; col > 0; col--){if (map[row][col] == map[row][col - 1]){map[row][col] = map[row][col] * 2;map[row][col - 1] = 0;for (temp = col - 1; temp > 0; temp--){map[row][temp] = map[row][temp - 1];map[row][temp - 1] = 0;}}}}Add(4);
}int main(void)
{printf("程序正在启动,请稍后......\n");Add(0);printf("按任意键开始游戏\n");_getch();Print();while (1){Move();Print();}return 0;
}
/*************************************
工程名称:2048图形界面版
创建时间:2017.1.19
编译环境:VS2015
创建者:PorYoung
**************************************/#include "graphics.h"
#include "conio.h"
#include "stdlib.h"
#include "time.h"
#include "windows.h"
#include "resource.h" 
#include "stdio.h"IMAGE bkImg;
int maps[4][4] = { 0 };
char str[4];
int temp = 0;		//游戏状态	void gameShow();
int numShow();	//随机生成2或4
void gamePlay();
//void judge();//4*4界面
void gameShow()
{if (temp == 0){for (int i = 0; i < 4; i++)for (int j = 0; j < 4; j++)maps[i][j] = 0;int x, y;x = rand() % 10 % 4;y = rand() % 10 % 4;maps[x][y] = numShow();temp = 1;}BeginBatchDraw();//putimage(0, 0, &bkImg);for (int i = 1; i < 4; i++){setlinecolor(RGB(125, 125, 125));line(86, 40 + 80 * i, 415, 40 + 80 * i);line(88 + 82 * i, 40, 88 + 82 * i, 358);}for (int i = 0, x = 106, y = 60; i < 4; i++){for (int j = 0; j < 4; j++){sprintf(str, "%d", maps[i][j]);setbkmode(TRANSPARENT);settextcolor(RGB(25, 65, 125));settextstyle(40, 10, "微软雅黑");outtextxy(x, y, str);x += 80;if (x >= 400){y += 82;x = 106;}}}EndBatchDraw();
}int numShow()
{int r = rand() % 10, num;if (r < 5)	num = 2;else num = 4;return num;
}void gamePlay()
{void upPlay();void downPlay();void leftPlay();void rightPlay();Sleep(100);char ch = _getch();switch (ch){case 72:upPlay();break;	//上case 80:downPlay();break;	//下case 75:leftPlay();break;	//左case 77:rightPlay();break;	//右case 'r':case 'R':temp = 0;break;}
}void upPlay()
{int row, col;//移动	for (col = 0; col < 4; col++){int i = 3;while (i--){for (row = 0; row < 3; row++){if (maps[row][col] == 0){maps[row][col] = maps[row + 1][col];maps[row + 1][col] = 0;}}}}//相加for (col = 0; col < 4; col++){int i = 3;while (i--){for (row = 0; row < 3; row++){if (maps[row][col] == maps[row + 1][col]){maps[row][col] *= 2;maps[row + 1][col] = 0;}}}}//移动for (col = 0; col < 4; col++){int i = 3;while (i--){for (row = 0; row < 3; row++){if (maps[row][col] == 0){maps[row][col] = maps[row + 1][col];maps[row + 1][col] = 0;}}}}//新数字row = 3;		//加不加无所谓do{col = rand() % 10 % 4;} while (maps[row][col] != 0);maps[row][col] = numShow();
}void downPlay()
{int row, col;//移动	for (col = 0; col < 4; col++){int i = 3;while (i--){for (row = 3; row > 0; row--){if (maps[row][col] == 0){maps[row][col] = maps[row - 1][col];maps[row - 1][col] = 0;}}}}//相加for (col = 0; col < 4; col++){int i = 3;while (i--){for (row = 3; row > 0; row--){if (maps[row][col] == maps[row - 1][col]){maps[row][col] *= 2;maps[row - 1][col] = 0;}}}}//移动for (col = 0; col < 4; col++){int i = 3;while (i--){for (row = 3; row > 0; row--){if (maps[row][col] == 0){maps[row][col] = maps[row - 1][col];maps[row - 1][col] = 0;}}}}//新数字row = 0;do{col = rand() % 10 % 4;} while (maps[row][col] != 0);maps[row][col] = numShow();
}void leftPlay()
{int row, col;//移动	for (row = 0; row < 4; row++){int i = 3;while (i--){for (col = 0; col < 3; col++){if (maps[row][col] == 0){maps[row][col] = maps[row][col + 1];maps[row][col + 1] = 0;}}}}//相加for (row = 0; row < 4; row++){int i = 3;while (i--){for (col = 0; col < 3; col++){if (maps[row][col] == maps[row][col + 1]){maps[row][col] *= 2;maps[row][col + 1] = 0;}}}}//移动for (row = 0; row < 4; row++){int i = 3;while (i--){for (col = 0; col < 3; col++){if (maps[row][col] == 0){maps[row][col] = maps[row][col + 1];maps[row][col + 1] = 0;}}}//新数字col = 3;		//加不加无所谓do{row = rand() % 10 % 4;} while (maps[row][col] != 0);maps[row][col] = numShow();}
}void rightPlay()
{int row, col;//移动	for (row = 0; row < 4; row++){int i = 3;while (i--){for (col = 3; col > 0; col--){if (maps[row][col] == 0){maps[row][col] = maps[row][col - 1];maps[row][col - 1] = 0;}}}}//相加for (row = 0; row < 4; row++){int i = 3;while (i--){for (col = 3; col > 0; col--){if (maps[row][col] == maps[row][col - 1]){maps[row][col] *= 2;maps[row][col - 1] = 0;}}}}//移动for (row = 0; row < 4; row++){int i = 3;while (i--){for (col = 3; col > 0; col--){if (maps[row][col] == 0){maps[row][col] = maps[row][col - 1];maps[row][col - 1] = 0;}}}}//新数字col = 0;do{row = rand() % 10 % 4;} while (maps[row][col] != 0);maps[row][col] = numShow();
}/*void judge()
{//判断是否结束int row, col, num = 0;for (row = 0; row < 4; row += 3)for (col = 0; col < 4; col++){if (maps[row][col] != 0) num++;}for (col = 0; col < 4; col += 3)for (row = 0; row < 4; row++){if (maps[row][col] != 0) num++;}if (num == 16){setbkcolor(RGB(255, 255, 255));clearrectangle(88, 48, 412, 358);settextcolor(RGB(255, 100, 155));outtextxy(200, 170, "游戏结束!");Sleep(3000);temp = 0;clearrectangle(88, 48, 412, 358);}
}*/                //有bug,可不要int main()
{initgraph(500, 400);loadimage(&bkImg, "IMAGE", MAKEINTRESOURCE(IDR_IMAGE1), 500, 400);putimage(0, 0, &bkImg);srand((unsigned int)time(NULL));while (1){gameShow();gamePlay();setbkcolor(RGB(255, 255, 255));clearrectangle(88, 48, 412, 358);setlinecolor(RED);rectangle(235, 365, 260, 385);	//准备增加点击事件}
}

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

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

相关文章

DNF台版云服务器搭建(非商用,可联机)

DNF台版云服务器搭建 该教程结合网上大佬的教程和自己搭建过程中遇到的问题所写 文章中出现的文件都将通过百度网盘分享&#xff0c;各个版本的pvf及其配套客户端需要自己寻找哦 百度网盘链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/14Az9oRvtQwWWoGv7SI0KIQ?pw…

java——双色球控制台版

双色球控制台版 技术需要 双重数组for、while循环if switch 分支判断break continue 循环控制 时间不够再打一边电子档&#xff0c; 如果大家有问题可以私聊或者留言问我&#xff0c; 电子版有点乱&#xff0c;(。・&#xff3f;・。)&#xff89;I’m sorry~ 整体代码在…

postgresql windows下修改帐号密码 (图文)

重新设置postgres用户的密码方法&#xff1a; 1、关闭数据库服务 2、进入数据库的工作空间目录 (如果是建库是没有另外指定&#xff0c;应该就是postgresql安装目录下的 data 目录) 3、编辑修改文件 pg_hba.conf&#xff0c; 把连接权限设置的 md5 加密方式 改成 trust&#xf…

PostgreSQL登录及修改密码

PostgreSQL登录 1、可通过客户端pgAdmin III直接登录 通过pgAdmin III登录PG库 2、可通过命令行 命令&#xff1a;psql -h 10.10.10.10 -U user -d postgres -p 5570 1 -h&#xff1a;数据库IP -U&#xff1a;登录用户 -d&#xff1a;登录的数据库 -p&#xff1a;登录…

现在的Android开发已经到了必须要转行的时候吗?

前言 最近&#xff0c;有位好友问我这么一个问题&#xff1a; “我做 Android 开发两年多时间了&#xff0c;但是最近总是很焦虑&#xff0c;看着人工智能越来越火&#xff0c;很担心 Android 要不行了&#xff0c;想问下&#xff0c;我现在要转行么&#xff1f;Android 还可以…

【论文写作】英文写作工具推荐及使用教程:DeepL(翻译) + EasyEssay(扩写) + QuillBot(改写润色)

文章目录 一、DeepL二、EasyEssay2.1 润写2.2 扩写2.3 生成文章2.4 英文查重 三、QuillBot 一、DeepL DeepL官网 DeepL的主要作用是翻译&#xff0c;一开始我也是在B站上看到有人推荐用这款翻译工具的&#xff0c;抱着试一试的心态去用了一下&#xff0c;感觉翻译效果真的很不错…

句子的改写和扩写

目录 1.句子改写 2.句子扩写 &#xff08;不低于15个句子算是长句子&#xff0c;不能太多长句子&#xff09; 1.句子改写 我绝不会嫁给你的。 如果你是世界上最后一个男人&#xff0c;我就去寺庙。 If you married me,I would jump into the well. 如果你嫁给我&#xff0c;我…

new bing移动端已上线、notion.ai也不用排队了

您好&#xff0c;这是Bing。 感谢您对新Bing的关注。 新Bing是一种新型的搜索引擎&#xff0c;它不仅提供相关的链接&#xff0c;还能整合网络上可靠的来源&#xff0c;给您一个简明的答案。 您可以用自然语言进行搜索&#xff0c;Bing会根据您的复杂问题分享详细的回答。 ​ ​…

解决newbing提示“今日你已达到今天的对话限制, 登录以继续你的聊天”和bing没有聊天对话框的问题

这几天想用newbing帮我收集一些数据集&#xff0c;但是我科学上网之后进入www.bing.com仍然没有弹出聊天选项。上网找了一些方法&#xff0c;让我清除cookie和更改微软账号地区设置。“聊天”框可以弹出了&#xff0c;但是一聊天就提示“今日你已达到今天的对话限制&#xff0c…

求助帖:转行1年,薪资多少才算高?

来源网络&#xff0c;如侵删 求助帖 自学转行&#xff0c;经验未满1年的产品经理&#xff0c;薪资范围应该是多少&#xff0c;薪资多少才算高&#xff1f; 昨天&#xff0c;播妞在网上收集素材的时候&#xff0c;突然发现了一个求助帖。留言区议论纷纷&#xff0c;其中有一条留…

腾讯月薪60k招程序员,看到要求我傻眼了!

作为一名程序员&#xff0c;天生崇拜写代码能力强的程序大佬。但是&#xff0c;只要写代码能力足够强&#xff0c;就能在职业发展道路畅行无阻吗&#xff1f; 答案当然是&#xff1a;NO&#xff01;你还需要有项目管理的能力。 产品经理天天不干正事&#xff0c;提的需求没头没…

销售真不是人干的事,从底薪3K到转行程序员年薪24W+,给想转行的你

26岁&#xff0c;做了6年销售&#xff0c;我决定放弃销售行业转行技术类&#xff01; 从读大专出来&#xff0c;就校招进了一家湖南长沙的销售公司&#xff0c;兜兜转转在这个行业一待就是六年&#xff0c; 如果你也是刚毕业的大学生&#xff0c;我劝你千万不要做销售&#xf…

程序员真实调查,工资真的高吗?反正我的不高

想要看更加舒服的排版、更加准时的推送 关注公众号“不太灵光的程序员” 每日八点有干货推送 全球约有1850万程序员&#xff0c;中国占10%&#xff0c;随着“互联网”、“云计算”以及“智能硬件”等领域发展迅速&#xff0c;程序员再次迎来第二春&#xff01; 为此&#xff0c…

淘宝商品评论接口

Request address: //api.onebound.cn/taobao/api_call.php? num_iid525248995106&data&page1&api_nameitem_review&langzh-CN Result Object: { “items”: { “total_results”: “1020466”, “page_size”: “10”, “page”: “1”, “item”: [ { “ra…

淘宝、天猫评论如何抓取?

一、原理 以天猫为例 首先在浏览器地址栏中输入https://www.tmall.com/打开天猫商城&#xff0c;任意检索某一商品&#xff0c;以手机为例&#xff0c;搜索结果如下图所示&#xff1a; 任意点开其中的某个商品&#xff1a; 我们直奔主题找到红框范围内的&#xff1a;累计评价…

淘宝差评回复模板,最新最全差评回复话术

**淘宝差评回复模板**&#xff0c;最新最全差评回复话术有哪些&#xff1f;我们都知道&#xff0c;做电商就一定离不开淘宝&#xff0c;相信很多淘宝卖家都希望得到如潮的好评&#xff0c;而不希望店铺下面的评价出现差评。差评会影响客户的购买&#xff0c;也会降低店铺整体信…

AI 在编程、写作、绘画领域的占卜:从 GitHub Copilot 到 ChatGPT,再到 Stable Diffusion...

PS&#xff1a;就当前节点&#xff08;2023.02.22&#xff09;而言&#xff0c;我虽然研究过一段时间传统的机器学习&#xff0c;但是并不擅长深度学习等领域&#xff0c;所以很多 AI 领域相关的词汇&#xff0c;我是不擅长的&#xff0c;只为自己总结一下&#xff0c;方便在未…

助力研发效能变革,第七届Techo TVP 开发者峰会圆满落下帷幕

引言 在互联网数字企业结束“野蛮扩张”、追求高质量增长的今天&#xff0c;研发效能已然成为企业关注的核心命题。伴随着云原生概念在软件领域的落地生根&#xff0c;云原生正驱动软件应用设计、实现、部署及运维方式的巨变&#xff0c;为研发效能治理带来了新的挑战与机遇&am…

创新源于生活,赋能实践 | Next-Gen GPT 开启技术风暴新纪元

点击上方蓝字 关注我们 &#xff08;本文阅读时间&#xff1a;15分钟) 文末有惊喜 大家好&#xff01;我是爱吃、爱玩、更爱学习技术&#xff0c;IT界新晋小红人&#xff0c;开发者的好朋友——比特熊&#xff01; 今天是我们【比特熊故事汇2.0】AOAI的特别专场&#xff0c;我们…

当DevOps遇到AI,黑马迎来3.0时代丨IDCF

随着GhatGPT的爆火&#xff0c;人工智能和研发效能&#xff0c;无疑成为了2023的两个最重要的关键词。大规模语言模型LLM和相关应用的快速发展正在对研发团队的工作方式产生深远影响&#xff0c;这几乎象征着新的生产力革命的到来。 那么&#xff0c;作为一名工程师&#xff0…