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++程序设计有所帮助。