C语言编程小游戏.docx

上传人:b****6 文档编号:6166847 上传时间:2023-01-04 格式:DOCX 页数:12 大小:15.64KB
下载 相关 举报
C语言编程小游戏.docx_第1页
第1页 / 共12页
C语言编程小游戏.docx_第2页
第2页 / 共12页
C语言编程小游戏.docx_第3页
第3页 / 共12页
C语言编程小游戏.docx_第4页
第4页 / 共12页
C语言编程小游戏.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C语言编程小游戏.docx

《C语言编程小游戏.docx》由会员分享,可在线阅读,更多相关《C语言编程小游戏.docx(12页珍藏版)》请在冰豆网上搜索。

C语言编程小游戏.docx

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");

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1