首页 > 代码库 > C语言风格实现的开心消消乐
C语言风格实现的开心消消乐
把整个代码分成很多小模块,初始化模块,显示模块,调整模块,运行模块。还望大牛能给出进一步优化的建议和改进。代码如下:
#include<iostream>#include<string>#include<vector>#include<ctime>using namespace std;#define row 10#define col 10int score = 0;int cnt = 0;vector<vector<bool>>state(row, vector<bool>(col, false));vector<vector<int>>nums(row, vector<int>(col, 0));void display(){ for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (!state[i][j]) cout << nums[i][j] << " "; else cout << " "; } cout << endl; } cout << "your score is :" << score << endl;}void initgame(){ srand(time(0)); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { state[i][j] = false; nums[i][j] = rand() % 3; } } display();}bool isvalid(int x, int y){ if (x < 0 || x >= row || y < 0 || y >= col || state[x][y])return false; return true;}bool isgameover(){ for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { int target = nums[i][j]; int x = i; int y = j; if (!isvalid(i, j))return false; if ((isvalid(x + 1, y) && nums[x + 1][y] == target) || (isvalid(x - 1, y) && nums[x - 1][y] == target) || (isvalid(x, y + 1) && nums[x][y + 1] == target) || (isvalid(x, y - 1) && nums[x][y - 1] == target)) return false; } } return true;}void dfs(int x, int y,int target){ if (!isvalid(x, y))return; if (nums[x][y] != target)return; state[x][y] = true; cnt++; dfs(x+1,y,target); dfs(x-1,y,target); dfs(x,y+1,target); dfs(x,y-1,target);}void adjustment(){ for (int j = 0; j < col; j++) { vector<int>tmp; for (int i = row-1; i >=0; --i) { if (!state[i][j])tmp.push_back(nums[i][j]); } int r = row - 1; for (int i = 0; i < tmp.size(); i++) { nums[r][j] = tmp[i]; state[r][j] = false; r--; } for (; r >= 0; r--) { state[r][j] = true; } }}void playgame(){ int x, y; while (cin >> x >> y) { if(!isvalid(x,y))continue; int target = nums[x][y]; cnt = 0; if ((isvalid(x + 1, y) && nums[x + 1][y] == target) || (isvalid(x - 1, y) && nums[x - 1][y] == target) || (isvalid(x, y + 1) && nums[x][y + 1] == target) || (isvalid(x, y - 1) && nums[x][y - 1] == target)) dfs(x,y,target); score += target*cnt; adjustment(); display(); if (isgameover()) { cout << "gameover" << endl; break; } }}int main(){ initgame(); playgame(); cin.get(); return 0;}
C语言风格实现的开心消消乐
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。