C 语言项目 2048 游戏制作
前言
跨年过年,北方地区是农历二十三月,南方地区是农历二十四月,虽然时间上有差异,但是新年的到来,意味着全体学生都进入了寒假,小编在此祝大家新春快乐。
本期目标:实现2048小游戏的基本功能
制作环境:
支持VC++2010,VS版本
EasyX 图形库 ()。
效果预览:
因为我不用找图片素材,我就直接用easyx提供的绘图功能,画了这么简单的界面。这个游戏怎么样,对于追求快节奏的我们来说可不好玩,说实话,我没有过关,也就是达到2048这个数字。不过,因为《2048》是一款益智游戏,所以其中的逻辑还是值得深思的。
目录
01
游戏规则
游戏规则非常简单,你需要控制所有的方块向同一方向移动,两个相同数字的方块碰撞在一起并合并成它们的总和,每次操作后会随机生成一个 2 或 4,最后你会得到一个“2048”方块来获胜。
数字碰撞
数字冲突是指两个相同的数字碰撞成为它们的总和
场景示例:
在这张图中,我们看第一列数字 { 2 2 0 4 },它实际上是一个一维数组,然后当玩家按下 W 或 ↑ 键时,我们需要处理这个一维数组的数据,即 { 2 2 0 4 } 变为 { 4 4 00}。
那么我该怎么做呢,分两步,首先将数字 { 2 2 0 4 } 改为 { 2 2 4 0},然后循环确定相邻的两个数字是否相同,并合并相同的数字。
我们来看一下代码中的实现
case 72://上
case'W':
case'w':
//把0向下移动
for (int j = 0; j < 4; j++) //4列分别操作
{
len = 4;
for (int i = 0; i < len - 1; i++)
{
if (map[i][j] == 0)
{
//下面的数字往上移一个格子
for (int k = i; k < 3; k++)
{
map[k][j] = map[k + 1][j];
map[k + 1][j] = 0;
}
len--; //出现一个 0 len减一
i--; //返回原位置检测是否有 0
}
}
for (int i = 0; i < len - 1; i++)
{
if (map[i][j] == 0) break; //第一行为0 后面都是0,不进行操作
if (map[i][j] == map[i + 1][j]) //检测相邻两个数字是否相同,相同就合并
{
map[i][j] *= 2; //合并
//合并之后后面的数字往前移动一位
for (int k = i + 1; k < 3; k++)
{
map[k][j] = map[k + 1][j];
map[k + 1][j] = 0;
}
//进行打分
*score += map[i][j];
}
}
}
break;
别看代码还挺长的,其实很简单理解,而且四个方向的代码就是一个模型,复制粘贴,修改一些东西,掌握了整个游戏的核心代码,然后是让它看起来更好的界面。由于图表方便快捷,我没有去找图片资源,所以我做的界面可能比较比较,嗯,垃圾。这只是为了学习,别当真,也别说我要清关,我要2048,微信小程序搜索2048,那个界面看起来不错。
02
游戏三部曲
main 函数 int main()。
int main()
{
initgraph(MAP_ROW * PIXEL + 100, MAP_COL * PIXEL + 100); //加载窗口
init(map, &score); //初始化地图数据
while (1)
{
DrawMap(map, score); //绘制地图
Play(map, &score); //玩家操作
switch (Judg(map)) //判断输赢 对结果进行匹配
{
case 0://赢
break;
case -1://输
break;
本文链接:http://yl101.com/detail/id/58543.html