C/C++仿华容道小游戏
本文实例介绍了C++模仿华容道小游戏实现代码,分享给大家供大家参考,具体内容如下
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<stdbool.h>
#definemaxnum16
#definecolnum4
boolnumexists(int*numbers,intlength,intnum);
intgetnumber(int**numbers,intrandIndex,int*length);
int*initnumbers(void);
voidswap(int**a,int**b);
intmain(intargc,char*argv[])
{
int*tempnumbers=initnumbers();
int*randnumbers=initnumbers();
int**numbers;
numbers=malloc(maxnum*sizeof(int*));
//boola=numexists(numbers,16,3);
//printf("a=%d\n",a);
intlength=maxnum;
srand((unsigned)time(NULL));
for(inti=0;i<maxnum;i++)
{
inttemp=getnumber(&tempnumbers,rand()%length,&length);
randnumbers[i]=temp;
numbers[temp]=&randnumbers[i];
//printf("%d%c",temp,(i+1)%colnum==0?'\n':'\t');
}
if(tempnumbers!=NULL)
free(tempnumbers);
while(true)
{
system("clear");
for(inti=0;i<maxnum;i++)
printf("%d%c",randnumbers[i],(i+1)%colnum==0?'\n':'\t');
printf("movenumber/invalidnum==exit:");
inti;
if(!scanf("%d",&i))
{
printf("gameover\n");
break;
}
if(i>=maxnum||i<0)
{
printf("sorry,ican'tfind%d\n",i);
break;
}
unsignedcharsign=abs(numbers[i]-numbers[0]);
switch(sign)
{
case1:
case4:swap(&numbers[0],&numbers[i]);break;
}
}
if(numbers!=NULL)
free(numbers);
if(randnumbers!=NULL)
free(randnumbers);
}
voidswap(int**a,int**b)
{
int*templocation=*a;
inttempvalue=**a;
**a=**b;
**b=tempvalue;
*a=*b;
*b=templocation;
}
int*initnumbers(void)
{
int*numbers=malloc(maxnum*sizeof(int));
for(inti=0;i<maxnum;i++)
numbers[i]=i;
returnnumbers;
}
intgetnumber(int**numbers,intrandIndex,int*length)
{
intresult=(*numbers)[randIndex];
(*numbers)[randIndex]=(*numbers)[--(*length)];
int*temp=realloc(*numbers,(*length)*sizeof(int));
*numbers=temp;
returnresult;
}
bool_numexists(int*numbers,intstart,intend,intnum)
{
printf("start:%d,end:%d,num:%d\n",start,end,num);
if(start==end)
returnnumbers[start]==num;
else
{
intmiddle=(start+end)/2;
if(numbers[middle]==num)
returntrue;
elseif(numbers[middle]>num)
return_numexists(numbers,start,middle-1,num);
else
return_numexists(numbers,middle+1,end,num);
}
}
boolnumexists(int*numbers,intlength,intnum)
{
return_numexists(numbers,0,length-1,num);
}
希望本文对大家学习C++程序设计有所帮助。