C++简单贪吃蛇实现

C++简单贪吃蛇实现,第1张

概述C++简单贪吃蛇实现

下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。

内存溢出小编现在分享给大家,也给大家做个参考。

#include <iostream>#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include  <deque>#include <List>#define _SIZE_ 30#define _SET_ cout<<"3[?25l3[0m"static int flags = 0;typedef int Array[_SIZE_][_SIZE_]; using namespace std;struct Pos{    int x;    int y;    Pos(int X,int Y):x(X),y(Y){}};class Grial{    public:    Grial(Array a)    {        for(int i=0;i<_SIZE_;i++)        {            for(int j=0;j<_SIZE_;j++)            {                ar[i][j] = a[i][j];            }        }    }    voID Init(Pos start)    {        int i = 0;        int j = 0;        char ch;    deque<Pos> Q;    List<Pos> MList;    ar[start.x][start.y]    = 1;    Q.push_front(start);    while(1)        {      system("stty raw -echo");//改变终端控制,      //输入一个字符就立刻相应,将原来的\n作为结束的标志,      //改为输入一个字符就立即返回。        ch = getchar();        system("stty -raw echo");        //让终端变回正常。        switch(ch)        {            case 'w':                stateUp(Q);                     system("clear");            Printf();                    break;            case 'a':                stateleft(Q);                system("clear");                Printf();                    break;            case 'd':                stateRight(Q);                system("clear");                Printf();                    break;              case 's':                stateDown(Q);                system("clear");                Printf();                    break;            default:                if(ch=='0')                    exit(1);        }          GrialM(MList);            if(flags==0)            {            Pos pos = AdancePoint(MList);        ar[pos.x][pos.y] = 1;//随机点。            flags=1;            }          sleep(0.675);         }    }bool IsIn(Pos pos,deque<Pos> &Q){    deque<Pos> :: iterator it=Q.begin();    while(it!=Q.end())    {        if(pos.x==it->x && pos.y==it->y)            return true;        it++;    }    return false;}voID GrialM(List<Pos> &MList)//构造随机链表.{    for(int i=0;i<_SIZE_;i++)    {        for(int j=0;j<_SIZE_;j++)        {            if(ar[i][j]==0)            MList.push_back(Pos(i,j));        }    }}Pos AdancePoint(List<Pos> &MList){    int n = MList.size();    List<Pos> :: iterator it = MList.begin();    advance(it,rand()%n);    return Pos(it->x,it->y);}voID stateUp(deque<Pos> &Q)    {        Pos pos = Q.front();        int x ;        if(pos.x==0)        {   x = _SIZE_-1;}        else        {x = pos.x-1;}        int y = pos.y;    Pos result(x,y);    if(IsIn(result,Q))    {            exit(-1);    }        if(ar[x][y]==1)        {            Q.push_front(result);                   flags=0;            return ;        }        ar[x][y] = 1;        Q.push_front(result);       Pos ret = Q.back();        ar[ret.x][ret.y] = 0;        Q.pop_back();    }    voID stateleft(deque<Pos> &Q)    {        Pos pos = Q.front();        int x = pos.x;        int y;        if(pos.y==0)        {               y = _SIZE_-1;        }        else{y = pos.y-1;}        Pos result(x,y);        if(IsIn(result,Q))        {            exit(-1);        }        if(ar[x][y]==1)        {            Q.push_front(result);            flags=0;            return ;        }        ar[x][y] = 1;        Q.push_front(result);        Pos ret = Q.back();        ar[ret.x][ret.y] = 0;        Q.pop_back();    }    voID stateRight(deque<Pos> &Q)    {        Pos pos = Q.front();        int x = pos.x;        int y ;        if(pos.y==_SIZE_-1)        {            y=0;        }           else {y=pos.y+1;}        Pos result(x,Q))        {            exit(-1);        }        if(ar[x][y]==1)        {            Q.push_front(result);            flags=0;            return ;        }        ar[x][y] = 1;        Q.push_front(result);        Pos ret = Q.back();        ar[ret.x][ret.y] = 0;        Q.pop_back();    }    voID stateDown(deque<Pos> &Q)    {        Pos pos = Q.front();        int x ;        if(pos.x==_SIZE_-1)            {x=0;}        else {x = pos.x+1;}        int y = pos.y;        Pos result(x,Q))        {            exit(-1);        }        if(ar[x][y]==1)        {               Q.push_front(result);            flags=0;            return ;        }        ar[x][y] = 1;        Q.push_front(result);        Pos ret = Q.back();        ar[ret.x][ret.y] = 0;        Q.pop_back();    }    public:    voID Printf()    {        _SET_;        for(int i=0;i<_SIZE_;i++)        {            for(int j=0;j<_SIZE_;j++)            {                if(ar[i][j]==1)                    {                    cout<<"3[34m13[0m ";                    }                else                    cout<<ar[i][j]<<" ";            }            cout<<endl;        }    }    private:    Array ar;};int main(){    Array arr={0};    Grial gl(arr);    int x = rand()%10;    int y = rand()%10;    Pos start(x,y);    gl.Init(start);}

以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

总结

以上是内存溢出为你收集整理的C++简单贪吃蛇实现全部内容,希望文章能够帮你解决C++简单贪吃蛇实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存