C语言编程小游戏.docx
- 文档编号:6166847
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:15.64KB
C语言编程小游戏.docx
《C语言编程小游戏.docx》由会员分享,可在线阅读,更多相关《C语言编程小游戏.docx(12页珍藏版)》请在冰豆网上搜索。
C语言编程小游戏
C语言编程2048小游戏
/*ByReason*/
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;//srand((unsigned)time(NULL));//随机数种子不能用在这里intpane[4][4];//棋盘
intN=1;//2的n次方
voidshowpane()//显示棋盘
{
cout< cout< for(inti=0;i<=3;i++) { cout< for(intj=0;j<=3;j++) { //SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); cout< (2)<<"|"< if(j==3) { cout< (2)<<"|"< cout< } } } } voidnewgame()//开始游戏 { N=1; for(inti=0;i<=3;i++)//初始化棋盘 for(intj=0;j<=3;j++) pane[i][j]=0; srand((unsigned)time(NULL)); intm=rand()%4; intn=rand()%4; intp=rand()%4; intq=rand()%4; pane[m][n]=pane[p][q]=2; showpane(); } intif2n(intx)//判断x是否是2的n次方{ intflag=0; for(intn=1;n<=11;n++) { if(x==pow(2,n)) { flag=1; if(n>N) N=n; returnflag; } } returnflag; } intupmove()//上移 { intflag=0; for(intj=0;j<=3;j++) for(inti=0;i<3;i++) { if(if2n(pane[i][j]+pane[i+1][j])==1) { pane[i][j]=pane[i][j]+pane[i+1][j]; pane[i+1][j]=0; flag=1; } } returnflag; } intdownmove()//下移 { intflag=0; for(intj=0;j<=3;j++) for(inti=3;i>0;i--) { if(if2n(pane[i][j]+pane[i-1][j])==1) { pane[i][j]=pane[i][j]+pane[i-1][j]; pane[i-1][j]=0; flag=1; } } returnflag; } intleftmove()//左移 { intflag=0; for(inti=0;i<=3;i++) for(intj=0;j<3;j++) { if(if2n(pane[i][j]+pane[i][j+1])==1) { pane[i][j]=pane[i][j]+pane[i][j+1]; pane[i][j+1]=0; flag=1; } } returnflag; } intrightmove()//右移 { intflag=0; for(inti=0;i<=3;i++) for(intj=3;j>0;j--) { if(if2n(pane[i][j]+pane[i][j-1])==1) { pane[i][j]=pane[i][j]+pane[i][j-1]; pane[i][j-1]=0; flag=1; } } returnflag; } inttestup()//能否上移测试 { intflag=0; for(intj=0;j<=3;j++) for(inti=0;i<3;i++) { if(if2n(pane[i][j]+pane[i+1][j])==1) { flag=1; } } returnflag; } inttestdown()//测试能否下移 { intflag=0; for(intj=0;j<=3;j++) for(inti=3;i>0;i--) { if(if2n(pane[i][j]+pane[i-1][j])==1) { flag=1; } } returnflag; } inttestleft()//测试能否左移 { intflag=0; for(inti=0;i<=3;i++) for(intj=0;j<3;j++) { if(if2n(pane[i][j]+pane[i][j+1])==1) { flag=1; } } returnflag; } inttestright()//测试能否右移 { intflag=0; for(inti=0;i<=3;i++) for(intj=3;j>0;j--) { if(if2n(pane[i][j]+pane[i][j-1])==1) { flag=1; } } returnflag; } intpanemax()//棋盘最大数 { intmax=pane[0][0]; for(inti=0;i<=3;i++) for(intj=0;j<=3;j++) if(pane[i][j]>max) max=pane[i][j]; returnmax; } intifwin()//判断是否胜利 { intflag=0; if(panemax()==2048) { cout< "< flag=1; } returnflag; } intifGameOver()//判断是否游戏结束 { intflag=0; if(testup()+testdown()+testleft()+testright()==0) { cout< "< flag=1; } returnflag; } voidaddnewnumberup()//上移后添加新数{ srand((unsigned)time(NULL)); intn; if(N==1) n=1; else n=(rand()%(N)+1); intnewnumber=pow(2,n); for(inti=3;i>=0;i--) for(intj=0;j<=3;j++) if(pane[i][j]==0) { pane[i][j]=newnumber; return; } } voidaddnewnumberdown()//下移后添加新数 { srand((unsigned)time(NULL)); intn; if(N==1) n=1; else n=(rand()%(N)+1);intnewnumber=pow(2,n); for(inti=0;i<=3;i++) for(intj=0;j<=3;j++) if(pane[i][j]==0) { pane[i][j]=newnumber; return; } } voidaddnewnumberleft()//左移后添加新数{ srand((unsigned)time(NULL)); intn; if(N==1) n=1; else n=(rand()%(N)+1); intnewnumber=pow(2,n); for(intj=3;j>=0;j--) for(inti=0;i<=3;i++) if(pane[i][j]==0) { pane[i][j]=newnumber; return; } } voidaddnewnumberright()//右移后添加新数{ srand((unsigned)time(NULL)); intn; if(N==1) n=1; else n=(rand()%(N)+1); intnewnumber=pow(2,n); for(intj=0;j<=3;j++) for(inti=0;i<=3;i++) if(pane[i][j]==0) { pane[i][j]=newnumber; return; } } intGetDirection()//读取方向 { intret=0; do { intch=_getch(); if(isascii(ch)) continue; ch=_getch(); switch(ch) { case72: ret=2;//top break; case75: ret=1;//left break; case77: ret=3;//right break; case80: ret=4;//down break; default: break; } }while(ret==0); returnret; } voidmain()//主函数 { system("colorf9"); intmakesure=1; while(makesure) { system("cls"); newgame(); while(ifwin()+ifGameOver()==0) { intc=GetDirection(); switch(c) { case2: upmove(); addnewnumberup(); system("cls"); showpane(); break; case4: downmove(); addnewnumberdown(); system("cls"); showpane(); break; case1: leftmove(); addnewnumberleft(); system("cls"); showpane(); break; case3: rightmove(); addnewnumberright(); system("cls"); showpane(); break; default: break; } } cout< "< cout< "< cin>>makesure; while(makesure! =1&&makesure! =0) { cout<<"输入不正确,请重新输入! "< cin>>makesure; } } cout<<"再见~"< system("pause"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编程 小游戏