c++彩色泡泡小游戏用户手册和源代码.docx
- 文档编号:11966821
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:16
- 大小:375.24KB
c++彩色泡泡小游戏用户手册和源代码.docx
《c++彩色泡泡小游戏用户手册和源代码.docx》由会员分享,可在线阅读,更多相关《c++彩色泡泡小游戏用户手册和源代码.docx(16页珍藏版)》请在冰豆网上搜索。
c++彩色泡泡小游戏用户手册和源代码
C++大作业用户手册
一、游戏规则介绍
本游戏叫做彩色泡泡。
游戏中的界面如下图,为n*n的泡泡方阵(下图为10*10)。
图1
彩色泡泡一共包括红黄蓝绿四种颜色随机生成,用户可以输入坐标,格式xy(第x行第y列,x、y取值从1到n),如“23”,表示用户点击第二行第三列,如图2中箭头所指的红色泡泡。
图2
如果该泡泡从水平和垂直方向(不考虑斜线方向)上有与其颜色相同且连通的泡泡,则消去所有这些泡泡(如图3中由白色线框框住的泡泡)。
如果用户点击的为一个被其他颜色包围的单一的泡泡,如(2,1),则无法消去。
图3
消去的规则为:
下方泡泡被消去,则上方泡泡将竖直下落,若一列完全被消去,则其左方的所有泡泡整体向右平移一列。
图4为消去(2,3)后的情况。
图4
用户得分计算方式:
一次操作消掉x(2= 用户最终得分为所有操作得分之和。 当游戏中已经没有可以消去的泡泡时,游戏结束,将会显示用户最终得分和排名,并在文件中记录该用户用户名和得分。 如图5。 图5 二、操作说明 1.初始时,是如下三个图(图6、图7、图8),图6、图7各停留数秒钟。 图6 图7 图8 在图8界面,可以输入游戏的用户名。 2.接下来是选择泡泡方阵的阶数。 输入完毕后系统会提示loading。 图9 3.游戏界面,可以输入坐标(x,y)x,输入格式为“xy”。 如图10. 图10 4.选择错误时,系统会提示无可以消去的泡泡。 如图11。 图11 5.消至无可再消的时候,系统会提示游戏结束。 图12 6.游戏结束后自动跳转界面至排行榜,并询问是否重来。 重来则直接进入选择阶数界面。 图13 7.退出。 附: 源代码 #include #include #include #include #include #include #include usingnamespacestd; constintmaxn=20+5; intcolor[maxn][maxn]; inta,b,c,d,e,f,g,h,i,j,k,m,n,score; intdx[4]={-1,1,0,0},dy[4]={0,0,-1,1};//位移数组 WORDatt[5]={FOREGROUND_RED|FOREGROUND_INTENSITY, FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY, FOREGROUND_GREEN|FOREGROUND_INTENSITY, FOREGROUND_BLUE|FOREGROUND_INTENSITY, FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY}; //颜色: 红黄绿蓝白 HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);//定义句柄 stringname,t; charch; voiddelay(intsec){Sleep(sec*1000);}//延迟sec秒使用户界面可以停顿 voidprint(intl,strings1,strings2)//输出s1占l+1位再输出s2 { cout< for(inti=1;i<=l-s1.size()+1;i++)printf(""); cout< } voidshow()//输出当前图形和分数 { inti,j; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(color[i][j]==-1){cout<<"";continue;} SetConsoleTextAttribute(handle,att[color[i][j]]); cout<<"●"; } printf("\n"); } SetConsoleTextAttribute(handle,att[4]); printf("当前得分%d\n",score); } intdfs(intx,inty,intcl)//搜索连通的同色点并消灭 { if(color[x][y]! =cl)return0; color[x][y]=-1; intk,v=1; for(k=0;k<4;k++)v+=dfs(x+dx[k],y+dy[k],cl); returnv; } intsqr(into){returno*o;} voidwork(intx,inty)//对用户的输入坐标进行处理 { if(x<1||y<1||x>n||y>n||color[x][y]==-1) { printf("不好意思哦亲,这个位置没有可以消去的泡泡哦..."); delay (1); return; } score+=sqr(dfs(x,y,color[x][y])); } voiddown(intx,inty)//向下移动可行点直到不能再移动 { if(x { color[x+1][y]=color[x][y]; color[x][y]=-1; down(x+1,y); } } voidmove(intj)//向右移动可行列直到不能再移动 { if(j==n)return; for(i=1;i<=n;i++)if(color[i][j+1]>=0)return; for(i=1;i<=n;i++)color[i][j+1]=color[i][j],color[i][j]=-1; move(j+1); } voidreshape()//对一个已经消灭若干点的图进行移动使满足要求 { inti,j,flag,tim=0; for(i=n;i>=1;i--)for(j=1;j<=n;j++)if(color[i][j]>=0)down(i,j); for(j=n-1;j>=1;j--){ flag=1; for(i=1;i<=n;i++)if(color[i][j]>=0){flag=0;break;} if(! flag)move(j); } } booljudge()//判断是否还有可以消的点 { inti,j,k; for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(color[i][j]>=0) for(k=0;k<4;k++) if(color[i][j]==color[i+dx[k]][j+dy[k]])return1; return0; } voidshowranking()//展示并更新排名文件 { fstream_file; _file.open("ranking.txt",ios: : in); if(! _file) { freopen("ranking.txt","w",stdout); freopen("CON","w",stdout); } fstreamf("ranking.txt",ios: : in); stringna[12]; intsc[12],i,j=0,m=0,max=0; stringtem; chartemp[256]; while(++m&&f>>na[m]&&f>>sc[m]); m--; for(i=1;i<=m;i++)if(score>sc[i]) { j=i;break; } if(j==0)j=m+1; for(i=m+1;i>j;i--){na[i]=na[i-1];sc[i]=sc[i-1];} na[j]=name;sc[j]=score; if(m<10)m++; for(i=1;i<=m;i++)if(na[i].size()>max)max=na[i].size(); print(max,"name","score"); for(i=1;i<=m;i++) { if(i==j)SetConsoleTextAttribute(handle,att[3]); sprintf(temp,"%d",sc[i]); tem=temp; print(max,na[i],tem); if(i==j)SetConsoleTextAttribute(handle,att[4]); } if(j==1)printf("恭喜你,成为排行榜第一! ! ! ");else if(j<=10)printf("恭喜你,进入排行榜前十! ! ! ");else printf("很遗憾,没有挤进排行榜的前十名! ! ! 再接再厉"); fstreamfout("ranking.txt",ios: : out); //freopen("ranking.txt","w",stdout); for(i=1;i<=m;i++)fout< } intmain() { time_tw; srand((unsignedint)time(&w)); printf("欢迎来到\"彩色泡泡\"游戏ooOO\n");delay(3); system("cls"); printf("适度游戏益脑,过度游戏伤身,请记得控制您的游戏时间哦亲^^\n");delay(4); system("cls"); printf("给您起个名儿吧^^(不带空格的哦): \n"); cin>>name; t="y"; while(t=="Y"||t=="y")//循环游戏 { system("cls"); printf("您想玩几阶的方阵呢? (范围: 10~20): \n"); cin>>n; memset(color,-1,sizeof(color)); for(i=1;i<=n;i++) for(j=1;j<=n;j++) { a=rand()%4; color[i][j]=a; } printf("LOADING..."); delay (2); score=0; while (1)//打印泡泡+判断并消去泡泡+判断游戏结束 { system("cls"); show(); cin>>a>>b; work(a,b); reshape(); if(! judge())break; } system("cls"); show(); printf("过关! 已经没有可以消去的泡泡了~~\n"); delay (1); system("cls"); printf("恭喜%s,您的得分为%d\n",name.c_str(),score); showranking(); delay (2); printf("再来一局吗? Y/N\n"); t="x"; while(t! ="Y"&&t! ="y"&&t! ="N"&&t! ="n")cin>>t; } printf("欢迎下次再来玩哦~就此别过,不知何日再能相见~\n"); delay(3); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 彩色 泡泡 小游戏 用户手册 源代码