c/c++编程日记:用C语言实现消消乐游戏(附源码)

描述ios

给定一个矩阵,判断移动哪个格子,能够实现消除。(定义连续三个便可消除)编程

分析函数

先写一个函数,判断包含(i,j)的格子是否可能实现消除。学习

而后就是向右向下交换,而后调用上面写好的函数判断spa

被交换的两个格子是否实现消除。code

重点:视频

一、只须要向右向下交换,由于遍历的时候,后面的交换会重复。前一个判断了向右交换是否消除,后一个遍历就不须要再判断向左交换是否重复了。blog

二、必定要对被交换的两个格子都判断是否能消除,才能实现全面的判断。教程


代码:get

#include<iostream> 

#include<string> 

#include<vector> 

#include<ctime> 

#include<cstdlib> usingnamespacestd; constintLEN=8; voidpmap(intmap[][LEN]) 

{ for(inti=0;i<LEN;++i) { for(intj=0;j<LEN;++j) { cout<<map[i][j]<<""; } cout<<endl; } } 

//检查以(i,j)为中心的点,看是否能够消除

 boolcheck(intmap[][LEN],inti,intj)//保证i、j不越界, 

{ if( (i-1>=0&&i+1<LEN&&map[i-1][j]==map[i][j]&&map[i][j]==map[i+1][j])

 ||(j-1>=0&&j+1<LEN&&map[i][j-1]==map[i][j]&&map[i][j]==map[i][j+1]) 

||(i-2>=0&&map[i-2][j]==map[i-1][j]&&map[i-1][j]==map[i][j]) 

||(j-2>=0&&map[i][j-2]==map[i][j-1]&&map[i][j-1]==map[i][j])

 ||(i+2<LEN&&map[i+2][j]==map[i+1][j]&&map[i+1][j]==map[i][j]) 

||(j+2<LEN&&map[i][j+2]==map[i][j+1]&&map[i][j+1]==map[i][j]) ) 

{ returntrue; } returnfalse; } boolswapAndJudge(intm[][LEN],inti,intj)

//保证i、j不越界,应该对被swap的两个点都作纵向和横向的检查 

{ intmap[LEN][LEN]; for(intii=0;ii<LEN;++ii) { for(intjj=0;jj<LEN;++jj) 

{ map[ii][jj]=m[ii][jj]; } } //原来就能够消除 if(check(map,i,j)) 

{ printf("noneedtoswapat(%d,%d)\n",i,j); returntrue; } //只须要向下换和向右换 //向下换 if(i+1<LEN) { swap(map[i+1][j],map[i][j]); if(check(map,i,j)) { printf("#swapandsweap!(%d,%d)\n",i,j); returntrue; }

 if(check(map,i+1,j)) { printf("#swapandsweap!(%d,%d)\n",i+1,j); returntrue; } swap(map[i+1][j],map[i][j]);//换回来 } //向右换 if(j+1<LEN) { swap(map[i][j+1],map[i][j]); if(check(map,i,j)) 

{ printf("#swapandsweap!(%d,%d)\n",i,j); returntrue; } if(check(map,i,j+1)) { printf("#swapandsweap!(%d,%d)\n",i,j+1); returntrue; } swap(map[i][j+1],map[i][j]);//换回来 } returnfalse; } 

voidfindMinSwap(intmap[][LEN]) { for(inti=0;i<LEN;++i) { for(intj=0;j<LEN;++j) { if(swapAndJudge(map,i,j)) { printf("gotcha!(%d,%d)\n",i,j); } } } } intmain(intargc,constchar*argv[]){

 //insertcodehere... //std::cout<<"Hello,World!\n"; srand(unsigned(time(0))); for(inti=0;i<LEN;++i) { for(intj=0;j<LEN;++j) { map[i][j]=rand()%5; } } cout<<"xiaoxiaole!\n"; findMinSwap(map); pmap(map); return0; }


 

另外若是你想更好的提高你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许能够帮到你~

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比本身琢磨更快哦!

编程学习:


编程学习:

相关文章
相关标签/搜索