贪吃蛇

来源:互联网 发布:u盘小型linux 编辑:程序博客网 时间:2024/04/30 08:30
<pre name="code" class="cpp">stdafx.h 和 targetver.h 需要添加到文件夹
// tcs.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <windows.h>#include <stdlib.h>#include <conio.h>#include <time.h>  //使用当前时间做种子;using namespace std;enum dir{up,down,leftt,rightt};  //枚举类型enum dir;//围墙;class Fence{public:void InitFence();void OutputF();public:int count;char game[20][20];}f; //定义对象;//画框框;void Fence::InitFence(){count=0;for(int i=0; i<20; i++)for(int j=0; j<20; j++){if(i==0||i==19||j==0||j==19)game[i][j]= '*';else game[i][j]= ' ';}}//显示框框;void Fence::OutputF(){for(int i=0; i<20; i++){for(int j=0; j<20; j++)cout<<game[i][j]<<' ';cout<<endl;}cout<<"您当前的分数为:";cout<<count<<endl;}//蛇结点;class SnakeNode{private:int x,y;SnakeNode *prior,*next;public:void add_head(int x,int y);int get_x();int get_y();void delete_tail();}*head=NULL, *tail =NULL;//插入头结点;void SnakeNode::add_head(int x,int y){SnakeNode *q=new SnakeNode;q->x =x; q->y =y;q->next =head;q->prior =NULL;if(head) head->prior =q;head =q;if(!tail) tail =head;f.game[x][y]= '*';  //f对象可以在定义Fence类时定义; 且Fence类在SnakeNode类前定义;}int SnakeNode::get_x(){return x;}int SnakeNode::get_y(){return y;}//删除尾结点;void SnakeNode::delete_tail(){SnakeNode *p =tail;f.game[tail->get_x()][tail->get_y()]= ' ';//把尾结点的坐标表示的'*'置为空格;if(tail==head)tail= head= NULL;else{tail= tail->prior;tail->next= NULL;}delete p;}//move移动;class moveing{public:dir point,checks;   //枚举变量point: 控制方向;int food_x;int food_y;public:void moving();void change_point(int);  //改变方向;void get_food();};void moveing::moving(){int a,b;a= head->get_x();  //取得头结点横坐标b= head->get_y();  //头结点纵坐标switch(point){case up: --a; break;case down: ++a; break;case leftt: --b; break;case rightt: ++b; break;}if(a==19||b==19||a==0||b==0){//判断是否撞墙;cout<<"你撞墙了game over!!!"<<endl;exit(0);}if(a!=food_x && b!=food_y && f.game[a][b]=='*'){cout<<"咬到自己game over!!!"<<endl;exit(0);}if(a==food_x && b==food_y){//吃food;head->add_head(a,b);f.count=f.count+1;get_food(); }else{head->add_head(a,b); //插入头结点;head->delete_tail(); //删除尾结点;}}void moveing::change_point(int keydown){switch(keydown){case 72: point= up; break;case 80: point= down; break;case 75: point= leftt; break;case 77: point= rightt; break;}}void moveing::get_food(){srand((unsigned int) time(NULL)); //做种子(程序运行时间); food_x= rand()%18+1; food_y= rand()%18+1;while(f.game[food_x][food_y]=='*'){food_x= rand()%18+1; food_y= rand()%18+1;}f.game[food_x][food_y]= '*';}//main();int main(){cout<<"用'↑,↓,←,→'控制方向,其中任意方向开始!!!\n\n";//画框框和小蛇;moveing m;f.InitFence();head->add_head(4,3);head->add_head(4,4);head->add_head(4,5);m.get_food();f.OutputF();m.point=rightt;while (true){m.checks=m.point;int keydown= getch(); //getch()返回键盘上读取的字符;包含头文件<conio.h>m.change_point(keydown);while(!kbhit()){//判断有没有按键落下;if((m.checks==up && m.point==down)||(m.checks==down && m.point==up)||(m.checks==leftt && m.point==rightt)||(m.checks==rightt && m.point==leftt)){m.point=m.checks;}system("cls");  //清屏函数;m.moving();f.OutputF();Sleep(500);}}return 0;}

0 0