C/C+项目源码——2048小游戏

C/C++项目源码——2048小游戏

这是小编自己做的一个2048的小游戏,然后图片素材需要大家自己找寻,也可以在下方评论处评论找我要素材

```cpp

/************************************************

*stdio.h 标准C语言库

*#include 包含库

*

************************************************/

#define _CRT_SECURE_NO_WARNINGS//去掉编译器内扩增问题

#include

#include

#include   //报错--->baby 图形库插件安装就可以了

#include

#include

/************************************************

*数据成员

*变量的声明

************************************************/

IMAGE img[12];//存储12张照片

//图片的的名字的序号

//imgIndex[x].bmp;

int imgIndex[12] = { 0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 };

int i, j;//循环变量的遍历

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

/************************************************

*子函数

*加载资源

************************************************/

void loadResource()

{

for (i = 0; i < 12; i++)

{

//批量加载

char fileName[20] = "";

sprintf(fileName, "%d.bmp", imgIndex[i]);

loadimage(img + i, fileName);

//0 1 2

}

}

/************************************************

*画地图

*根据二维数组中的值去画地图

************************************************/

void drawMap()

{

setbkcolor(RGB(244, 215, 215));

cleardevice();

settextcolor(WHITE);//设置文字颜色

settextstyle(35, 0, "楷体");//设置文字格式

outtextxy(50, 10, "2048游戏");

//根据二维数组中值去画图

int x, y, k;

for (i = 0; i < 4; i++)

{

for (j = 0; j < 4; j++)

{

x = 60 * j;

y = 60 * i + 50;

for (k = 0; k < 12; k++)

{

//求出当前元素对应的图片序号

//赋值语句不要写成等于号

if (imgIndex[k]== map[i][j])

break;

}

//贴相应序号的图片

putimage(x, y, img + k);

}

}

}

/************************************************

*随机产生2或者4 或者0

*随机函数

************************************************/

int  randIntNum()

{

srand((unsigned int)time(NULL));//随机函数种子

for (i = 0; i < 4; i++)

{

for (j = 0; j < 4; j++)

{

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

{

//0,2,4

//(0,1,2)*2

map[i][j] = (rand() % 3) * 2;

//产生0的话,该次产生的值不算

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

continue;

return 0;

}

}

}

return 0;

}

//做移动,一定要想清楚什么时候能动

/************************************************

*根据:上,下,左,右 键做不同合并

*以右键为例:

*[2 2 4 4]--->[0 4 0 8]

*[0 2 0 8]--->[0 0 2 8]

************************************************/

int moveRight()

{

int flag = 0;//游戏结束标记

for (i = 0; i < 4; i++)

{

for (j = 4 - 1; j >= 0; j--)

{

int curKey = map[i][j];//当前元素的值

if (curKey != 0)

{

int curKey = map[i][j];//当前元素的值

int k = j + 1;

while (k >= 0)

{

//当前元素的下一个

int curKeyNext = map[i][k];

if (curKeyNext != 0)

{

//如果相邻的是相同,那么我们就合并

if (curKey == curKeyNext)

{

//[2 2 4 4]--->[0 4 0 8]

flag = 1;

map[i][j] += map[i][k];

map[i][k] = 0;

}

k = 4;//退出循环

break;

}

k++;//判断其他的位置

}

}

}

}

//[0 2 0 8]--->[0 0 2 8]

for (i = 0; i < 4; i++)

{

for (j = 4 - 1; j >= 0; j--)

{

int curKey = map[i][j];

if (curKey == 0)

{

int k = j - 1;

while (k >= 0)

{

int curKeyNext = map[i][k];

if (curKeyNext != 0)

{

flag = 1;

map[i][j] = curKeyNext; //把非0元素移到0的位置

map[i][k] = 0;//移动后变为0

k = -1;

}

k--;//其他位置也需要判断

}

}

}

}

if (flag)

return 0;

else

return 4;

}

//往左走

int moveLeft()

{

int flag = 0;//游戏结束标记

for (i = 0; i < 4; i++)

{

for (j =0; j

{

int curKey = map[i][j];//当前元素的值

if (curKey != 0)

{

int k = j + 1;

while (k < 4)

{

//当前元素的下一个

int curKeyNext = map[i][k];

if (curKeyNext != 0)

{

//如果相邻的是相同,那么我们就合并

if (curKey == curKeyNext)

{

//[2 2 4 4]--->[0 4 0 8]

flag = 1;

map[i][j] += map[i][k];

map[i][k] = 0;

}

k = 4;//退出循环

break;

}

k++;//判断其他的位置

}

}

}

}

//[0 2 0 8]--->[0 0 2 8]

for (i = 0; i < 4; i++)

{

for (j =0; j

{

int curKey = map[i][j];

if (curKey == 0)

{

int k = j + 1;

while (k < 4)

{

int curKeyNext = map[i][k];

if (curKeyNext != 0)

{

flag = 1;

map[i][j] = curKeyNext; //把非0元素移到0的位置

map[i][k] = 0;//移动后变为0

k = 4;

}

k++;//其他位置也需要判断

}

}

}

}

if (flag)

return 0;

else

return 4;

}

//往上走

int  moveUp()

{

int flag = 0;

for (i = 0; i

{

for (j = 0; j < 4; j++)

{

int curKey = map[i][j];

if (curKey != 0)

{

int k = i + 1;

while (k

{

int curKeyNext = map[k][j];

if (curKeyNext != 0)

{

if (curKey== curKeyNext)

{

flag = 1;

map[i][j] += map[k][j];

map[k][j] = 0;

}

k = 4;

break;

}

k++;

}

}

}

}

for (i = 0; i

{

for (j = 0; j < 4; j++)

{

int curKey = map[i][j];

if (curKey == 0)

{

int k = i + 1;

while (k

{

int curKeyNext = map[k][j];

if (curKeyNext != 0)

{

flag = 1;

map[i][j] = curKeyNext;

map[k][j] = 0;

k = 4;

}

k++;

}

}

}

}

if (flag)

return 0;

else

return 4;

}

//往下走

int  moveDown()

{

int flag = 0;

for (i = 4 - 1; i >= 0; i--)

{

for (j = 0; j < 4; j++)

{

int curKey = map[i][j];

if (curKey != 0)

{

int k = i - 1;

while (k >= 0)

{

int curKeyNext = map[k][j];

if (curKeyNext != 0)

{

if (map[i][j] == map[k][j])

{

flag = 1;

map[i][j] += map[k][j];

map[k][j] = 0;

}

k = 0;

break;

}

k--;

}

}

}

}

for (i = 4 - 1; i > 0; i--)

{

for (j = 0; j < 4; j++)

{

int curKey = map[i][j];

if (curKey == 0)

{

int k = i - 1;

while (k >= 0)

{

int curKeyNext = map[k][j];

if (curKeyNext != 0)

{

flag = 1;

map[i][j] = curKeyNext;

map[k][j] = 0;

k = 0;

}

k--;

}

}

}

}

if (flag)

return 0;

else

return 4;

}

/************************************************

*按键响应

*上,下,左,右

************************************************/

void keyDown()

{

char key=_getch();//用来接收用户按键

switch (key)

{

case 'w':

case 'W':

case 72://小键盘

randIntNum();

moveUp();

break;

case 'S':

case 's':

case 80:

randIntNum();

moveDown();

break;

case 'a':

case 'A':

case 75:

randIntNum();

moveLeft();

break;

case 'd':

case 'D':

case 77:

randIntNum();

//drawMap();

moveRight();

break;

}

}

/************************************************

*主函数

*唯一的一个入口函数

************************************************/

int main()

{

//程序如何显示图片

loadResource();

initgraph(60 * 4, 60 * 4 + 60);

drawMap();

while (1)

{

keyDown();

drawMap();

}

////1.声明图片变量

//IMAGE background;

////2.加载资源到变量 loadimage加载

//loadimage(&background, "class.jpg", 800, 400);

//3.显示图片 putimage显示图片

//putimage(0, 0, img+1);

getchar();//防止闪屏

closegraph();

system("pause");

return 0;

}

```

这个小游戏希望对大家有帮助,自己在家没事的时候也可以写出来玩一下,

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

扫码关注云+社区

领取腾讯云代金券