精华内容
下载资源
问答
  • DevC++贪吃蛇小游戏

    2020-11-01 20:06:35
    自己用DevC++编写的C++控制台贪吃蛇小游戏,带有难度选择,可以选择4个难度,还有计时、加速、暂停功能。需要的可以参考。
  • Dev-C++贪吃蛇

    2018-02-11 23:48:35
    【原创】用Dev-C++编译器编译。不用改编译器任何设置,代码可以直接编译!可用!上下左右键控制,回车暂停、选中。
  • C/C++贪吃蛇游戏

    2018-06-16 15:40:57
    这个贪吃蛇游戏的核心算法完全是自己想的,没有参照任何人的,如果你下载了,希望你不要传出去,好让我多赚一些分。自己做的东西实在不容易,绝对干货,希望大家谅解!想用C/C++开发小游戏的就进来吧。
  • c++ 贪吃蛇

    2019-03-02 13:14:47
    c++小游戏代码~ 欢迎指出问题 初学者编译望见谅啊
  • c++贪吃蛇游戏程序源码,详细编写,适合c及c++初学者学习与临摹!
  • c++贪吃蛇贪吃蛇.zip

    2020-03-28 18:18:03
    c++贪吃蛇
  • C++贪吃蛇代码

    2016-02-12 16:57:45
    C++贪吃蛇代码,使用的dev c++测试,
  • C++贪吃蛇源代码

    2015-12-14 13:20:38
    C++贪吃蛇源代码,游戏共设两关,按食物累计计算是否通关,有兴趣的朋友可以下载参考。
  • C++贪吃蛇游戏源代码

    2015-06-23 20:33:47
    C++程序制作贪吃蛇游戏,核心算法是如何实现移动和吃掉食物.没有碰到食物的时候,把当前运动方向上的下个节点入队,并通过链表来添加蛇的节点.当吃到随机的食物时,蛇的节点自动增加。
  • 本人用VS2017和C++写的贪吃蛇代码,运用方向键控制上下左右,具有不同果实,加速减速效果,同时有开始界面、暂停界面、结束界面和相应的BGM,另外还有存档和排行榜功能(并不是多用户)。同时附赠实验报告。
  • c++贪吃蛇小游戏

    2018-12-19 21:45:01
    代码可完美运行,界面美观颜色多样,有文件记录最高分及排行榜
  • C++贪吃蛇

    千次阅读 2020-02-07 20:18:51
    C++贪吃蛇基本概念前言采用的平台贪吃蛇移动食物的产生判断游戏结束吃到食物代码实现效果后记 基本概念 前言 最近疫情比较严重没有带书回家,所以就突发奇想来实现之前一直想做的一个游戏,或许这个游戏比较粗糙但是...

    基本概念

    前言

    最近疫情比较严重没有带书回家,所以就突发奇想来实现之前一直想做的一个游戏,或许这个游戏比较粗糙但是也是自己进步的一小步。希望能够对大家有帮助。

    采用的平台

    windows+visual studio+C++

    贪吃蛇移动

    贪吃蛇使用链表实现,
    贪吃蛇显示
    每一次移动,蛇尾摘下来,接到蛇头方向。
    在这里插入图片描述
    rear向后移动,front向下一个移动。在这里插入图片描述
    分别以W,A,S,D四个字符标志移动方向,其中W向上移动,A向左移动,S向下移动,D向右移动。其中W:x-1;A:y-1;S:x+1;D:y+1在这里插入图片描述

    食物的产生

    生成一个新的类

    class Food
    {
    public:
    	int x;
    	int y;
    };
    

    食物的产生采用随机函数的方法,但是产生的时候要判断是不是在蛇的身体上。如果是在蛇的身体上就需要重新生成一个位置。
    判断是这个条件采用遍历循环的方法,如果遍历过程中出现food.x == p->x&&food.y == p->y则判断为false。

    判断游戏结束

    在这个游戏当中没有考虑蛇吃本身的情况,所以只需要判断是否触壁。如果触壁就返回game over。

    吃到食物

    如果food的x和y和当前蛇头的x和y相等,则认为吃到了食物。在这里插入图片描述
    这个时候就将当前食物的位置作为蛇头的位置,在这里插入图片描述

    代码

    map.h

    #pragma once
    #include<iostream>
    class Map
    {
    private:
    	char screen[25][25];
    public:
    	void init();
    	void print();
    	void setPoint(int x, int y, char ch);
    	char getPoint(int x, int y);
    	void clear();
    
    };
    

    map.cpp

    #include "Map.h"
    void Map::init() {//初始化map
    	for (int i = 0; i < 25; i++)
    	{
    		screen[0][i] = '*';
    		screen[i][0] = '*';
    		screen[24][i] = '*';
    		screen[i][24] = '*';
    	}
    	for (int i = 1; i < 24; i++)
    		for (int j = 1; j < 24; j++)
    			screen[i][j] = ' ';
    }
    
    void Map::print() {//打印数组,其中横向采用一个空格间距,
    //这样的效果会更加像一个正方形效果更好
    	for (int i = 0; i < 25; i++)
    	{
    		for (int j = 0; j < 25; j++)
    			std::cout << screen[i][j] << ' ';
    		std::cout << std::endl;
    	}
    }
    
    void Map::setPoint(int x, int y, char ch) {
    	screen[x][y] = ch;
    }
    
    char Map::getPoint(int x, int y) {
    	return screen[x][y];
    }
    
    void Map::clear() {//清空现有的所有位置
    	for (int i = 1; i < 24; i++)
    		for (int j = 1; j < 24; j++)
    			screen[i][j] = ' ';
    }
    

    Sanke.h

    #pragma once
    
    #include<vector>
    #include<iostream>
    #include<queue>
    #include"Map.h"
    #include"Point.h"
    #include"Food.h"
    using namespace std;
    class Sanke
    {
    public:
    	void move();
    	void init();
    	void print_1();
    	bool check();
    	void allFood();
    private:
    	int score = 0;
    	Map map;
    	Food food;
    	Point* point_sanke_front;
    	Point* point_sanke_rear;
    	char direction;
    	void getDirection();
    	void moveUp();
    	void moveDown();
    	void moveRight();
    	void moveLeft();
    	bool checkFood();
    	void eatFood();
    	void produceFood();
    };
    

    Sanke.cpp

    #include "Sanke.h"
    #define random(x) (rand()%x)
    
    void Sanke::move() {//进行移动
    	getDirection();
    	switch (direction)
    	{
    	case 'W':
    		moveUp();
    		break;
    	case 'S':
    		moveDown();
    		break;
    	case 'A':
    		moveLeft();
    		break;
    	case 'D':
    		moveRight();
    		break;
    	default:
    		break;
    	}
    }
    
    void Sanke::getDirection() {//获取方向按键,利用一个direction进行存储
    	cin >> direction;
    }
    
    void Sanke::moveUp() {//向上移动
    	if (point_sanke_rear->x == food.x && point_sanke_rear->y == food.y)
    	{//如果遇到了食物就调用吃食物的函数和产生食物的函数
    		score++;
    		eatFood();
    		produceFood();
    	}
    	else
    	{//否则,就采用前面所介绍的向上移动
    		Point* p = point_sanke_front;
    		point_sanke_front = point_sanke_front->next;
    		p->x = point_sanke_rear->x - 1;
    		p->y = point_sanke_rear->y;
    		p->next = nullptr;
    		point_sanke_rear->next = p;
    		point_sanke_rear = point_sanke_rear->next;
    	}
    }
    
    void Sanke::moveDown() {//向下移动
    	if (point_sanke_rear->x == food.x && point_sanke_rear->y == food.y)
    	{
    		score++;
    		eatFood();
    		produceFood();
    	}
    	else
    	{
    		Point* p = point_sanke_front;
    		point_sanke_front = point_sanke_front->next;
    		p->x = point_sanke_rear->x + 1;
    		p->y = point_sanke_rear->y;
    		p->next = nullptr;
    		point_sanke_rear->next = p;
    		point_sanke_rear = point_sanke_rear->next;
    	}
    }
    
    void Sanke::moveRight() {//向右移动
    	if (point_sanke_rear->x == food.x && point_sanke_rear->y == food.y)
    	{
    		score++;
    		eatFood();
    		produceFood();
    	}
    	else
    	{
    		Point* p = point_sanke_front;
    		point_sanke_front = point_sanke_front->next;
    		p->x = point_sanke_rear->x;
    		p->y = point_sanke_rear->y + 1;
    		p->next = nullptr;
    		point_sanke_rear->next = p;
    		point_sanke_rear = point_sanke_rear->next;
    	}
    }
    
    void Sanke::moveLeft() {//向左移动
    	if (point_sanke_rear->x == food.x && point_sanke_rear->y == food.y)
    	{
    		score++;
    		eatFood();
    		produceFood();
    	}
    	else
    	{
    		Point* p = point_sanke_front;
    		point_sanke_front = point_sanke_front->next;
    		p->x = point_sanke_rear->x;
    		p->y = point_sanke_rear->y - 1;
    		p->next = nullptr;
    		point_sanke_rear->next = p;
    		point_sanke_rear = point_sanke_rear->next;
    	}
    }
    
    void Sanke::init() {//初试化蛇对象
    	map.init();
    	Point* p1 = new Point(5, 5);
    	Point* p2 = new Point(5, 6);
    	Point* p3 = new Point(5, 7);
    	Point* p4 = new Point(5, 8);
    	Point* p5 = new Point(5, 9);
    	p1->next = nullptr;
    	p2->next = p1;
    	p3->next = p2;
    	p4->next = p3;
    	p5->next = p4;
    	point_sanke_rear = p1;
    	point_sanke_front = p5;
    	produceFood();
    }
    
    void Sanke::print_1() {//将所有蛇身体中的元素设置到二维数组中,调用setPoint()函数
    	system("cls");
    	map.clear();
    	map.setPoint(point_sanke_rear->x, point_sanke_rear->y, '@');
    	Point* p = point_sanke_front;
    	while (p != point_sanke_rear) {
    		map.setPoint(p->x, p->y, '#');
    		p = p->next;
    	}
    	map.setPoint(food.x, food.y, '$');
    	map.print();
    	cout << "得分:" << score << endl;
    }
    
    bool Sanke::check() {//检查是否碰壁
    	if (point_sanke_rear->x == 0 || point_sanke_rear->y == 0 ||
    		point_sanke_rear->x == 24 || point_sanke_rear->y == 24)
    	{
    		return false;
    	}
    	else
    	{
    		return true;
    	}
    }
    
    void Sanke::produceFood() {//产生食物
    	food.x = random(23) + 1;
    	food.y = random(23) + 1;
    	while (!checkFood())
    	{
    		food.x = random(23) + 1;
    		food.y = random(23) + 1;
    	}
    }
    
    void Sanke::eatFood() {//吃下食物的操作
    	Point* p = new Point(food.x, food.y);
    	p->next = nullptr;
    	point_sanke_rear->next = p;
    	point_sanke_rear = point_sanke_rear->next;
    }
    
    
    
    bool Sanke::checkFood() {//检查产生的食物是不是在蛇的身体上,如果在则返回true,反之返回false
    	Point* p = point_sanke_front;
    	while (p) {
    		if (p->x == food.x && food.y == p->y)
    		{
    			return false;
    		}
    		p = p->next;
    	}
    	return true;
    }
    
    void Sanke::allFood() {//所有的关于食物的操作集合
    	if (point_sanke_rear->x == food.x && point_sanke_rear ->y == food.y)
    	{
    		score++;
    		eatFood();
    		produceFood();
    	}
    }
    

    Food.h

    #pragma once
    class Food//存储食物的位置
    {
    public:
    	int x;
    	int y;
    };
    

    Point.h

    #pragma once
    struct Point//存储结点
    {
    	int x;
    	int y;
    	struct Point* next;
    	Point(int x_,int y_) : x(x_),y(y_){}
    };
    

    main.cpp

    #include"Sanke.h"
    
    int main() {
    	Sanke sanke;
    	sanke.init();
    	sanke.allFood();
    	sanke.print_1();
    	while (sanke.check())
    	{
    		sanke.move();
    		sanke.print_1();
    		sanke.allFood();
    	}
    	cout << "Game Over" << endl;
    }
    

    实现效果

    在这里插入图片描述在这里插入图片描述

    后记

    武汉加油!中国加油!早日战胜这次的疫情!希望你们看到这个文章也能够回忆起之前的记忆!

    展开全文
  • c++贪吃蛇

    2018-03-27 09:41:45
    c++贪吃蛇c++贪吃蛇c++贪吃蛇c++贪吃蛇c++贪吃蛇c++贪吃蛇c++贪吃蛇
  • vs2019 C++ 贪吃蛇
  • C++贪吃蛇.zip

    2019-07-25 15:00:52
    本人原创,仅供参考,本文档包含完整的c++控制台贪吃蛇代码,包含注释,欢迎下载
  • C/C++贪吃蛇

    2018-11-22 15:10:13
    简单的贪吃蛇代码,使用了C/C++和少量的windows api 没有GUI 用的控制台
  • 简单版C++贪吃蛇

    2018-01-01 18:25:37
    C++写的贪吃蛇小程序,控制台运行。包里装的纯文件,需要自行添加到工程里。IDE: VS2015
  • C++贪吃蛇说明书.doc

    2020-08-30 12:43:39
    C语言课程设计报告 题 目 贪吃蛇 指导教师 许 盟 院 系电气信息工程学院 班 级 01 姓 名 齐英帅 学 号 15 目 录 TOC \o "1-3" \h \z 1程序设计目的 0 2程序设计具体要求 0 3程序功能 0 4设计思路 0 5程序清单 0 6...
  • c++贪吃蛇c++贪吃蛇.cpp

    2021-06-25 19:18:25
    贪吃蛇游戏,这是我的大一c语言课程设计报告,参考百度上各种资源做的,
  • c++ 贪吃蛇v1.10版

    2018-01-03 20:17:05
    此程序为c++ 贪吃蛇v1.00版 的升级版,修正了原版的存在的一些bug。 欢迎下载!
  • c++贪吃蛇v2.00版

    2018-01-25 15:09:59
    该版本已全面升级,拥有日志、选关等新功能。因该版本不开源,若程序有bug请在评论区留言!
  • C++贪吃蛇游戏源码

    2015-01-22 22:58:00
    C++贪吃蛇游戏源码 @或直接从这里寻找@ http://download.csdn.net/user/cleopard/album @更多@ http://cleopard.download.csdn.net/ 福利 http://xuemeilaile.com 17份软件测试文档 ...
  • C++贪吃蛇Demo

    2016-12-27 15:39:24
    C++开发的贪吃蛇
  • c++贪吃蛇实现/图形化编程 大多数用c++实现贪吃蛇小游戏比较繁琐,该程序以及其简单的思路和代码来实现贪吃蛇小游戏的逻辑过程,另外加上图形化编程,可以更有利于初学者进行上手学习。
  • c++贪吃蛇完整源代码

    2010-06-13 18:41:35
    绝对完整的贪吃蛇源代码,c++编写,环境为visualc++6.0,包括完整的工作区、工程文件。是c++初学者不可多得的资料
  • c++贪吃蛇源代码 完整版

    万次阅读 多人点赞 2020-01-10 16:26:26
    c++ 实现贪吃蛇, 完整源码 文章结构: 数据结构分析 程序运行分析 难点分析 一点思考 源代码 总结 数据结构分析: 1.双向队列:这里我才用双向队列的数据结构存储蛇身节点(这里的蛇身节点我才用...

    c++ 实现贪吃蛇, 完整源码

    0.非常重要的注意事项

    请注意:
    1.这是c++代码,请建立.cpp文件而不是.c文件,然后将代码拷贝进去,再使用c++编译器进行编译运行。

    2.因为使用了一些c++11标准当中的语法,所以c++编译器的编译标准至少需要设置到c++11以上,不然会报错。编译标准可以在你的IDE里设置,或者使用命令行编译时附加-std=c++11选项。

    3.代码中使用了getch()函数,用于无回显的接收用户输入;使用了kbhit()函数用于判断用户是否按下键盘。但是如果你在visual studio中直接运行本代码可能会报错,你可以将上述两个函数替换为_getch()函数和_kbhit()函数就可以了。

    1.数据结构分析:

    这里我采用双向队列的数据结构存储蛇身节点,目的是:方便,减少屏闪。并且双向队列也能更好的体现贪吃蛇本身的特点。有利于实现,且效率也较高。

    2.程序运行分析

    程序开始用户随机按下w,a,s,d中任意按键开始游戏并且作为蛇运动的初始方向(如果刚开始觉得蛇的运动速度太慢可以键入’v’使变为当前运行素的1.25倍速,键入’b’则会使之变为当前速度的2/3倍速),然后进入循环持续游戏直到游戏结束,显示分数之后用户输入任意按键退出游戏。

    3.难点分析

    1.蛇移动怎么显示?

    这也就是我采用双向队列的原因,蛇每运动一步,就从双向队列中弹出队尾,然后将新的队首(即蛇头)压入队列首部,然后再清除蛇尾打印蛇身即可,不需要对贪吃蛇全部进行清楚以及打印,可以极大的减少程序运行过程中出现的闪烁现象。如果吃到食物那么本次运动就会在将蛇尾变为蛇头的同时再加入一个蛇身达到使蛇身长度加一的目的(我认为双向队列更能从本质上体现贪吃蛇本来的特点,而每次弹出队尾,加入队首而不对中间的蛇身进行改变也使程序变得更加简洁,运行更流畅)

    2.怎么控制吃到食物后蛇的速度的变化?

    最开始我设置初始速度为1000(即:Sleep()函数的参数为1000)每次吃到食物就将速度乘以0.8以此达到加速的目的。但我发现到后面速度越来越快没有上限,根本无法控制。
    解法:设置一个上限为MaxSpeed,则速度为 MaxSpeed + Index,MaxSpeed 保持不变且较小作为蛇速度的渐进上限,每次乘以0.8(可自定义)则乘到Index上面,这样的话速度就不会无限制的上升。

    3.怎么解决屏幕闪烁?

    解:不要使用system(“cls”);清屏函数,使用函数SetConsoleCursorPosition控制光标填充空格进行覆盖能大大减少屏闪问题!!这一点要注意了!

    4.一些废话

    1.首先肯定是存储蛇身的数据结构方面,有很多种选择:链表,双向队列,循环队列,vector甚至数组都可以用来存储蛇身。
    2.最开始以为这个比较简单…上手就开始写写废了一次,提醒大家在写程序(特别是这种结构比较复杂且步骤较多的程序)时一定要先进行规划,想清楚要使用的数据结构以及构建方式,想清楚再写,避免浪费时间。

    5.源代码

    下面是源代码,还需要什么功能大家可以在此基础上进行改动。

    #include<iostream>
    #include<windows.h>
    #include<conio.h>
    #include<deque>
    #include<ctime>
    #include<stdexcept>
    using namespace std;
    
    struct Snake { //蛇类结构体
        char image;
        short x, y; //坐标
    };
    
    class snakeGame {
    	public:
    	snakeGame();
    	void printMap();
    	// 控制光标移动
    	void gotoxy(short x, short y) {
    		hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获取句柄
    		pos = {x, y};
    		SetConsoleCursorPosition(hOut, pos); //移动光标
    	}
    	//隐藏光标
    	void HideCursor()
    	{
    		HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    		CONSOLE_CURSOR_INFO CursorInfo;
    		GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
    		CursorInfo.bVisible = false; //隐藏控制台光标
    		SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
    	}
    	// 初始化蛇身,可根据需要更改初始长度
    	void initSnake() {
    		snake.push_front({'@', width / 2, height / 2});
    		for (int i=0; i<2;++i)
    			snake.push_back({'+', width/2,static_cast<short>(height/2+i+1)});
    	}
    	// 判断是否食物产生位置与蛇身冲突
    	int WrongLocation() {
    		for (Snake body : snake)
    			if(body.x == food_x && body.y == food_y) return 0;
    		return 1;
    	}
    	// 产生食物,并打印
    	void createFood() {
    		do {
    			food_x = rand() % (width - 4) + 2;
    			food_y = rand() % (height - 2) + 1;
    		} while (!WrongLocation());//处理冲突
    		gotoxy(food_x,food_y); cout << '*' << endl; //打印食物
    	}
    	void printSnake();
    	// 清除蛇尾
    	inline void clearSnake(Snake &tail) {
        	gotoxy(tail.x, tail.y); cout << ' '; //覆盖蛇尾,不使用清屏函数,避免了闪烁
    	}
    	void judgeCrash();
    	void foodEaten();
    	// 监控用户键盘输入
    	void userInput() {
    		char ch;
    		switch(ch=getch()) {
    			case 'w':if (dir != 's') dir = ch;break;
    			case 'a':if (dir != 'd') dir = ch;break;
    			case 's':if (dir != 'w') dir = ch;break;
    			case 'd':if (dir != 'a') dir = ch;break;
    			case 'v':speed*=0.8;break; case 'b':speed*=1.5;break;
    			case ' ':gotoxy(width / 2, height); cout << "游戏已暂停,任意键继续"; getch();
                gotoxy(width / 2, height); cout << "                     "; break;
    			default:break;
    		}
    	}
    	private:
    	// 以下是程序运行当中需要用到的一些中间变量或者是数据变量。
    	enum MapSize {height = 40,width = 120}; //地图尺寸
    	HANDLE hOut; COORD pos;
    	char dir; //direction
    	bool beg,eatFood=false;
    	double speed=200;
    	deque<Snake> snake;
    	int food_x,food_y;
    	int score=0;
    };
    // 处理吃到食物的情况
    void snakeGame::foodEaten() {
    	createFood();
    	eatFood=true;
    	speed*=.8;
    	++score;
    }
    // 判断蛇是否撞墙或者吃到自己的尾巴
    void snakeGame::judgeCrash() {
    	int flag=0;
    	if (snake.size()>=5) {
    		deque<Snake>::iterator iter = snake.begin() + 1;
    		int x = (iter-1)->x, y = (iter-1)->y;
    		for (; iter != snake.end(); ++iter) {
    			if (iter->x == x && iter->y == y) flag=1;
    		}}
    	if (flag || snake.front().x == 1 || snake.front().x == width - 2 || snake.front().y == 0 || snake.front().y == height - 1)//检测是否撞墙或者是否吃到自身
        {
            gotoxy(width / 2 - 10, height /2);
            cout << "游戏结束!您的分数是: " << score << "分(回车继续)"<<endl;
            while(1) {
                dir = getch();
                if (dir == '\r') break;}
    		runtime_error quit("游戏结束,正常退出"); throw quit;
        }
    }
    // 将蛇身打印出来
    void snakeGame::printSnake() {
        deque<Snake>::const_iterator iter = snake.begin();
        for (; iter <= snake.begin() + 1 && iter < snake.end(); ++iter) {
            gotoxy(iter->x, iter->y); cout << iter->image;
        }
    }
    // 打印出边框
    void snakeGame::printMap() {
    	int i;
        for (i = 0; i != width; i += 2) cout << "■"; //这个图案宽度占2,高度占1
        gotoxy(0, 1);
        for (i = 1; i != height; ++i) cout << "■" << endl;
        for (i = 1; i != height; ++i) {
            gotoxy(width - 2, i); cout << "■";}
        gotoxy(0, height - 1);
        for (i = 0; i != width; i += 2) cout << "■";
        cout << "贪吃蛇:1.方向键开始游戏 2.*代表食物 3.空格键暂停游戏\n        4.键入'v'加速    5.键入'b'减速";
    }
    // 类的构造函数。
    // 包含了程序的初始化(地图绘制,蛇身初始化),程序运行,程序结束等内容
    // 是程序最关键的部分
    snakeGame::snakeGame() {
    	HideCursor(); // 隐藏光标
    	srand(static_cast<unsigned int>(time(NULL)));
    	beg=true;
    	Snake tmp1,tmp2;
    	while (1) {
    		if(beg) { // 判断是不是第一次运行程序,因为第一次运行需要打印边框
    			printMap();
    			dir = getch();
    			initSnake();
    			createFood();
    			beg = eatFood=false;
    		}
    		tmp2=snake.back();
    		tmp1=snake.front();
    		snake.pop_back();
    		if (eatFood) { // 如果吃到食物...
    			tmp2.image='+';
    			snake.push_back(tmp2);
    			eatFood=false;
    		}
    		else clearSnake(tmp2);
    		// 判断当前的前进方向,根据dir来进行移动
    		if      (dir == 's') ++tmp1.y;
            else if (dir == 'a') --tmp1.x;
            else if (dir == 'd') ++tmp1.x;
            else 				 --tmp1.y;
    		try{
    			judgeCrash(); // 判断是否撞墙或者吃到自己
    		}
    		catch(runtime_error &quitSignal) {
    			throw quitSignal;
    		}
    		snake.front().image='+';
    		snake.push_front(tmp1);
    		printSnake();
    		Sleep(speed+30);
    		if (tmp1.x == food_x && tmp1.y == food_y) 
    			foodEaten();
    		// 监测用户的键入
    		if(kbhit()) userInput();
    	}
    }
    int main() {
    	// 设置小黑框的一些参数
    	system("mode con cols=120 lines=42");
    	try{
    		snakeGame game;
    	}
    	catch(runtime_error &gameEnd) {
    		system("cls");
    		cout<<gameEnd.what();
    		getch();
    	}
    }
    

    6.运行效果展示

    将边界改成方块后的运行截图

    7.总结

    网上真正能用的贪吃蛇源代码还是很少的,就算找到了不是要收费下载就是复制过来一大堆报错或者bug运行不了,所以本着帮助他人的想法自己写了一个版本的。写得不是很好,有不足之处欢迎大家批评指正。
    有任何问题可以留在评论区,力所能及可以给予帮助。
    peace~

    如果代码有报错可以去看看开头的重要注意事项喔~

    展开全文
  • C++贪吃蛇升级版

    2014-11-26 20:21:40
    基于dos控制台的贪吃蛇升级版,使用了许多windows API实现了常规控制台程序不能实现的功能,如自己定位光标位置等。很值得学习!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,122
精华内容 2,848
关键字:

c++贪吃蛇

c++ 订阅