自己做的贪吃蛇5.0不喜勿喷
  • 板块灌水区
  • 楼主shenzhen01
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/13 11:17
  • 上次更新2024/10/13 11:42:05
查看原帖
自己做的贪吃蛇5.0不喜勿喷
1497290
shenzhen01楼主2024/10/13 11:17
#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
using namespace std; 
int best = 0;
int snake[1005][2]={},s_size = 3,s_way=2,size=15,score = 0,t_s;
int up_y=snake[1][0],up_x=snake[1][1],this_y=1,this_x=1,r_s = size-2;
int c_y,c_x;
char input,yes;
void gotoxy(int x,int y){
	COORD pos = {x,y};
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut, pos);
}
int c_best(){
	if(score>best)best = score;
}
string place[15][15]={};
void build_place_and_snake(){
	for(int i=0;i<size;i++){
		for(int j=0;j<size;j++)place[i][j]="  "; 
	}
	for(int i=0;i<size;i++){
		place[0][i]="墙";
		place[size-1][i]="墙";
		place[i][0]="墙";
		place[i][size-1]="墙";
	}for(int i=1;i<=s_size;i++){
		snake[i][1]=s_size+1-i;
		snake[i][0]=1;
		place[snake[i][0]][snake[i][1]]="身";
	}place[1][3]="头"; 
	place[c_y][c_x] = "糖";
}void draw(){
	gotoxy(0,0);
	cout << endl << endl << endl << endl << endl;
	for(int i=0;i<size;i++){
		cout << "                    ";
		for(int j=0;j<size;j++){
			cout << place[i][j];
		}cout << endl;
	}cout <<endl<< "                      ";
	cout << "score:" << score << "       best score:" << best << endl;
	cout <<endl<< "             ";
	cout << "按下键盘上的w a s d进行移动,按e退出此次游戏,空格暂停" << endl;
}void move(int way){
	up_y=snake[1][0];
	up_x=snake[1][1];
	if(way==1)snake[1][0]--;
	else if(way==2)snake[1][1]++;
	else if(way==3)snake[1][0]++;
	else if(way==4)snake[1][1]--;
	for(int i=2;i<=s_size;i++){
		this_y=snake[i][0];
		this_x=snake[i][1];
		snake[i][0]=up_y;
		snake[i][1]=up_x;
		up_y=this_y;
		up_x=this_x;
	}place[this_y][this_x] = "  ";
	for(int i=2;i<=s_size;i++){
		place[snake[i][0]][snake[i][1]] = "身";
	}place[snake[1][0]][snake[1][1]] = "头";
}bool end(){
	if(snake[1][0] == 0 or snake[1][0] == size-1 or snake[1][1]== 0 or snake[1][1] == size-1)return false;
	else return true;
}void be_long(){
	s_size++;
	snake[s_size][0] = this_y;
	snake[s_size][1] = this_x;
	place[snake[s_size][0]][snake[s_size][1]] = "身";
}void candy(){
	t_s-=15;
	be_long();
	score++;
	do{
		c_x = rand()%r_s+1;
		c_y = rand()%r_s+1;
	}while(place[c_y][c_x]!="  ");
	place[c_y][c_x] = "糖"; 
}void be_0(){
	string place[15][15]={};
	snake[1005][2]={};
	s_size = 3;
	s_way=2;
	size=15;
	score = 0;
    up_y=snake[1][0];
	up_x=snake[1][1];
	this_y=1;
	this_x=1;
	r_s = size-2;
    c_x = rand()%r_s+1;
	c_y = rand()%r_s+1;
	build_place_and_snake(); 
}
void work(int s){
	build_place_and_snake();
	draw();
	be_0; 
	t_s = 500;
	while(end()){
		if(s==3141)Sleep(t_s);
		else Sleep(s);
		srand(time(0)); 
		while(kbhit()){
			input = getch();
		}
		if(input=='w' and place[snake[1][0]-1][snake[1][1]]!="身") move(1);
		else if(input=='d' and place[snake[1][0]][snake[1][1]+1]!="身") move(2);
		else if(input=='s' and place[snake[1][0]+1][snake[1][1]]!="身") move(3);
		else if(input=='a' and place[snake[1][0]][snake[1][1]-1]!="身") move(4);
		else if(input=='w' or input=='d' or input=='a' or input=='s' or input=='e')break;
		if(snake[1][0] == c_y and snake[1][1] == c_x)candy();
		c_best();
		draw();
		cout <<endl<< "             ";
		if(s==3141)printf("当前速度为:%.2fm/s\n",1000.0/t_s); 
		else printf("当前速度为:%.2fm/s\n",1000.0/s); 
	}system("cls");
}
int main(){
	srand(time(0));
	c_x = rand()%r_s+1;
	c_y = rand()%r_s+1 ;
	build_place_and_snake();
	while(true){
		be_0();
		cout << endl << endl << endl << endl << endl << endl;
		cout << "                  按数字1~6选难度,按下空格结束"<<endl;
		cout << "                  简单 容易 正常 困难 魔鬼 自动   "<<endl; 
		cout << "                        best score:" << best << endl; 
		yes = getch();
		input = 'f';
		if(yes==' ')break;
		else if(yes == '1')work(500);
		else if(yes == '2')work(400);
		else if(yes == '3')work(300);
		else if(yes == '4')work(140);
		else if(yes == '5')work(90); 
		else if(yes == '6')work(3141); 
		else system("cls");
	}system("cls");
	cout << endl << endl << endl << endl << endl << endl;
	cout << "                            游戏结束" << endl;
	cout << "                        你的最佳成绩是:" << best;
	cout << endl << endl << endl << endl << endl << endl;
}
2024/10/13 11:17
加载中...