有谁帮忙看看我这代码哪错了!为什么贪吃蛇尾部不消失!!

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<unistd.h>//包含sleep(1); 
using namespace std;
	int k=3;
	char key='d';
	char a[20][30];
	int b[300][2]={{0,0},{2,3},{2,4},{2,5}};
	int c[2]={2,20};
    int w=0;
    int d[15][2]={{2,20},{4,29},{5,15},{9,2},{7,17},{3,13},{4,1},{7,4},{5,21},{3,11},{4,12},{7,15},{6,19},{9,28},{1,23}};
	bool f(){
		if(b[1][0]==1||b[1][0]==10||b[1][1]==1||b[1][1]==30){
			return 0;
		}
		else return 1;
	}
	void dy(){
		for(int i=1;i<=10;i++){
			for(int j=1;j<=30;j++){
				cout<<a[i][j];
			}
			cout<<endl;
		}
	}
	void f2(){
		if(key=='w'){
			a[b[1][0]-1][b[1][1]]='0';
			a[b[k][0]][b[k][1]]='w';
			for(int i=1;i<=k;i++){
				b[i][0]--;
			}
		}
		else if(key=='s'){
			a[b[1][0]+1][b[1][1]]='0';
			a[b[k][0]][b[k][1]]='w';
			for(int i=1;i<=k;i++){
				b[i][0]++;
			}
		}
		else if(key=='a'){
			a[b[1][0]][b[1][1]+1]='0';
			a[b[k][0]][b[k][1]]='w';
			for(int i=1;i<=k;i++){
				b[i][1]--;
			}
		}
		else if(key=='d'){
            a[b[1][0]][b[1][1]+1]='0';
			a[b[k][0]][b[k][1]]='w';
			for(int i=1;i<=k;i++){
				b[i][0]++;
			}
		}
	}
int main(){
	for(int i=1;i<=10;i++){
		for(int j=1;j<=30;j++){
			if(i==1||i==10||j==1||j==30){
				a[i][j]='#';
			}
			else if(i==c[0]&&j==c[1]){
				a[i][j]='*';
			}
			else if(i==2&&j==2||i==2&&j==3||i==2&&j==4){
				a[i][j]='0';
			}
			else{
				a[i][j]='w';
			}
		}
	}
	while(f()==1){
		bool fla=0;
		key='d';
		if(_kbhit()){
			char a=getch();
			fla=1;
			key=a;
			f2();
		}
		sleep(2);
		system("cls");
		if(fla==1){
			fla=0;
			goto label;
		}
		f2();
		label:
		if(b[1][0]==c[0]&&b[1][1]==c[1]){
			b[k+1][0]=b[k][0];
			b[k+1][1]=--b[k][1];
			++k;
			if(w==15){
				w=1;
			}
			else w++;
			a[b[k][0]][b[k][1]]='0';
    		c[0]=d[w][0];
			c[1]=d[w][0];
			a[c[0]][c[1]]='*';
		}
		dy();
	}
	system("cls");
	system("color 70");
	cout<<"game over!!";
	sleep(2);
    return 0;
}

1 个赞

《响尾蛇》 (doge)