C语言编程+图形界面打造经典——2048

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

因为时间问题没有全写完就暂时发这么多

今天带来一个小游戏——2024,用C语言打造,里面涉及的知识点也并不是很多的。涉及到了,数组 循环 图形库,注:不要忘了安装好图形库。

小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

这个是运行图,是不是觉得很有趣呢?快来加入我们的大家庭吧,让我们一起把编程学会!

/*

2048 图形库版本

晨夕 2016 -12 -1

特别定制

*/

#include

#include

#include

#include

/*

内部实现过程

1.随机生成一个坐标 如果为空赋值为2

随机数生成 srand rand 头文件 time.h

2.获取键盘信息 getch 判断用户的输入

头文件 coin.h

3.根据用户输入进行一次操作switch

4.重复上述步骤

外部展现过程

1.贴图 然后写数字

2.判断条件达成

3.输赢判断

可选功能

待补充

*/

void game();

void show(int map[][5]);

void summer(int &a, int &b, int &c, int &d);

void summer(int &a,int &b,int &c,int &d){

//一个数组 改变值然后赋值回去

//参数实现部分 四个数字 最终结果 0在后面

//第一步 排除0

int i, j;

int harr[4] = { a, b, c, d };

//排掉0

int arr[4] = { 0 };

for (i = 0, j = 0; i

if (harr[i] != 0){

arr[j++] = harr[i];

}

}

for (int k = 0; k

//合并

for (i = 0; i

if (arr[i] == arr[i + 1]){

arr[i] *= 2;

for (j = i + 1; j

arr[j] = arr[j + 1];

}

arr[j] = 0;

}

}

}

a = arr[0];

b = arr[1];

c = arr[2];

d = arr[3];

}

//内部实现过程 一次游戏部分

void game(){

//初始化部分

int map[5][5] = { 0 };

int i, j, k, flag = 0, full = 0;

srand((unsigned)time(NULL));

//游戏部分

while (1){

if (full == 0){

do{

i = rand() % 4;

j = rand() % 4;

} while (map[i][j] != 0);

}

map[i][j] = 2;//在空白位置生成一个2

//游戏执行部分

//这里进行展示结果

show(map);

//获取用户输入

//键盘输入wasd或是方向键

//--------------------------------------------------------------------------------------------

-----------------------------------------------------------------------

//问题1.数字错误

//2.0没有完全消掉

//3.底部数据优先处理

//游戏如何进行 往上往下如何进行

switch (getch()){

case 'A':

case 'a':

//往左

//分两个步骤 1.处理掉所有的0 冒泡排掉所有0

//2.合并相同项

for (j = 0; j

summer(map[0][j], map[1][j], map[2][j], map[3][j]);

}

break;

case 'W':

case 'w':

//往上

for (i = 0; i

summer(map[i][0], map[i][1], map[i][2], map[i][3]);

}

小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

break;

case 'D':

case 'd':

//往右

for (j = 0; j

summer(map[3][j], map[2][j], map[1][j], map[0][j]);

}

break;

case 'S':

case 's':

//往下

for (i = 0; i

summer(map[i][3], map[i][2], map[i][1], map[i][0]);

}

break;

default:break;

}

//判断游戏是否结束

//达到2048 是否继续 不结束怎么办

if (flag == 0){

for (i = 0; i

for (j = 0; j

if (map[i][j] >=2048){

show(map);

if (MessageBox(0, "你赢了,要继续么", "选择",

MB_YESNO) == IDOK){

flag = 1;

}

else {

return;

//结束游戏充分必要条件是 1.格子满了 2.相邻元素没有相同的 上下左右 只需判断右边

和下边

//多加了一圈 所以不需要考虑边界

int over = 1;

for (i = 0; i

for (j = 0; j

if (map[i][j]==map[i+1][j]||map[i][j]==map[i][j+1]){

//可以继续

over = 0;

}

}

}

//是不是满了

full = 1;

for (i = 0; i

for (j = 0; j

if (map[i][j] == 0){

//可以继续

over = 0;

full = 0;

}

}

}

//判断是否结束游戏

if (over == 1){

show(map);

if (flag == 1){

MessageBox(0, "无法继续,游戏已结束", "Game Over", MB_OK);

return;

}

else{

MessageBox(0, "游戏失败", "Failed", MB_OK);

return;

}

}

}

}

void show(int map[][5]){

int i, j;

//图形部分

#if 1

IMAGE img[10];

loadimage(&img[0], "背景.jpg", 640, 640);

//loadimage(&img[1], L"网格.jpg", 640, 640);

putimage(0, 0, &img[0]);

//putimage(0, 0, &img[1]);

for (i = 0; i

line(0, i, 640, i);

line(i, 0, i, 640);

}

#endif

//结果展示

char s[11];

for (i = 0; i

for ( j = 0; j

//使用前置空 循环置空

for (int k = 0; k

s[k] = '';

}

sprintf(s, "%d", map[i][j]);

//单独绘制颜色在这里加上设置部分

outtextxy(160 * i+40, 160 * j+40, s);

//printf("%6d", map[i][j]);

}

//printf(" ");

}

//printf("----------------------------我是长长的分界

线-------------------------------------- ");

}

小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

int main(){

initgraph(640, 640);

setbkmode(TRANSPARENT);//设置透明背景 这里的话用1就行

settextcolor(LIGHTCYAN);//字体颜色

settextstyle(32, 0, "黑体");//字体样式 高宽 字体 宽为0自动调整

//函数主体部分

//循环游戏?

while (1){

game();

//判断用户是否循环游戏

if (MessageBox(0, "再来一次?", "游戏继续", MB_RETRYCANCEL) == IDCANCEL){

break;

}

}

closegraph();

return 0;

}这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180224A19AL700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券