自己做的贪吃蛇5.0不喜勿喷
2024-10-13 11:14:24
发布于:广东
#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;
}
全部评论 6
建议把此帖归类到灌水板块,谢谢配合!
2024-09-03 来自 加拿大
1建议把此帖归类到灌水板块,否则的话文章可能会被下架处理。最新的社区规定有提及。
2024-09-06 来自 加拿大
0你这怎么越走越慢啊
2024-08-29 来自 广东
0不可能,我加了新版测速器
2024-09-01 来自 广东
0我奶奶都嫌慢
2024-09-01 来自 广东
0好像是因你打印的太多了,每移动一次就打印一次墙、蛇、速度等,造成很大的浪费
比如墙是可以不用打印的,蛇只要改变头、原来的头和尾2024-09-01 来自 广东
0
别自夸了...
2024-08-28 来自 浙江
0作者真的是太良心了
2024-08-27 来自 广东
0这个游戏真的是太好玩了而且屏幕不会一直闪
2024-08-27 来自 广东
0
有帮助,赞一个