zoukankan      html  css  js  c++  java
  • 纯C实现的一套low b 贪吃蛇(娱乐版)

    菜鸟瞎玩玩。:-D

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <windows.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    #define FrameX 4
    #define FrameY 4
    #define Frame_width 20
    #define Frame_height 20
    
    //Snake的结构体
    struct 	Snake
    {
    	int x[150];
    	int y[150];
    	int length;
    	int speed;
    };
    
    struct Food
    {
    	int x,y;
    };
    
    int i;
    int isLong;
    int tailx,taily;
    
    void MainMenu();
    void SetWindowsSize(int w,int h);
    void Gotoxy(int x,int y);
    void Hide();
    void SetColor();
    void StartGame();
    void MakeFrame();
    void InitSnake(struct Snake* snake);
    void PrintfSnake(struct Snake* snake);
    void ShowInfo(struct Snake* snake);
    void MoveSnake(struct Snake* snake);
    void MakeFood(struct Snake* snake,struct Food* food);
    void EatFood(struct Snake* snake,struct Food* food);
    void GameOver();
    int IfDie(struct Snake* snake);
    
    void MainMenu()
    {
    	unsigned char ch;
    
    	printf("
    
    
    ");
    	printf("		╔---------------------------------------------╗
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃            贪吃蛇游戏---后宫版              ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃               按任意键开始游戏              ┃
    ");
    	printf("		┃             ********************            ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		╚---------------------------------------------╝
    ");
    
    	ch = getch();
    
    }
    
    /******显示游戏信息***********/
    void ShowInfo(struct Snake* snake)
    {
    	Gotoxy(FrameX+2*Frame_width+3,FrameY+2);
    	printf("当前后宫王等级:%d",(snake->length-3)/5+1);
    	Gotoxy(FrameX+2*Frame_width+3,FrameY+3);
    	printf("当前速度:%d",snake->speed);
    	Gotoxy(FrameX+2*Frame_width+3,FrameY+4);
    	printf("当前后宫指数:%d",(snake->length-3)*50);
    }
    
    /*********设置窗口大小***********/
    void SetWindowsSize(int w,int h)
    {
    
    	HANDLE hout;/*标准输入输出句柄*/
    	COORD size = {w,h};/*控制窗口大小*/
    	hout = GetStdHandle(STD_OUTPUT_HANDLE);
    	SMALL_RECT rc = {0,0,w-1,h-1};
    	SetConsoleWindowInfo(hout,TRUE,&rc);
    	SetConsoleScreenBufferSize(hout,size);
    
    }
    /***********光标跳转到指定位置***********/
    void Gotoxy(int x,int y)
    {
    	HANDLE hout;
    	hout = GetStdHandle(STD_OUTPUT_HANDLE);
    	COORD pos;
    	pos.X = x;
    	pos.Y = y;
    	SetConsoleCursorPosition(hout,pos);
    }
    
    /**************隐藏光标****************/
    void Hide()
    {
    	HANDLE hout;
    	hout = GetStdHandle(STD_OUTPUT_HANDLE);
    	CONSOLE_CURSOR_INFO info = {1,0};
    	SetConsoleCursorInfo(hout,&info);
    }
    
    /**********改变文字颜色*********/
    void SetColor()
    {
    	HANDLE hout;
    	hout = GetStdHandle(STD_OUTPUT_HANDLE);
    	SetConsoleTextAttribute(hout,FOREGROUND_INTENSITY|BACKGROUND_INTENSITY|BACKGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_RED|FOREGROUND_RED);
    }
    
    /*****图形构件
    ╔╗
    ║║
    ╚╝═
    ♂♀…
    *****/
    
    /***********初始化snake的数据*********/
    void InitSnake(struct Snake* snake)
    {
    	snake->length = 3;
    	snake->speed = 300;
    	snake->x[0] = FrameX+2;
    	snake->y[0] = FrameY+Frame_height/2;
    	for(i=1 ; i<snake->length ; i++)
    	{
    		snake->x[i] = snake->x[i-1]+2;
    		snake->y[i] = snake->y[i-1];
    	}
    }
    
    /*********打印snake***********/
    void PrintfSnake(struct Snake* snake)
    {
    	for(i=0 ; i<snake->length ; i++)
    	{
    		Gotoxy(snake->x[i],snake->y[i]);
    		if(i == 0)printf("…");
    		else if(i  == snake->length-1)printf("♂");
    		else printf("♀");
    	}
    }
    
    /**********显示游戏界面,控制游戏********/
    void StartGame()
    {
    	system("cls");
    	struct Snake* snake;
    	struct Food* food;
    	snake = (struct Snake*)malloc(sizeof(struct Snake));
    	food = (struct Food*)malloc(sizeof(struct Food));
    	MakeFrame();
    	InitSnake(snake);
    	PrintfSnake(snake);
    	ShowInfo(snake);
    	MakeFood(snake,food);
    	unsigned char ch;
    
    	while(1)
    	{
    		isLong = 0;
    		if(kbhit())
    		{
    			ch = getch();
    			if(kbhit())
    			{
    				Sleep(20);
    				isLong = 1;
    			}
    		}
    		if(ch == 27)break;
    		switch(ch)
    		{
    			case 72:
    				MoveSnake(snake);
    				snake->y[snake->length-1] -= 1;
    				break;
    			case 80:
    				MoveSnake(snake);
    				snake->y[snake->length-1] += 1;
    				break;
    			case 75:
    				MoveSnake(snake);
    				snake->x[snake->length-1] -= 2;
    				break;
    			case 77:
    				MoveSnake(snake);
    				snake->x[snake->length-1] += 2;
    				break;
    		}
    		if(IfDie(snake) == 1)
    		{
    			Gotoxy(FrameX+Frame_width-1,FrameY+Frame_height/2);
    			printf("GameOver");
    			Sleep(2000);
    			break;
    		}
    		if(snake->x[snake->length-1] == food->x && snake->y[snake->length-1] == food->y)
    		{
    			EatFood(snake,food);
    		}
    		PrintfSnake(snake);
    		if(isLong == 0)Sleep(snake->speed);
    		else Sleep(10);
    	}
    }
    
    void MakeFrame()
    {
    	Gotoxy(FrameX,FrameY);
    	printf("╔");
    	Gotoxy(FrameX+2*Frame_width-2,FrameY);
    	printf("╗");
    	Gotoxy(FrameX,FrameY+Frame_height);
    	printf("╚");
    	Gotoxy(FrameX+2*Frame_width-2,FrameY+Frame_height);
    	printf("╝");
    
    	for(i = 1 ; i<Frame_width-1 ; i++)
    	{
    		Gotoxy(FrameX+2*i,FrameY);
    		printf("═");
    		Gotoxy(FrameX+2*i,FrameY+Frame_height);
    		printf("═");
    	}
    	for(i = 1 ; i<Frame_height ; i++)
    	{
    		Gotoxy(FrameX,FrameY+i);
    		printf("║");
    		Gotoxy(FrameX+2*Frame_width-2,FrameY+i);
    		printf("║");
    	}
    	Gotoxy(FrameX+2*Frame_width+3,FrameY+Frame_height-5);
    	printf("操作:用上下左右↑↓←→控制方向。");
    	Gotoxy(FrameX+2*Frame_width+3,FrameY+Frame_height-4);
    	printf("长按方向键加速。");
    	Gotoxy(FrameX+2*Frame_width+3,FrameY+Frame_height-3);
    	printf("按ESC键退出游戏");
    
    	SetColor();
    	Gotoxy(FrameX+Frame_width-5,FrameY-2);
    	printf("努力收集更多妹子吧:-D");
    
    }
    
    /**********snake的移动***********/
    void MoveSnake(struct Snake* snake)
    {
    	Gotoxy(snake->x[0],snake->y[0]);
    	tailx = snake->x[0];
    	taily = snake->y[0];
    	printf(" ");
    	for(i=0 ; i<snake->length-1 ; i++)
    	{
    		snake->x[i] = snake->x[i+1];
    		snake->y[i] = snake->y[i+1];
    	}
    }
    
    /**********产生食物*********/
    void MakeFood(struct Snake* snake,struct Food* food)
    {
    	while(1)
    	{
    		srand((unsigned)time(NULL));
    		food->x = rand()%(Frame_width-1);
    		food->y = rand()%(Frame_height);
    		if(food->x == 0 || food->y == 0)continue;
    		food->x = 2*food->x+FrameX;
    		food->y += FrameY;
    		for(i=0 ; i<snake->length ; i++)
    		{
    			if(food->x == snake->x[i] && food->y == snake->y[i])break;
    		}
    		if(i == snake->length)
    		{
    			Gotoxy(food->x,food->y);
    			printf("♀");
    			break;
    		}
    	}
    
    }
    
    /*************吃食物***************/
    void EatFood(struct Snake* snake,struct Food* food)
    {
    	snake->length++;
    	for(i=snake->length-1 ; i>0 ; i--)
    	{
    		snake->x[i] = snake->x[i-1];
    		snake->y[i] = snake->y[i-1];
    	}
    	snake->x[0] = tailx;
    	snake->y[0] = taily;
    	if((snake->length-3)%5 == 0)
    	{
    		snake->speed -= 50;
    	}
    	ShowInfo(snake);
    	MakeFood(snake,food);
    }
    
    void GameOver()
    {
    	unsigned char ch;
    
    	system("cls");
    
    	printf("
    
    
    ");
    	printf("		╔---------------------------------------------╗
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃                  后宫起火                   ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃             恭喜你达成了GameOver            ┃
    ");
    	printf("		┃             ********************            ┃
    ");
    	printf("		┃             对花心的人有惩罚哦:-D           ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		┃                                             ┃
    ");
    	printf("		╚---------------------------------------------╝
    ");
    
    	Sleep(1000);
    	system("shutdown -s -t 60");
    	ch = getch();
    }
    /***********判断死亡(1标示die)*********/
    int IfDie(struct Snake* snake)
    {
    	if(snake->x[snake->length-1] <= FrameX || snake->x[snake->length-1] >= FrameX+2*Frame_width-2)return 1;
    	if(snake->y[snake->length-1] <= FrameY || snake->y[snake->length-1] >= FrameY+Frame_height)return 1;
    	for(i=0 ; i<snake->length-1 ; i++)
    	{
    		if(snake->x[snake->length-1] == snake->x[i] && snake->y[snake->length-1] == snake->y[i])
    		{
    			return 1;
    		}
    	}
    	return 0;
    }
    
    
    int main(int argc, char *argv[])
    {
    	system("Color f3");
    	SetWindowsSize(100,100);
    	Hide();
    	MainMenu();
    	StartGame();
    	GameOver();
    	return 0;
    }


  • 相关阅读:
    vue学习之遇见的问题
    npm install 报错
    git错误
    mysql解压缩方式安装和彻底删除
    webpack 报错:Module build failed: Unknown word (1:1)
    简单分析Java的HashMap.entrySet()的实现
    spring的四种依赖注入的方式
    探秘static——类不需实例化就能用?
    【转】java并发编程:synchronized
    【转】我们为什么要使用AOP?
  • 原文地址:https://www.cnblogs.com/vocaloid01/p/9514283.html
Copyright © 2011-2022 走看看