贪吃蛇身体更新bug求调
  • 板块题目总版
  • 楼主Noivelist
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/8/4 09:34
  • 上次更新2025/8/4 15:53:04
查看原帖
贪吃蛇身体更新bug求调
700335
Noivelist楼主2025/8/4 09:34
#include<bits/stdc++.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
using namespace std;
int snake[11][11],refresh[11][11],head_x,head_y,tail_x,tail_y,score;
int deltax[5]={0,-1,1,0,0};
int deltay[5]={0,0,0,-1,1};
struct Noivelist{
	int dx,dy;
}id[10010];
bool is_fruit=false;
//0->map  -1->fruit
void set_fruit();
int get_key();
void show_map();
void movement();
void init();
void lauch();
void is_dead();
void is_win();
void eat_fruit(int now_x,int now_y);
void not_eat_fruit(int now_x,int now_y);
int main(){
	lauch();
	return 0;
}
void is_win(){
	system("cls");
	string str1="score: 121!!";
	string str2="WTF,you did that and won?";
	string str3="how did you do that ??";
	for(int i=0;i<str1.size();i++){
		printf("%c",str1[i]);
		Sleep(100);
	}
	printf("\n");
	for(int i=0;i<str2.size();i++){
		printf("%c",str2[i]);
		Sleep(100);
	}
	printf("\n");
	for(int i=0;i<str3.size();i++){
		printf("%c",str3[i]);
		Sleep(100);
	}
	printf("\n");
	exit(0);
}
void lauch(){
	init();
	show_map();
	for(int i=0;i<11;i++){
		for(int j=0;j<11;j++){
			cout<<snake[i][j];
		}
		cout<<endl;
	}
	while(score<121){
		printf("score: %d\n\n",score);
		printf("use w a s d to move\n\n");
		movement();
		if(!is_fruit)set_fruit();
		system("cls");
		show_map();
		cout<<endl<<endl<<endl;
		for(int i=0;i<11;i++){
			for(int j=0;j<11;j++){
				cout<<snake[i][j];
			}
			cout<<endl;
		}
	}
	is_win();
}
void is_dead(){
	system("cls");
	string str1="score:";
	string str2="what a pityyyyyy...";
	for(int i=0;i<str1.size();i++){
		printf("%c",str1[i]);
		Sleep(200);
	}
	int sc[10],cnt=0;
	memset(sc,0,sizeof sc);
	while(score>0){
		sc[++cnt]=score%10;
		score/=10;
	}
	for(int i=cnt;i>=1;i--){
		printf("%d",sc[i]);
		Sleep(200);
	}
	printf("\n");
	for(int i=0;i<str2.size();i++){
		printf("%c",str2[i]);
		Sleep(200);
	}
	printf("\n");
	exit(0);
}
void init(){
	for(int i=0;i<11;i++)for(int j=0;j<11;j++)snake[i][j]=0;
	snake[5][5]=score+3;
	head_x=5,head_y=5;
	tail_x=5,tail_y=5;
	score=0;
	set_fruit();
}
void movement(){
	int direction=get_key();
	int dx=deltax[direction];
	int dy=deltay[direction];
	int now_x=dx+head_x,now_y=dy+head_y;
	if(snake[now_x][now_y]==score+2 and snake[now_x][now_y]!=0){
		dx*=-1,dy*=-1;
		now_x=dx+head_x;
		now_y=dy+head_y;
		int t=snake[now_x][now_y];
		if(t==-1)eat_fruit(now_x,now_y);
		if((t!=-1&&t!=0)||now_x<0||now_x>11||now_y<0||now_y>11)is_dead();
		if(t==0)not_eat_fruit(now_x,now_y);
	}else{
		int t=snake[now_x][now_y];
		if(t==-1)eat_fruit(now_x,now_y);
		if((t!=-1&&t!=0)||now_x<0||now_x>11||now_y<0||now_y>11)is_dead();
		if(t==0)not_eat_fruit(now_x,now_y);
	}
	
}
void eat_fruit(int now_x,int now_y){
	id[score+3].dx=now_x;
	id[score+3].dy=now_y;
	score++;
	snake[now_x][now_y]=score+3;
	head_x=now_x;
	head_y=now_y;
	is_fruit=false;
}
void not_eat_fruit(int now_x,int now_y){
//	for(int i=3;i<=score+3;i++)cout<<i<<' '<<id[i].dx<<' '<<id[i].dy<<endl;
//	Sleep(1000);
//	cout<<endl;
//	int p_x=tail_x,p_y=tail_y;
//	id[score+3].dx=now_x;
//	id[score+3].dy=now_y;
//	snake[p_x][p_y]=0;
//	for(int i=3;i<=score+3;i++){
//		int to_x=id[i].dx;
//		int to_y=id[i].dy;
//		id[i-1].dx=id[i].dx;
//		id[i-1].dy=id[i].dy;
//		snake[p_x][p_y]=(snake[p_x][p_y]<=3?0:snake[p_x][p_y]-1);
//		p_x=to_x;
//		p_y=to_y;
//	}
//	cout<<endl;
//	cout<<tail_x<<' '<<tail_y<<endl;
//	Sleep(200);
//	snake[now_x][now_y]=score+3;
//	tail_x=id[3].dx;
//	tail_y=id[3].dy;
//	head_x=now_x;
//	head_y=now_y;
	
	snake[now_x][now_y]=score+3;
	snake[head_x][head_x]=0;
	head_x=now_x,head_y=now_y;
	for(int i=score+2;i>=3;i--){
		snake[id[i].dx][id[i].dy]=i;
		int tx=id[i].dx,ty=id[i].dy;
		id[i].dx=now_x,id[i].dy=now_y;
		now_x=tx,now_y=ty;
		
	}
	tail_x=now_x,tail_y=now_y;
	cout<<head_x<<' '<<head_y<<endl;
	cout<<tail_x<<' '<<tail_y<<endl;
	Sleep(500);
	if(tail_x==head_x&&tail_y==head_y)return;
	else snake[tail_x][tail_y]=0;
	return;
}
void show_map(){
	for(int i=1;i<=13;i++)cout<<"# ";
	cout<<endl;
	for(int i=0;i<11;i++){
		cout<<"# ";
		for(int j=0;j<11;j++){
			int t=snake[i][j];
			if(t==0)printf("  ");
			if(t!=0&&t!=score+3&&t!=-1)printf("O ");
			if(t==score+3)printf("@ ");
			if(t==-1)printf("$ ");
		}
		cout<<"# ";
		printf("\n");
	}
	for(int i=1;i<=13;i++)cout<<"# ";
	cout<<endl;
}
void set_fruit(){
	is_fruit=true;
	srand(time(NULL));
	int x=rand()%11,y=rand()%11;
	while(snake[x][y]!=0)x=rand()%11,y=rand()%11;
	snake[x][y]=-1;
}
int get_key(){
	char key;
	while(1){
		if(_kbhit()){
			key=getch();
			if(key==97)return 3;
			if(key==115)return 2;
			if(key==100)return 4;
			if(key==119)return 1;
			return get_key();
		}
	}
}


2025/8/4 09:34
加载中...