在c++控制台实现贪吃蛇
still_alive · · 个人记录
RT。
由于C++的中文显示问题,此程序并不稳定
WASD可以控制蛇上下左右移动(按一下动一下)
这是代码
#include<bits/stdc++.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
using namespace std;
int maps[22][22],d=1,len=1,dir[4][2]={0,-1,0,1,-1,0,1,0},flag=1;
short snake[410][2];
void new_(){
int a=rand()%20+1,b=rand()%20+1;
while(maps[a][b]!=0){
a=rand()%20+1,b=rand()%20+1;
}
maps[a][b]=500;
}
void check(){
int a=getch();
if(a=='a')d=0;
else if(a=='w') d=2;
else if(a=='d') d=1;
else if(a=='s') d=3;
}
void draw(){
cout<<"□□□□□□□□□□□□□□□□□□□□□score:"<<len<<endl;
for(int i=1;i<=21;i++){
cout<<"□";
for(int j=1;j<=21;j++){
if(maps[i][j]==500) cout<<"◆";
if(maps[i][j]==1){
if(snake[0][0]==i&&snake[0][1]==j)cout<<"●";
else cout<<"■";
}
if(maps[i][j]==0) cout<<" ";
}
cout<<"□"<<endl;
}
cout<<"□□□□□□□□□□□□□□□□□□□□□score:"<<len<<endl;
}
void move(){
int xx=snake[0][0]+dir[d][0],yy=snake[0][1]+dir[d][1];
if(xx<=0) xx=20;
if(xx>20) xx=1;
if(yy<=0) yy=20;
if(yy>20) yy=1;
if(maps[xx][yy]==1){
flag=0;
}
if(maps[xx][yy]==500){
len++;
new_();
}
maps[xx][yy]=1;
maps[snake[len-1][0]][snake[len-1][1]]=0;
for(int i=len-1;i>=1;i--){
snake[i][0]=snake[i-1][0];
snake[i][1]=snake[i-1][1];
}
snake[0][0]=xx;
snake[0][1]=yy;
}
int main(){
unsigned seed;
seed = time(0);
srand(seed);
system ("cls");
cout<<"贪吃蛇"<<endl;
cout<<"按任意键开始";
getch();
system ("cls");
snake[0][0]=1;
snake[0][1]=1;
maps[1][1]=1;
new_();
while(flag){
draw();
check();
move();
system ("cls");
}
system ("cls");
cout<<"Game Over";
}