• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C语言实现消消乐小游戏

c语言 搞代码 4年前 (2022-01-06) 33次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了C语言实现消消乐小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现消消乐小游戏的具体代码,供大家参考,具体内容如下

代码:

 #include #include #include #include #include #include  #include #include using namespace std; struct node{ int x, y; }; const int size = 9; //地图大小 int Score; //得分 int Map[size][size]; //主地图 int Map_2[size][size]; //辅助地图 用于显示 int dropNumbe[size][size]; //下降距离统计 int bfsVis[size][size]; //bfs标记数组 int xx[4] = { 0, 0, 1, -1 }; int yy[4] = { 1, -1, 0, 0 }; //方向调整数组 int random(); //随机数产生 void initMap(); //地图初始化 void updateMap(int flag); //打印地图 void printSqure(int i); //形状打印 void dropNumberCount(); //下落高度统计 void squreDrop(); //根据下落高度更新地图 void reflashMap(); //下落后的地图新元素添加 void mapCopy(); //数组复制 void displayUpdate(); //消失效果 bool updateCheck(); //检测是否有符合消除条件,通过bfs消除 bool bfsCheck(int x, int y, int squre); //bfs标记及越界检测 void Bfs(int x, int y); int main() { initMap(); Score = 0; updateMap(1); while (true) { bool isUpdate = false; int x1, x2, y1, y2; cout << "please input x1,y1,x2,y2" <> x1 >> y1 >> x2 >> y2; mapCopy(); swap(Map[x1][y1], Map[x2][y2]); updateMap(1); isUpdate = updateCheck(); if (isUpdate){ dropNumberCount(); squreDrop(); cout << endl; cout << "-------------------- drop" << endl; updateMap(1); cout << endl; cout << "-------------------- reflash" << endl; reflashMap(); updateMap(1); while (isUpdate = updateCheck()){ dropNumberCount(); squreDrop(); cout << endl; cout << "-------------------- drop" << endl; updateMap(1); cout << endl; cout << "-------------------- reflash" << endl; reflashMap(); updateMap(1); system("pause"); } } else{ system("CLS"); cout << "GAME OVER!" << endl; cout << "Total Score: "; cout << Score <= 0)return temp; } } void initMap(){ //地图初始化 srand((int)time(0)); for (int i = 1; i <size; i++){ for (int j = 1; j <size; j++){ Map[i][j] = (rand() % 4); } } } void printSqure(int i){ //形状打印 switch (i){ case -1:cout << "□"; break; case 0:cout << "■"; break; case 1:cout << "★"; break; case 2:cout << "▲"; break; case 3:cout << "●"; break; } } void updateMap(int flag){ //打印地图 cout << "Current Score:"; cout << Score << endl; for (int i = 0; i <size; i++){ for (int j = 0; j <size; j++){ if (i == 0){ cout << j << " "; } else if (j == 0){ cout << i; } else{ int x; if (flag == 1)x = Map[i][j]; else x = Map_2[i][j]; printSqure(x); } } cout << endl; } } bool updateCheck(){ //检测是否有符合消除条件,通过bfs消除 bool isUpdate = false; memset(bfsVis, 0, sizeof(bfsVis)); for (int i = 1; i <size; i++){ for (int j = 1; j = 1) && (i + 1 = 1) && (j + 1 <size)){ int t1, t2, t3; t1 = Map[i][j]; t2 = Map[i][j - 1]; t3 = Map[i][j + 1]; if ((t1 == t2) && (t1 == t3)){ mark = true; isUpdate = true; } } if (mark){ mapCopy(); Bfs(i, j); } } } } return isUpdate; } bool bfsCheck(int x, int y, int squre){ //bfs标记及越界检测 if (x = size || y = size)return false; if (bfsVis[x][y] != 0 || Map[x][y] != squre)return false; return true; } void Bfs(int x, int y){ int ans = 0; queueS; node now, next; now.x = x, now.y = y; bfsVis[x][y] = 1; //point_vis[x][y] = 1; int squre = Map[x][y]; Map[x][y] = -1; cout << "BFS: " << x << " " << y << endl; S.push(now); while (!S.empty()){ now = S.front(); ans++; S.pop(); for (int i = 0; i <4; i++){ next = now; next.x += xx[i], next.y += yy[i]; if (bfsCheck(next.x, next.y, squre) == 0)continue; bfsVis[next.x][next.y] = 1; Map[next.x][next.y] = -1; S.push(next); } } Score += ans; displayUpdate(); } void displayUpdate(){ //消失效果 system("CLS"); updateMap(1); Sleep(500); system("CLS"); updateMap(2); Sleep(500); system("CLS"); updateMap(1); Sleep(500); system("CLS"); updat<mark style="color:transparent">来源gaodaimacom搞#^代%!码&网</mark>eMap(2); Sleep(500); system("CLS"); updateMap(1); } void dropNumberCount(){ //下落高度统计 for (int i = 1; i <size; i++){ for (int j = 1; j <size; j++){ if (Map[i][j] == -1){ dropNumbe[i][j] = 0; continue; } int sum = 0; for (int z = i + 1; z = 1; i--){ for (int j = 1; j <size; j++){ int temp = dropNumbe[i][j]; if (temp != 0){ Map[i + temp][j] = Map[i][j]; Map[i][j] = -1; } } } } void reflashMap(){ //下落后的地图新元素添加 for (int i = 1; i <size; i++){ for (int j = 1; j <size; j++){ if (Map[i][j] == -1){ Map[i][j] = (rand() % 4); } } } } void mapCopy(){ //数组复制 for (int i = 1; i <size; i++){ for (int j = 1; j <size; j++){ Map_2[i][j] = Map[i][j]; } } }

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是C语言实现消消乐小游戏的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C语言实现消消乐小游戏

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址