C++简单贪吃蛇实现
来源:互联网 发布:快速掌握java语言 编辑:程序博客网 时间:2024/05/17 04:34
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <deque>#include <list>#define _SIZE_ 30#define _SET_ cout<<"\033[?25l\033[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,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 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,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(); } public: void Printf() { _SET_; for(int i=0;i<_SIZE_;i++) { for(int j=0;j<_SIZE_;j++) { if(ar[i][j]==1) { cout<<"\033[34m1\033[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);}
2 0
- 贪吃蛇C实现
- VC6.0 C语言实现简单的贪吃蛇
- 简单贪吃蛇游戏的c语言实现
- 教你实现简单的贪吃蛇------C语言版
- 贪吃蛇的简单实现
- C++简单贪吃蛇实现
- android实现简单贪吃蛇
- Unity实现简单贪吃蛇
- 贪吃蛇----C语言实现
- C语言实现贪吃蛇
- [C++]C++实现贪吃蛇
- 贪吃蛇游戏(c实现)
- 控制台 简单 双链表贪吃蛇的实现
- C++贪吃蛇的简单实现版
- 控制台c++贪吃蛇的简单实现
- Java贪吃蛇的简单实现
- 简单贪吃蛇游戏的C++实现
- Java实现简单的贪吃蛇
- 去掉xcode源码末尾的空格
- Ubuntu Hadoop 2.6.0 单机版配置图文详解
- Linux常用命令
- Leetcode: Word Frequency (shell , awk)
- 理解矩阵(1,2,3)
- C++简单贪吃蛇实现
- mark-使用volley以及百度定位获取天气
- Qt信号与槽
- Linux Shell脚本攻略(1.5)
- 埃拉托色尼选筛法
- 给TableView设置背景图片
- HashMap存储的使用
- 黑马程序员——多线程(二)
- 工资管理系统