在c++控制台实现贪吃蛇

· · 个人记录

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";
}