贪吃蛇

想写一个贪吃蛇~先占个坑

-----------------------------------

来填坑了,啦啦啦。

#include<iostream>
#include<windows.h>
#include<time.h>
#include<conio.h>
using namespace std;
void gotoxy(int x,int y)
{
	COORD a;  /*COORD表示一个字符在控制台屏幕上的坐标。*/
	a.X=x;
	a.Y=y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),a);
		/*SetConsoleCursorPosition定位光标位置的函数,坐标为GetStdHandle()返回标准的输出的句柄,
		也就是获得输出屏幕缓冲区的句柄,并赋值给对象a*/
		/*GetStdHandle()返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误
		的屏幕缓冲区的句柄。*/
}

void color(int a)              //颜色函数
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
/*SetConsoleTextAttribute是API设置控制台窗口字体颜色和背景色的函数*/
}

struct point 
{
	int x;
	int y;
	
};

class asnake
{
	private:
		int image[20][30];//小蛇活动范围
		point snake[2000];
		int foodx;
		int foody;
		int snakex;
		int snakey;
		int head;//头部下标 
		int tail;
		int direct;
		int gamespeed;
		int score;
		int numx;
		char arrowkey;
		int gameover;
		int level;
	public:
		asnake()
		{		    
	        head=3;                //初始化头部下标
	        tail=0;                //初始化尾部下标
	    	gamespeed=150;         //游戏速度(移动的间隔时间)
	    	score=0;               //初始化分数为0
	        direct='d';            //小蛇的初始方向向右
			gameover=0;            //进入游戏初始化为0
			level=1;
		}	
		void init();                //初始化游戏面板及小蛇的坐标
		int  drawsnake();           //记录小蛇每次移动后头部及身体的下一坐标
		void  automove();            //使小蛇自动移动
	    int  over();            //判断游戏是否结束
		int  generatefood();        //产生食物
		void display();             //显示游戏面板
		void shiftleft();  	        //控制左移
		void shiftright();          //控制右移
		void shiftdown();           //控制下移
		void shiftup();	            //控制上移
		int  playgame();            //执行游戏的函数
		void setspeed();            //设置速度
		int pause();                //游戏的暂停	 
};

void asnake::init()//初始化 
{
	for(int i=0;i<20;i++)
	{
		for(int j=0;j<30;j++)
		{
			image[i][j]=0;
		}
	}
	for(int j=0;j<4;j++)
	{
		snake[j].x=1;
		snake[j].y=j+1;
	}
	for(int i=1;i<=4;i++)
	{
		image[1][i]=3;
		
	}
}

int asnake::over()
{
	if(snakex<0||snakex>19||snakey<0||snakey>29)
	{
		system("cls");
		gotoxy(35,5);
		cout << "-----Game over23333!-----" << endl<<endl;
		gameover=1;
		return gameover;
	}
	if((image[snakex][snakey]!=0)&&!(snakex==foodx&&snakey==foody))
	{
		system("cls");
		gotoxy(35,5);
		cout << "-----Game over23333!-----" << endl<<endl;
		gameover=1;
		return gameover;
	}
	return 0;
}
int asnake::generatefood()                                        // 产生食物
{  
	srand(time(0));                                              
	do{ 
     foodx=rand()%20;                                             
     foody=rand()%30;                                            
	}while(image[foodx][foody]!=0);                               
    image[foodx][foody]=2;
 return image[foodx][foody];
 /*通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,
 进而产生不同的随机数序列 */
}

void asnake::display()//画出所有的图像。 
{
	color(10);
	gotoxy(0,0);
	for(int i=0;i<32;i++)
	{
		cout<<"■";
	} 
	gotoxy(0,1);
	for(int i=0;i<20;i++)
	{
		
		cout<<"■";
		for(int j=0;j<30;j++)
		{
			switch(image[i][j])
			{
				case 0:cout<<"  ";break;
				case 2:color(12);cout<<"◆";break;
				case 3:color(11);cout<<"●";break;
			}
		}
		color(10);
		cout<<"■"<<endl;
	}
	color(10);
	for(int i=0;i<32;i++)
	cout<<"■";
	cout<<endl;
	color(14);
	gotoxy(70,10);
	cout<<"SCORE: "<<score<<endl<<endl;
	gotoxy(70,12);
	cout<<"level: "<<level<<endl; 
}
int asnake::drawsnake()
{
	if(snakex==foodx&&snakey==foody)
	{
		score+=10;
		image[foodx][foody]=3;
		head++;
		snake[head].x=snakex;
		snake[head].y=snakey;
		display();
		generatefood();
		if(score>40&&score<90) 
		{
			gamespeed=gamespeed/2;
			level=2;
		}
		else if(score>90&&score<140) 
		{
			gamespeed=gamespeed/10;
			level=3;
		}
		else if(score>140&&score<200) 
		{
			gamespeed=gamespeed/10;
			level=3;
		}
		else if(score>280) 
		{
			gamespeed=gamespeed/10;
			level=4;
		}
		else if(score==360)
		{
			system("cls");
			color(15);
			gotoxy(30,10);
			cout<<"-----你这只猪哈哈哈哈哈哈------"<<endl; 
			exit(0);
		}
	}
	else
	{
		image[snake[tail].x][snake[tail].y]=0;                            
        tail++;                            
        head++;
        snake[head].x=snakex;           
        snake[head].y=snakey;
        image[snake[head].x][snake[head].y]=3; 
        display(); 
	}
	return 0;
}  
void asnake::shiftleft()
{
	direct='a';
} 	        
void asnake::shiftright()
{
	direct='d';
}         
void asnake::shiftdown()
{
	direct='s';
}           
void asnake::shiftup()
{
	direct='w';
}	

void  asnake::automove()
{
	switch(direct)
	{
		case 'd':snakex= snake[head].x; snakey= snake[head].y+1;break; 
		case 'a':snakex= snake[head].x; snakey= snake[head].y-1;break; 
		case 'w':snakex= snake[head].x-1; snakey= snake[head].y;break; 
		case 's':snakex= snake[head].x+1; snakey= snake[head].y;break; 
 	    default:;
		
	}
}

void asnake::setspeed()
{
	int speed,mark=0;
	
	for(int i=0;i<10;i++)
	{
		cout<<endl;
	}
	cout<<"                            make your choice first please"<<endl<<endl;
	cout<<"                1.slow   2.normal   3.fast   4.very fast   5.very very fast,hahaha"<<endl<<endl;
	
	while(mark==0)
	{
		
		cout<<"                                ";cin>>speed;
		switch(speed)
		{
			case 1:gamespeed=150;mark=1;break;
			case 2:gamespeed=125;mark=1;break;
			case 3:gamespeed=100;mark=1;break;
			case 4:gamespeed=50;mark=1;break;
			case 5:gamespeed=10;mark=1;break;
			default:cout<<"别乱按。。!"<<endl;break;
		}
	}
	
}  

int asnake::playgame()
{ 
	 init();                //初始化游戏面板及小蛇的坐标
	 generatefood();
	 display();            //显示游戏面板
	 
	 while(gameover==0)
	 { 
	 	if(kbhit()!=0)    //kbhit() 功能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0       
		{				//接受按键
          arrowkey = getch();
        }	
	 	if(direct=='w'||direct=='s')
	 	{
	 		switch(arrowkey)
	 		{
	 			case 'd':shiftright();break;
	 			case 'a':shiftleft();break;
	 			default:break;
	 		}
	 	}
	 	else 
	 	{
	 		switch(arrowkey)
	 		{
	 			case 's':shiftdown();break;
	 			case 'w':shiftup();break;
	 			default:break;
	 		}
	 	}
	 	Sleep(gamespeed);
	 	automove();  
	 	over();
	 	if(gameover==1) break;
	 	drawsnake();
	 	display();
	 }
	return 0;
}

int main()
{

	for(int i=0;i<10;i++)
	{
		cout<<endl;
	}
	color(15);
	cout<<"                 --------------          贪~吃~蛇~         --------------         "<<endl;
	cout<<"                -----------游戏规则:w向上,a向左,d向右,s向下。-----------"<<endl;
	for(int i=0;i<10;i++)
	{
		cout<<endl;
	}
	system("pause");
	system("cls");
	asnake SNAKE;
	SNAKE.setspeed();
	system("cls"); 
	SNAKE.playgame();
	return 0;
} 
 


你可能感兴趣的:(贪吃蛇)