简单的C语言编程学习打造—简单的2048小游戏
C语言是面向过程的,而C++是面向对象的
C和C++的区别:
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。
2048这个游戏,在之前我完全是沉迷的,但是用C语言做出来真的也很简单哈,就说一些简简单单的知识点,什么数组啊,条件选择,循环等等,这些都很简单,但是思路真的很重要,我下面就直接把全部的代码发一下吧,希望看了就不复制黏贴了,要看懂思路哈
小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
这些是C/C++能做的
服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等
#include
#include
#include
#include
#include
int MAP[4][4], gre;
void Add(int n)
{
srand((unsigned int)time(0)); //
int num = rand();
int tf = num % 2;
int x, y, i;
x = num % 4;
srand((unsigned int)time(0) + (unsigned int)num);
y = rand();
y %= 4;
if (tf)
num = 2;
else
num = 4;
if (n == 0)
{
MAP[x][y] = num;
}
else if (n == 1)
{
if (MAP[3][y] == 0)
MAP[3][y] = num;
else
for (i = 0; i < 4; i++)
if (MAP[3][i] == 0)
{
MAP[3][i] = num;
break;
}
}
else if (n == 2)
{
if (MAP[0][y] == 0)
MAP[0][y] = num;
else
for (i = 0; i < 4; i++)
if (MAP[0][i] == 0)
{
MAP[0][i] = num;
break;
}
}
else if (n == 3)
{
if (MAP[x][3] == 0)
MAP[x][3] = num;
else
for (i = 0; i < 4; i++)
if (MAP[i][3] == 0)
{
MAP[i][3] = num;
break;
}
}
else if (n == 4)
{
if (MAP[x][0] == 0)
MAP[x][0] = num;
else
for (i = 0; i < 4; i++)
if (MAP[i][0] == 0)
{
MAP[i][0] = num;
break;
}
}
}
int Moveup(void)
{
int i, k, t;
int tf = 0;
for (k = 0; k < 4; k++)
{
int n = 4;
while (n--)
for (i = 0; i < 3; i++)
if (MAP[i][k] == 0)
{
for (t = i; t < 3; t++)
{
MAP[t][k] = MAP[t + 1][k];
MAP[t + 1][k] = 0;
tf = 1;
}
}
for (i = 0; i < 3; i++)
{
if (MAP[i][k] == MAP[i + 1][k])
{
MAP[i][k] *= 2;
gre += MAP[i][k];
if (MAP[i][k] == 2048)
return 0;
for (t = i + 1; t < 3; t++)
{
MAP[t][k] = MAP[t + 1][k];
MAP[t + 1][k] = 0;
tf = 1;
}
}
}
}
if (tf)
Add(1);
return 1;
}
int Movedown(void)
{
int i, k, t;
int tf = 0;
for (k = 0; k < 4; k++)
{
int n = 4;
while (n--)
for (i = 3; i > 0; i--)
if (MAP[i][k] == 0)
{
for (t = i; t > 0; t--)
小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
{
MAP[t][k] = MAP[t - 1][k];
MAP[t - 1][k] = 0;
tf = 1;
}
}
for (i = 3; i > 0; i--)
{
if (MAP[i][k] == MAP[i - 1][k])
{
MAP[i][k] *= 2;
gre += MAP[i][k];
if (MAP[i][k] == 2048)
return 0;
for (t = i - 1; t > 0; t--)
{
MAP[t][k] = MAP[t - 1][k];
MAP[t - 1][k] = 0;
tf = 1;
}
}
}
}
if (tf)
Add(2);
return 1;
}
int Moveleft(void)
{
int i, k, t;
for (i = 0; i < 4; i++)
{
int n = 4;
while (n--)
for (k = 0; k < 3; k++)
{
if (MAP[i][k] == 0)
for (t = k; t < 3; t++)
{
MAP[i][t] = MAP[i][t + 1];
MAP[i][t + 1] = 0;
}
}
for (k = 0; k < 3; k++)
{
if (MAP[i][k] == MAP[i][k + 1])
{
MAP[i][k] *= 2;
gre += MAP[i][k];
if (MAP[i][k] == 2048)
return 0;
for (t = k + 1; t < 3; t++)
{
MAP[i][t] = MAP[i][t + 1];
MAP[i][t + 1] = 0;
}
}
}
}
Add(3);
return 1;
}
int Moveright(void)
{
int i, k, t;
for (i = 0; i < 4; i++)
{
int n = 4;
while (n--)
for (k = 3; k > 0; k--)
{
if (MAP[i][k] == 0)
for (t = k; t > 0; t--)
{
MAP[i][t] = MAP[i][t - 1];
MAP[i][t - 1] = 0;
}
}
for (k = 3; k > 0; k--)
{
if (MAP[i][k] == MAP[i][k - 1])
{
MAP[i][k] *= 2;
gre += MAP[i][k];
if (MAP[i][k] == 2048)
return 0;
for (t = k - 1; t > 0; t--)
{
MAP[i][t] = MAP[i][t - 1];
MAP[i][t - 1] = 0;
}
}
}
}
Add(4);
return 1;
}
int Move(void)
{
fflush(stdin);
char key;
key = getch();
int tf = 1;
if (key == 72)
tf = Moveup();
else if (key == 80)
tf = Movedown();
else if (key == 75)
tf = Moveleft();
else if (key == 77)
tf = Moveright();
if (!tf)
{
system("CLS");
printf("恭喜达到2048! ");
}
return tf;
}
int Check(void)
{
int i, k;
for (i = 0; i < 4; i++)
{
for (k = 1; k < 4; k++)
if (MAP[i][k - 1] == MAP[i][k])
return 0;
}
for (i = 0; i < 4; i++)
{
for (k = 1; k < 4; k++)
if (MAP[k - 1][i] == MAP[k][i])
return 0;
}
system("CLS");
printf("游戏结束! ");
return 1;
}
void Print(void)
{
printf("得分:%d ", gre);
printf(" ┏━━━┳━━━┳━━━┳━━━┓ ");
printf(" ┃┃┃┃┃ ");
printf(" ┃%4d┃%4d┃%4d┃%4d┃ ", MAP[0][0], MAP[0][1], MAP[0][2], MAP[0][3]);
printf(" ┣━━━╋━━━╋━━━╋━━━┫ ");
printf(" ┃┃┃┃┃ ");
printf(" ┃%4d┃%4d┃%4d┃%4d┃ ", MAP[1][0], MAP[1][1], MAP[1][2], MAP[1][3]);
printf(" ┣━━━╋━━━╋━━━╋━━━┫ ");
printf(" ┃┃┃┃┃ ");
printf(" ┃%4d┃%4d┃%4d┃%4d┃ ", MAP[2][0], MAP[2][1], MAP[2][2], MAP[2][3]);
printf(" ┣━━━╋━━━╋━━━╋━━━┫ ");
printf(" ┃┃┃┃┃ ");
printf(" ┃%4d┃%4d┃%4d┃%4d┃ ", MAP[3][0], MAP[3][1], MAP[3][2], MAP[3][3]);
printf(" ┗━━━┻━━━┻━━━┻━━━┛ ");
}
int main()
{
system("COLOR 5F");
char s[100];
while (scanf("%s", s), strcmp(s, "0"))
{
//将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值
memset(MAP, 0, sizeof (MAP));
gre = 0;
system("CLS");
Add(0);
Print();
while (Move())
{
fflush(stdin);
system("CLS");
Print();
if (Check())
break;
}
printf("按任继续游戏!输入0退出程序! ");
}
return 0;
}
小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
代码的话,就只有简简单单的 三百多行,这个小游戏也只是C语言里面的一些简单的知识点,希望各位伙伴们,语法的话,不要一直去学,每天去记住那些函数语法知识没很大的用处,记住了,思路很重要,对要学着画图,编程不要死敲代码。画图的话,可以带动你的大脑思维,所以说学好了那些知识点,尝试自己去做小项目,就是所谓的多动脑吧,调动自己的逻辑思维能力,在这里希望每一位爱好编程的伙伴们,在这条道路上越走越远。