飞道的博客

贪吃蛇代码100行c/c++

509人阅读  评论(0)

贪吃蛇

说明: 本人想在网上 找一篇VS或者dev可以运行的贪吃蛇玩一下并且看看怎么实现的 ,奈何网上的c/c++版本不是报错就是运行不了, ~一气之下连夜写了一个~~

基础知识 :结构体、数组 、srand()随机函数 以及#include <conio.h> 头文件下面的控制台输入
简单易懂没什么难的内容

运行环境 VScode2019 dev好像运行的更稳定 晕

要玩这个游戏的话 按键盘的上下左右哦

代码这么短值得说的是
运用了 head 和tail 吧 ,呃好像队列 (自己也不知道为啥想起来用这个)
贪吃蛇吃掉食物后tail就减减, 然后变为蛇的长度就增加啦
没吃的话一直走蛇身体的长度不变(害 我擦 自己也不会解释了 。。。 代码说话吧)
运行界面这样子吧

人狠话不多 代码:

在这里插入代码片
```#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>     // 随机函数的头文件
#include<iostream>  //输入输出流吧      c也可以 cout  换成printf 就好了
#include<conio.h>
#include<ctime>
using namespace std;
char s[1000][1000];
int N = 28 , M = 80 ,  direction  = 75 , k =77  ,grade = 0;      //n, m是地图的大小 ,dir和是方向  , grade是成绩     
int head = 4, tail = 1, leng, x, y, z = 1000 , game = 1; 
//head ,tail 是蛇头蛇尾的位置
struct note    
{
	int x, y;
}snake[1000000];     //蛇的结构体

void random()            //地图上随机出现蛇的食物
{
	srand((unsigned int)time(NULL));
   
	x = rand() % N;
	y = rand() % M;
   
	while (x == snake[head].x && y == snake[head].y) //判断食物是否会被随机到蛇身上   如果是重新随机
	{
		x = rand() % N;
		y = rand() % M;
	}
	s[x][y] = '*';
}
void start()  //初始化函数
{ 
	for (int i = 0; i <= N; i++)
	{
		for (int j = 0; j <=  M; j++)
		{
			s[i][j] = ' ';
			if (j == 0 || j == M ) s[i][j] = '|';

			if (i == 0 || i == N ) s[i][j] = '-';
		}
 	}
	s[1][1] = s[1][2] = s[1][3] = '*';
	s[1][4] = '#';

	snake[1].x = 1, snake[1].y = 1;
	snake[2].x = 1, snake[2].y = 2;
	snake[3].x = 1, snake[3].y = 3;
	snake[4].x = 1, snake[4].y = 4;
}

int gameover()          //游戏结束函数   但是蛇可以自己吃自己bug没解决
{                          
	if (snake[head].x <= 0 || snake[head].x >= N || snake[head].y <= 0 || snake[head].y >= M)     return 0; //超过边界  就结束
	return 1;
}
void display()   //输出函数
{   
	if (x == snake[head].x && y == snake[head].y)//吃到食物就
	{
		tail--;    grade += 20;
		s[snake[tail].x][snake[tail].y] = '*';
		random();
	}

	system("cls"); // 清屏 
	z = 1e4;
	for (int i = 0; i <= N; i++)
	{   
		puts(s[i]);
	}
	while (z--);
}

void  f()  //方向函数吧      不知道起名啥了 
{ 
	direction = k;
	head++;      //在控制台中向上是72  向下是80  等等  
	if (direction == 72) 	   snake[head].x = snake[head - 1].x - 1, snake[head].y = snake[head - 1].y;                    //向上
	if (direction == 80)    snake[head].x = snake[head - 1].x +1 , snake[head].y = snake[head - 1].y;                        //向下
	if (direction == 75)    snake[head].x = snake[head - 1].x , snake[head].y = snake[head - 1].y -1 ;                           //向左
	if (direction == 77)    snake[head].x = snake[head - 1].x , snake[head].y = snake[head - 1].y  + 1;                    //向右
	s[snake[tail].x][snake[tail].y] = ' ';
	tail++;
	s[snake[head].x][snake[head].y] = '#';
	s[snake[head - 1].x][snake[head - 1].y] = '*';
	if (!gameover())
	{ 
		game = 0;
		system("cls"); // 清屏 
		cout << endl << endl;;
		cout << "\t\t\t\t\t" << "你的得分是:"  <<grade;
		cout << "\n\n\n\n\n\n\n\n\n\n";
	}
	 else display();
}

int main()
{
	cout << "\n\n\n\n\n\t\t\t 欢迎进入贪吃蛇游戏!" << endl;//欢迎界面;  
	cout << "\n\n\n\t\t\t 按任意键马上开始。。。" << endl;//准备开始;;  
	_getch();     //和getchar类似   得到键盘的一个字符  不会的百度哦

	  system("cls"); // 清屏 
	 start();
	 display();
	 random();
	 while (1)
	 {
		 if (!game) break;
		  //无按键   继续运动 
		 if (_kbhit() )                       // _kbhit()判断是否有输入
		 {
			 k = _getch();
		 }
		 else f();                  //  有按键   转向运动
	 }
}

个人码风自认为不错,易读,易理解

贪吃蛇由于是把蛇存在数组里面输出的时候有闪屏
所以就写了这篇 用vs + easyx做的图形界面

下一篇入口
贪吃蛇二


转载:https://blog.csdn.net/hellowworld1/article/details/107896325
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场