0
wasd控制方向
不同的颜色食物有不同的分值
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<windows.h>
#include<conio.h>
#include<cmath>
#include<chrono>
#include<cstring>
using namespace std;
int a[105][105],n,m;//地图
int dir[5][2]={{0,0},{-1,0},{0,-1},{0,1},{1,0}},way,wmp;
int sx,sy,ex,ey;//头坐标,尾坐标
int len,maxlen;//长度
int cnt,cntmax,score;//果子数量
int f[105][105];//方向地图
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
void setColor(int color) {//颜色函数
SetConsoleTextAttribute(hOut, color);
}
void mapout(){
for(int i=1;i<=m+2;i++){
cout<<"■";
}
cout<<endl;
for(int i=1;i<=n;i++){
cout<<"█";
for(int j=1;j<=m;j++){
if(a[i][j]==1){
setColor(FOREGROUND_GREEN);
cout<<"■";
setColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}else if(a[i][j]==2){
setColor(FOREGROUND_BLUE);
cout<<"■";
setColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}else if(a[i][j]==3){
setColor(FOREGROUND_RED | FOREGROUND_GREEN);
cout<<"■";
setColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}else if(a[i][j]==4){
setColor(FOREGROUND_RED | FOREGROUND_BLUE);
cout<<"■";
setColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}else{
cout<<" ";
}
}
cout<<"█";
cout<<endl;
}
for(int i=1;i<=m+2;i++){
cout<<"■";
}
cout<<endl;
}
void apple(){//生成果子
int tx=0,ty=0,step=0;
do{
step++;
tx=rand()%15+1;
ty=rand()%50+1;
}while(a[tx][ty]!=0 || tx==1 || ty==1 || tx==n || ty==m || step>50);
a[tx][ty]=rand()%3+2;
cout<<tx<<" "<<ty<<endl;
}
int main(){
srand(static_cast<unsigned int>(time(nullptr)));
n=15;
m=50;
while(true){
mapout();
a[1][(1+m)/2]=1;//出生点
way=4;//方向:下
sx=1;
sy=(1+m)/2;
ex=1;
ey=(1+m)/2;
len=1;
maxlen=2;
cnt=0;
cntmax=2;
while(true){
system("cls");
mapout();
setColor(FOREGROUND_RED);
cout<<"score:"<<score<<"\n";
setColor(FOREGROUND_RED | FOREGROUND_GREEN);
cout<<"lenth:"<<len<<"\n";
setColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
/*for(int i=1;i<=n;i++){
cout<<" ";
}
cout<<endl;
for(int i=1;i<=n;i++){
cout<<" ";
for(int j=1;j<=m;j++){
cout<<f[i][j];
}
cout<<endl;
}*/
for(int i=cnt;i<=cntmax;i++){
apple();
cnt++;
}
auto start_time=std::chrono::steady_clock::now();
auto now_time=std::chrono::steady_clock::now();
long long pass=0;
while(true){
if(_kbhit()){//改变方向
wmp=_getch();
if(wmp=='w'&&way==4 || wmp=='s'&&way==1 || wmp=='a'&&way==3 || wmp=='d'&&way==2){//与前进方向相反不改变(不能调头)
break;
}
if(wmp=='w') way=1;
if(wmp=='a') way=2;
if(wmp=='d') way=3;
if(wmp=='s') way=4;
break;
}
now_time=std::chrono::steady_clock::now();
pass=std::chrono::duration_cast<std::chrono::milliseconds>(now_time-start_time).count();
if(pass>=500){
break;
}
}
f[sx][sy]=way;
sx+=dir[way][0];
sy+=dir[way][1];
if(a[sx][sy]==1 || sx<1 || sx>n || sy<1 || sy>m){
setColor(FOREGROUND_RED);
cout<<"You did!";
Sleep(3000);
setColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
memset(a,0,sizeof(a));
memset(f,0,sizeof(f));
system("cls");
break;
}
if(a[sx][sy]>1){
maxlen++;
cnt--;
score+=a[sx][sy];
}
a[sx][sy]=1;
len++;
if(len>maxlen){
a[ex][ey]=0;
int t=f[ex][ey];
f[ex][ey]=0;
ex+=dir[t][0];
ey+=dir[t][1];
len--;
}
}
}
}/*
【1】 ↑(上)-1,0
【2】 ←(左)0,-1
【3】 →(右)0,1
【4】 ↓(下)1,0
*/
凌夏在2026-11-08 21:14:29追加了内容
使用时调成英文模式
