C++贪吃蛇代码问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 05:21:58
我自己写了段贪吃蛇C++的代码,但是有BUG。具体就是如何防止水果产生在蛇身上,我的算法有问题。具体代码如下:

void RE_FRUIT(int *foodx,int *foody,int *length,int snakex[],int snakey[]) //布置水果的位置
{
while(1)
{
srand((unsigned)time(NULL));
*foodx=2*(rand()%30);
*foody=rand()%20;
if(*foodx>=4&&*foody>=2) //检测水果位置是否正确
{
for(int n=0;n<*length;n++)
{
if((snakex[n]!=*foodx)&&(snakey[n]!=*foody))
continue;
else
break;
}
break;
}
else
continue;
}
}

void PRODUCT_FRUIT(int snakex[],int snakey[],int *length,int *foodx,int *foody,WORD wColors[],HANDLE handle) //布置水果位置
{
textout(handle,*foodx,*foody,wColors+2,1,"●");
if(snakex[0]==*foodx&&snakey[0]==*foody)
{
*length=*length+1;
RE_FRUIT(foodx,foody,length,snakex,snakey);
textout(handle,*foodx,*foody

int n;
while(1)
{
srand( ( unsigned )time(NULL));
*foodx=2*(rand()%30);
*foody=rand()%20;

// 检测水果位置是否正确
if( *foodx >=4 && *foody >= 2 ) {
for ( n = 0; n < *length; n++ ) {
if ( ( snakex[n] == *foodx ) && ( snakey[n] == *foody ) ) {
// 和蛇冲突
break;
}
}
if ( n == *length ) {
// 上面for循环完全执行没有break, 退出循环
break;
}
}
}

另外写代码不要吝啬 {、}、 空格、空行等,可以提高代码可读性
一般用引用传递参数也比指针来的更好读
计算随机数也可以改进一下
我一般这样:
void RE_FRUIT( int &iFoodX, int &iFoodY, int iLength, int snakeX[], int snakeY[] ) {
int n;

for( ;; ) {
srand( ( unsigned )time( NULL ) );
iFoodX = 2 * ( rand() % 28 + 2 ); // 为何要偶数??
iFoodY = rand() % 18 + 2;

// 检测水果位置是否正确
for ( n = 0; n < iLength; n++ ) {
if ( ( snakeX[n] == iFoodX ) && ( snakeY[n] == iFoodY ) ) {
// 和蛇冲突
break;
}
}
if ( n == iLength